@odx/auth 15.0.1 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @odx/auth
2
2
 
3
+ ## 16.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - f6304f2: Fix: Auth interface typo
8
+
9
+ ## 15.0.2
10
+
11
+ ### Patch Changes
12
+
13
+ - 778fef4: Update dependencies
14
+
3
15
  ## 15.0.1
4
16
 
5
17
  ### Patch Changes
@@ -41,10 +41,10 @@ export class AuthComponent {
41
41
  */
42
42
  this.hideInstitution = input(false);
43
43
  }
44
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AuthComponent, isStandalone: true, selector: "odx-auth", inputs: { hideInstitution: { classPropertyName: "hideInstitution", publicName: "hideInstitution", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslations(translations)], ngImport: i0, template: "<odx-action-group>\n @if (vm$ | async; as vm) {\n <ng-container ngProjectAs=\"[odxButton]\">\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" />\n </button>\n } @else {\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft />\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n }\n <ng-template #userProfileMenu>\n @if (!hideInstitution() && vm.idClaims?.institutionName; as institutionName) {\n <odx-area-header class=\"odx-padding-x-12 odx-padding-bottom-8\" size=\"small\">\n <odx-area-header-subtitle class=\"odx-auth-institution-name\">{{ institutionName }}</odx-area-header-subtitle>\n </odx-area-header>\n }\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\" />\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content />\n <odx-auth-actions [claims]=\"vm.idClaims\"></odx-auth-actions>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ 'signOutButtonText' | odxTranslate | async }}\n <odx-icon name=\"logout\" alignRight />\n </button>\n </div>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-container>\n }\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}.odx-auth-actions{display:block;margin-top:calc(var(--odx-vertical-rythm-base-size) * .5);margin-bottom:calc(var(--odx-vertical-rythm-base-size) * .5);margin-right:calc(var(--odx-vertical-rythm-base-size) * .25);margin-left:calc(var(--odx-vertical-rythm-base-size) * .25)}\n"], dependencies: [{ kind: "ngmodule", type: AreaHeaderModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: i2.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i2.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i3.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i4.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i6.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i7.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "directive", type: SignInDirective, selector: "[odxButton][odxAuthSignIn]", outputs: ["odxAuthSignIn"] }, { kind: "directive", type: SignOutDirective, selector: "[odxButton][odxAuthSignOut]", outputs: ["odxAuthSignOut"] }, { kind: "ngmodule", type: LoadingSpinnerModule }, { kind: "component", type: AuthActionsComponent, selector: "odx-auth-actions", inputs: ["claims"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AuthComponent, isStandalone: true, selector: "odx-auth", inputs: { hideInstitution: { classPropertyName: "hideInstitution", publicName: "hideInstitution", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideTranslations(translations)], ngImport: i0, template: "<odx-action-group>\n @if (vm$ | async; as vm) {\n <ng-container ngProjectAs=\"[odxButton]\">\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" />\n </button>\n } @else {\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft />\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\n }\n <ng-template #userProfileMenu>\n @if (!hideInstitution() && vm.idClaims?.institutionName; as institutionName) {\n <odx-area-header class=\"odx-padding-x-12 odx-padding-bottom-8\" size=\"small\">\n <odx-area-header-subtitle class=\"odx-auth-institution-name\">{{ institutionName }}</odx-area-header-subtitle>\n </odx-area-header>\n }\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\" />\n {{ vm.idClaims?.username }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content />\n <odx-auth-actions [claims]=\"vm.idClaims\"></odx-auth-actions>\n <div class=\"odx-margin-top-12\" odxLayout=\"flex vertical-center\">\n <odx-logo odxLayout=\"auto\" class=\"odx-margin-left-12 odx-margin-right-auto\"></odx-logo>\n <button odxButton odxAuthSignOut variant=\"ghost\" data-testid=\"odx-auth-sign-out-button\">\n {{ 'signOutButtonText' | odxTranslate | async }}\n <odx-icon name=\"logout\" alignRight />\n </button>\n </div>\n </ng-template>\n <ng-template #userAvatar>\n <odx-avatar class=\"odx-auth-user-avatar\">\n {{ vm.idClaims?.initials ?? '' }}\n </odx-avatar>\n </ng-template>\n </ng-container>\n }\n</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}.odx-auth-actions{display:block;margin-top:calc(var(--odx-vertical-rythm-base-size) * .5);margin-bottom:calc(var(--odx-vertical-rythm-base-size) * .5);margin-right:calc(var(--odx-vertical-rythm-base-size) * .25);margin-left:calc(var(--odx-vertical-rythm-base-size) * .25)}\n"], dependencies: [{ kind: "ngmodule", type: AreaHeaderModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: i2.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i2.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i3.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i4.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i6.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i7.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownClickOutsideActive", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "directive", type: SignInDirective, selector: "[odxButton][odxAuthSignIn]", outputs: ["odxAuthSignIn"] }, { kind: "directive", type: SignOutDirective, selector: "[odxButton][odxAuthSignOut]", outputs: ["odxAuthSignOut"] }, { kind: "ngmodule", type: LoadingSpinnerModule }, { kind: "component", type: AuthActionsComponent, selector: "odx-auth-actions", inputs: ["claims"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
46
46
  }
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthComponent, decorators: [{
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthComponent, decorators: [{
48
48
  type: Component,
49
49
  args: [{ standalone: true, selector: 'odx-auth', imports: [
50
50
  AreaHeaderModule,
@@ -31,10 +31,10 @@ export class AuthDirective {
31
31
  this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);
32
32
  });
33
33
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
35
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: AuthDirective, isStandalone: true, selector: "ng-template[odxAuth]", inputs: { authorizationHandler: ["odxAuth", "authorizationHandler"], elseTemplate: ["odxAuthElse", "elseTemplate"] }, hostDirectives: [{ directive: i1.NgIf }], ngImport: i0 }); }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
35
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AuthDirective, isStandalone: true, selector: "ng-template[odxAuth]", inputs: { authorizationHandler: ["odxAuth", "authorizationHandler"], elseTemplate: ["odxAuthElse", "elseTemplate"] }, hostDirectives: [{ directive: i1.NgIf }], ngImport: i0 }); }
36
36
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthDirective, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthDirective, decorators: [{
38
38
  type: Directive,
39
39
  args: [{
40
40
  standalone: true,
@@ -5,11 +5,11 @@ import { SignInDirective, SignOutDirective } from './directives';
5
5
  import * as i0 from "@angular/core";
6
6
  const modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];
7
7
  export class AuthModule {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: AuthModule, imports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective], exports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective] }); }
10
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthModule, imports: [AuthComponent] }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, imports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective], exports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective] }); }
10
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, imports: [AuthComponent] }); }
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  imports: [...modules],
@@ -308,11 +308,11 @@ export class AuthService {
308
308
  this.oauthService.stopAutomaticRefresh();
309
309
  }
310
310
  }
311
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
312
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
311
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
312
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthService, providedIn: 'root' }); }
313
313
  }
314
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthService, decorators: [{
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthService, decorators: [{
315
315
  type: Injectable,
316
316
  args: [{ providedIn: 'root' }]
317
317
  }], ctorParameters: () => [] });
318
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBYyxlQUFlLEVBQUUsWUFBWSxFQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUNMLGVBQWUsRUFFZixVQUFVLEVBQ1YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEVBQ0wsRUFBRSxFQUNGLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNILE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFxQixNQUFNLFVBQVUsQ0FBQzs7QUFFaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUEwRnRCOzs7OztPQUtHO0lBQ0gsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVEO1FBbkdpQixlQUFVLEdBQUcsZ0JBQWdCLEVB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RSxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDOytHQTdVVSxXQUFXO21IQUFYLFdBQVcsY0FERSxNQUFNOzs0RkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQXV0aENvbmZpZywgT0F1dGhFcnJvckV2ZW50LCBPQXV0aFNlcnZpY2UsIFRva2VuUmVzcG9uc2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ2RlZXBtZXJnZS10cyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBtZXJnZSxcbiAgb2YsXG4gIHNoYXJlLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbiAgdGltZW91dCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RBdXRoQ29uZmlnIH0gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5pbXBvcnQgeyBzZXRIdHRwQXV0aEhlYWRlciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBBdXRoUGx1Z2luTWFuYWdlciwgQXV0aG9yaXplZEhhbmRsZXIgfSBmcm9tICcuL21vZGVscyc7XG5cbi8qKlxuICogVGhlIGBBdXRoU2VydmljZWAgY2xhc3MgcHJvdmlkZXMgYXV0aGVudGljYXRpb24gZnVuY3Rpb25hbGl0eSBmb3IgYW4gQW5ndWxhciBhcHBsaWNhdGlvbi5cbiAqIEl0IGhhbmRsZXMgT0F1dGgyL09JREMgYXV0aGVudGljYXRpb24sIHRva2VuIG1hbmFnZW1lbnQsIGFuZCB1c2VyIGlkZW50aXR5IGNsYWltcy5cbiAqXG4gKiBLZXkgcmVzcG9uc2liaWxpdGllcyBpbmNsdWRlOlxuICogLSBJbml0aWFsaXppbmcgYXV0aGVudGljYXRpb24gd2l0aCBhIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gKiAtIE1hbmFnaW5nIHRva2VucyAoYWNjZXNzLCByZWZyZXNoLCBhbmQgSUQgdG9rZW5zKS5cbiAqIC0gQ2hlY2tpbmcgYW5kIGVtaXR0aW5nIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uIHN0YXRlcy5cbiAqIC0gSGFuZGxpbmcgdXNlciBsb2dpbiBhbmQgbG9nb3V0IGZsb3dzLlxuICogLSBTdXBwb3J0aW5nIHNpbGVudCByZWZyZXNoIGFuZCBvZmZsaW5lIGF1dGhlbnRpY2F0aW9uIHNjZW5hcmlvcy5cbiAqIC0gSW50ZWdyYXRpbmcgYXV0aGVudGljYXRpb24gcGx1Z2lucyB2aWEgYEF1dGhQbHVnaW5NYW5hZ2VyYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW5qZWN0aW5nIHRoZSBBdXRoU2VydmljZVxuICogY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHt9XG4gKlxuICogLy8gVXNpbmcgdGhlIEF1dGhTZXJ2aWNlIHRvIGluaXRpYWxpemUgYXV0aGVudGljYXRpb25cbiAqIGFzeW5jIG5nT25Jbml0KCkge1xuICogICBjb25zdCBjb25maWc6IEF1dGhDb25maWcgPSB7IGNsaWVudElkOiAneW91ci1jbGllbnQtaWQnLCBkaXNjb3ZlcnlVcmw6ICdodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJyB9O1xuICogICBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLmluaXRpYWxpemUoY29uZmlnKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoQ29uZmlnID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhQbHVnaW5NYW5hZ2VyID0gaW5qZWN0KEF1dGhQbHVnaW5NYW5hZ2VyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvYXV0aFNlcnZpY2UgPSBpbmplY3QoT0F1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzUmVkaXJlY3RpbmckJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uQWNjZXNzVG9rZW5VcGRhdGUkID0gZnJvbUV2ZW50PFN0b3JhZ2VFdmVudD4odGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LCAnc3RvcmFnZScpLnBpcGUoXG4gICAgZmlsdGVyKCh7IGtleSB9KSA9PiBrZXkgPT09ICdhY2Nlc3NfdG9rZW4nIHx8IGtleSA9PT0gbnVsbCksXG4gICAgc3RhcnRXaXRoKG51bGwpLFxuICAgIHNoYXJlKCksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2lsZW50UmVmcmVzaEhhbmRsZXIkID0gdGhpcy5pc0luaXRpYWxpemVkJCQucGlwZShcbiAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMud2luZG93UmVmLmlzT25saW5lJCksXG4gICAgdGFwKChpc09ubGluZSkgPT4gdGhpcy51cGRhdGVTaWxlbnRSZWZyZXNoKGlzT25saW5lKSksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25BdXRoU3RhdGVDaGFuZ2UkID0gY29tYmluZUxhdGVzdChbdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoc3RhcnRXaXRoKG51bGwpKSwgdGhpcy53aW5kb3dSZWYuaXNPbmxpbmUkLCB0aGlzLm9uQWNjZXNzVG9rZW5VcGRhdGUkXSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHRoZSBzZXJ2aWNlIGhhcyBjb21wbGV0ZWQgaW5pdGlhbGl6YXRpb24uXG4gICAqIEVtaXRzIGBmYWxzZWAgdW50aWwgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxib29sZWFuPn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAvKipcbiAgICogRW1pdHMgYHRydWVgIHdoZW4gdGhlIHVzZXIgaXMgYmVpbmcgcmVkaXJlY3RlZCB0byB0aGUgbG9naW4gcGFnZS5cbiAgICogRW1pdHMgYGZhbHNlYCB3aGVuIHRoZXJlIGlzIG5vIHJlZGlyZWN0aW9uIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxib29sZWFuPn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc1JlZGlyZWN0aW5nJCA9IHRoaXMuaXNSZWRpcmVjdGluZyQkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbiBhIGxvYWRpbmcgc3RhdGUgKGUuZy4sIGR1cmluZyByZWRpcmVjdGlvbiBvciBwbHVnaW4gaW5pdGlhbGl6YXRpb24pLlxuICAgKiBFbWl0cyBgZmFsc2VgIHdoZW4gdGhlcmUgaXMgbm8gb25nb2luZyBsb2FkaW5nIGFjdGl2aXR5LlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxib29sZWFuPn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0xvYWRpbmckID0gbWVyZ2UodGhpcy5pc1JlZGlyZWN0aW5nJCwgdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5wbHVnaW5zTG9hZGluZyQpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQuXG4gICAqIEVtaXRzIGBmYWxzZWAgd2hlbiB0aGUgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZC5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8Ym9vbGVhbj59XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5wbHVnaW5zUmVhZHkkKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vbkF1dGhTdGF0ZUNoYW5nZSQpLFxuICAgIG1hcCgoKSA9PiB0aGlzLmlzQXV0aGVudGljYXRlZCgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBpZGVudGl0eSBjbGFpbXMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlci5cbiAgICogSWYgdGhlIHVzZXIgaXMgbm90IGF1dGhlbnRpY2F0ZWQsIGVtaXRzIGBudWxsYC5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8T2R4QXV0aC5JZGVudGl0eUNsYWltcyB8IG51bGw+fVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkZW50aXR5Q2xhaW1zJCA9IHRoaXMuaXNBdXRoZW50aWNhdGVkJC5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLmdldElkZW50aXR5Q2xhaW1zKCkpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIE9BdXRoIGVycm9yIGV2ZW50cy5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8T0F1dGhFcnJvckV2ZW50Pn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnMkID0gdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE9BdXRoRXJyb3JFdmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE9BdXRoRXJyb3JFdmVudCksXG4gICAgc2hhcmUoKSxcbiAgKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnRzIHdoZW4gYW4gT0F1dGggdG9rZW4gaXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxFdmVudD59XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25Ub2tlblJlY2VpdmVkJCA9IHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKFxuICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnR5cGUgPT09ICd0b2tlbl9yZWNlaXZlZCcpLFxuICAgIHNoYXJlKCksXG4gICk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW5ldmVyIHRoZSBgYWNjZXNzX3Rva2VuYCBpbiBsb2NhbCBzdG9yYWdlIGlzIHVwZGF0ZWQgb3IgY2xlYXJlZC5cbiAgICogUHJvdmlkZXMgYW4gb2JzZXJ2YWJsZSBmb3IgdHJhY2tpbmcgdG9rZW4gdXBkYXRlcy5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8U3RvcmFnZUV2ZW50IHwgbnVsbD59XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuVXBkYXRlJCgpOiBPYnNlcnZhYmxlPFN0b3JhZ2VFdmVudCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFjY2Vzc1Rva2VuVXBkYXRlJDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucnVuUGx1Z2lucygpO1xuICAgIHRoaXMuc2lsZW50UmVmcmVzaEhhbmRsZXIkLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXV0aENvbmZpZ30gY29uZmlnIC0gVGhlIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gUmVzb2x2ZXMgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKGNvbmZpZzogQXV0aENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0QXVkaWVuY2UoY29uZmlnLmNsaWVudElkKTtcbiAgICB0aGlzLm9hdXRoU2VydmljZS5jb25maWd1cmUoeyAuLi5jb25maWcsIG9wZW5Vcmk6IHRoaXMucmVkaXJlY3RUb0xvZ2luLmJpbmQodGhpcykgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCh0aGlzLmF1dGhDb25maWcuZGlzY292ZXJ5VXJsKTtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLnRyeUxvZ2luKCk7XG4gICAgICBpZiAodGhpcy5hdXRoQ29uZmlnLnJlZnJlc2hUb2tlbk9uSW5pdCkge1xuICAgICAgICBhd2FpdCB0aGlzLnRyeVJlZnJlc2hUb2tlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlIHx8IGVycm9yIGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvci50eXBlID09PSAndG9rZW5fcmVmcmVzaF9lcnJvcicgfHwgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgKGVycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGVycm9yLnN0YXR1cyA9PT0gNDAwKSkpIHtcbiAgICAgICAgdGhpcy5zaWduT3V0KHRydWUpO1xuICAgICAgICB0aGlzLnNpZ25Jbih0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNJbml0aWFsaXplZCQkLm5leHQodHJ1ZSk7XG4gICAgaWYgKHRoaXMuYXV0aENvbmZpZy5yZXF1aXJlU2lnbkluICYmICF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aGlzLnNpZ25Jbih0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudHJ5TG9hZFVzZXJQcm9maWxlKCk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZVRvUmVxdWVzdGVkVXJsKCk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbGwgYXV0aGVudGljYXRpb24gcGx1Z2lucyByZWdpc3RlcmVkIGluIHRoZSBgQXV0aFBsdWdpbk1hbmFnZXJgLlxuICAgKi9cbiAgcHVibGljIHJ1blBsdWdpbnMoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5ydW5QbHVnaW5zKHRoaXMpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGlzc3VlciBVUkwgZm9yIHRoZSBPQXV0aCBzZXJ2ZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtVUkx9IFRoZSBpc3N1ZXIgVVJMLlxuICAgKi9cbiAgcHVibGljIGdldElzc3VlcigpOiBVUkwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgcmV0dXJuIG5ldyBVUkwodGhpcy5vYXV0aFNlcnZpY2UuaXNzdWVyISk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIHRoZSBsb2dpbiBmbG93IGZvciB0aGUgdXNlci4gUmVkaXJlY3RzIHRvIHRoZSBsb2dpbiBwYWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgVVJMIHRvIHJlZGlyZWN0IGJhY2sgdG8gYWZ0ZXIgbG9naW4uXG4gICAqL1xuICBwdWJsaWMgc2lnbkluKHVybD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3codXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIHRoZSB1c2VyIG91dCBhbmQgY2xlYXJzIHRoZWlyIHRva2Vucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbbm9SZWRpcmVjdF0gLSBJZiBgdHJ1ZWAsIG5vIHJlZGlyZWN0aW9uIG9jY3VycyBhZnRlciBsb2dvdXQuXG4gICAqL1xuICBwdWJsaWMgc2lnbk91dChub1JlZGlyZWN0PzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ091dChub1JlZGlyZWN0IHx8ICF0aGlzLmdldEFjY2Vzc1Rva2VuKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIHJlZnJlc2ggdGhlIHVzZXIncyB0b2tlbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSBSZXNvbHZlcyB3aXRoIHRoZSBuZXcgdG9rZW4gcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VucygpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGFjY2VzcyB0b2tlbiwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gVGhlIGFjY2VzcyB0b2tlbiwgb3IgYG51bGxgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcmVmcmVzaCB0b2tlbiwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gVGhlIHJlZnJlc2ggdG9rZW4sIG9yIGBudWxsYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgSUQgdG9rZW4sIGlmIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IFRoZSBJRCB0b2tlbiwgb3IgYG51bGxgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0SWRUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBjbGFpbXMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlci5cbiAgICpcbiAgICogQHJldHVybnMge09keEF1dGguSWRlbnRpdHlDbGFpbXMgfCBudWxsfSBUaGUgaWRlbnRpdHkgY2xhaW1zLCBvciBgbnVsbGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRJZGVudGl0eUNsYWltcygpOiBPZHhBdXRoLklkZW50aXlDbGFpbXMgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZ2V0SWRUb2tlbigpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gZGVlcG1lcmdlKHRoaXMub2F1dGhTZXJ2aWNlLmdldElkZW50aXR5Q2xhaW1zKCksIHRoaXMuYXV0aFBsdWdpbk1hbmFnZXIuZ2V0UmVzdWx0KCkpIGFzIE9keEF1dGguSWRlbnRpeUNsYWltcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHJhdyBpZGVudGl0eSBjbGFpbXMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlci5cbiAgICpcbiAgICogQHJldHVybnMge09keEF1dGguUmF3SWRlbnRpdHlDbGFpbXMgfCBudWxsfSBUaGUgcmF3IGlkZW50aXR5IGNsYWltcywgb3IgYG51bGxgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0UmF3SWRlbnRpdHlDbGFpbXMoKTogT2R4QXV0aC5SYXdJZGVudGl0eUNsYWltcyB8IG51bGwge1xuICAgIGlmICghdGhpcy5nZXRJZFRva2VuKCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdXNlciBpcyBjdXJyZW50bHkgYXV0aGVudGljYXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBhdXRoZW50aWNhdGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMud2luZG93UmVmLmlzT25saW5lKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkgJiYgdGhpcy5vYXV0aFNlcnZpY2UuaGFzVmFsaWRJZFRva2VuKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc1ZhbGlkT2ZmbGluZVRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7QXV0aG9yaXplZEhhbmRsZXIgfCBudWxsfSBbYXV0aG9yaXplZEhhbmRsZXJdIC0gQSBoYW5kbGVyIHRvIGRldGVybWluZSBhdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGF1dGhvcml6ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHVibGljIGlzQXV0aG9yaXplZChhdXRob3JpemVkSGFuZGxlcj86IEF1dGhvcml6ZWRIYW5kbGVyIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBhdXRob3JpemVkSGFuZGxlciA/PyB0aGlzLmF1dGhDb25maWcuZGVmYXVsdEF1dGhvcml6ZWRIYW5kbGVyO1xuXG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKGhhbmRsZXI/Lih0aGlzLmdldElkZW50aXR5Q2xhaW1zKCksIHRoaXMsIHRoaXMucm91dGVyKSA/PyB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB3aGV0aGVyIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7QXV0aG9yaXplZEhhbmRsZXIgfCBudWxsfSBbYXV0aG9yaXplZEhhbmRsZXJdIC0gQSBoYW5kbGVyIHRvIGRldGVybWluZSBhdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxib29sZWFuPn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgYXV0aG9yaXphdGlvbiBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgaXNBdXRob3JpemVkJChhdXRob3JpemVkSGFuZGxlcj86IEF1dGhvcml6ZWRIYW5kbGVyIHwgbnVsbCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCQucGlwZShtYXAoKCkgPT4gdGhpcy5pc0F1dGhvcml6ZWQoYXV0aG9yaXplZEhhbmRsZXIpKSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYW4gSFRUUCByZXF1ZXN0IGJ5IGFkZGluZyB0aGUgYWNjZXNzIHRva2VuIHRvIGl0cyBoZWFkZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0h0dHBSZXF1ZXN0PFQ+IHwgUmVxdWVzdH0gcmVxIC0gVGhlIEhUVFAgcmVxdWVzdCB0byBwcmVwYXJlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcXVpcmVTaWduSW4gLSBXaGV0aGVyIHRvIHJlcXVpcmUgdGhlIHVzZXIgdG8gc2lnbiBpbiBpZiBubyB0b2tlbiBpcyBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFI+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBwcmVwYXJlZCByZXF1ZXN0LlxuICAgKiBAdGVtcGxhdGUgUiwgVFxuICAgKi9cbiAgcHVibGljIHByZXBhcmVBdXRoUmVxdWVzdCQ8UiBleHRlbmRzIEh0dHBSZXF1ZXN0PFQ+IHwgUmVxdWVzdCwgVD4ocmVxOiBSLCByZXF1aXJlU2lnbkluID0gZmFsc2UpOiBPYnNlcnZhYmxlPFI+IHtcbiAgICByZXR1cm4gdGhpcy53YWl0Rm9yQWNjZXNzVG9rZW4kKHJlcXVpcmVTaWduSW4pLnBpcGUobWFwKCh0b2tlbikgPT4gc2V0SHR0cEF1dGhIZWFkZXIocmVxLCB0b2tlbikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0cyBmb3IgYSB2YWxpZCBhY2Nlc3MgdG9rZW4gdG8gYmVjb21lIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSByZXF1aXJlU2lnbkluIC0gV2hldGhlciB0byByZXF1aXJlIHRoZSB1c2VyIHRvIHNpZ24gaW4gaWYgbm8gdG9rZW4gaXMgYXZhaWxhYmxlLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgYWNjZXNzIHRva2VuLlxuICAgKi9cbiAgcHVibGljIHdhaXRGb3JBY2Nlc3NUb2tlbiQocmVxdWlyZVNpZ25JbjogYm9vbGVhbik6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuJCA9IG9mKHRoaXMuZ2V0QWNjZXNzVG9rZW4oKSkucGlwZShmaWx0ZXIoKHRva2VuKSA9PiAhIXRva2VuICYmIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkpKTtcbiAgICBjb25zdCB3YWl0Rm9yQWNjZXNzVG9rZW4kID0gdGhpcy5vblRva2VuUmVjZWl2ZWQkLnBpcGUoXG4gICAgICB0aW1lb3V0KHRoaXMuYXV0aENvbmZpZy53YWl0Rm9yVG9rZW5Jbk1zID8/IDApLFxuICAgICAgY2F0Y2hFcnJvcihhc3luYyAoKSA9PiB0aGlzLnRyeVJlZnJlc2hUb2tlbigpLmNhdGNoKCgpID0+IG51bGwpKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBtZXJnZShhY2Nlc3NUb2tlbiQsIHdhaXRGb3JBY2Nlc3NUb2tlbiQpKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5nZXRBY2Nlc3NUb2tlbigpKSxcbiAgICAgIHRhcCgodG9rZW4pID0+ICF0b2tlbiAmJiByZXF1aXJlU2lnbkluICYmIHRoaXMuc2lnbkluKHRoaXMud2luZG93UmVmLmxvY2F0aW9uLnBhdGhuYW1lKSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcm91dGVUb1JlcXVlc3RlZFVybCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMub2F1dGhTZXJ2aWNlLnN0YXRlIHx8ICF0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLm9hdXRoU2VydmljZS5zdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNWYWxpZE9mZmxpbmVUb2tlbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc3N1ZWRBdCA9IHRoaXMuZ2V0SWRlbnRpdHlDbGFpbXMoKT8uaWF0ID8/IDA7XG5cbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIGlzc3VlZEF0ICogMTAwMCA8PSB0aGlzLmF1dGhDb25maWcubWF4T2ZmbGluZVRpbWUgKiAxMDAwO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdFRvTG9naW4odXJpOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5hc3NpZ24odXJpKTtcbiAgICB0aGlzLmlzUmVkaXJlY3RpbmckJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0cnlMb2FkVXNlclByb2ZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmF1dGhDb25maWcubG9hZFVzZXJQcm9maWxlIHx8ICF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5vYXV0aFNlcnZpY2UubG9hZFVzZXJQcm9maWxlKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeVJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZ2V0UmVmcmVzaFRva2VuKCkpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oKTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0QXVkaWVuY2UoY2xpZW50SWQ/OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgdG9rZW5DbGllbnRJZCA9IHRoaXMuZ2V0SWRlbnRpdHlDbGFpbXMoKT8uYXVkO1xuICAgIGlmICghY2xpZW50SWQgfHwgIXRva2VuQ2xpZW50SWQgfHwgY2xpZW50SWQgPT09IHRva2VuQ2xpZW50SWQpIHJldHVybjtcbiAgICB0aGlzLnNpZ25PdXQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNpbGVudFJlZnJlc2goZW5hYmxlZDogYm9vbGVhbikge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICB0aGlzLm9hdXRoU2VydmljZS5zZXR1cEF1dG9tYXRpY1NpbGVudFJlZnJlc2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vYXV0aFNlcnZpY2Uuc3RvcEF1dG9tYXRpY1JlZnJlc2goKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBYyxlQUFlLEVBQUUsWUFBWSxFQUFpQixNQUFNLHFCQUFxQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUNMLGVBQWUsRUFFZixVQUFVLEVBQ1YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsRUFDSCxLQUFLLEVBQ0wsRUFBRSxFQUNGLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNILE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFxQixNQUFNLFVBQVUsQ0FBQzs7QUFFaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUEwRnRCOzs7OztPQUtHO0lBQ0gsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVEO1FBbkdpQixlQUFVLEdBQUcsZ0JBQWdCLEVB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RSxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDOytHQTdVVSxXQUFXO21IQUFYLFdBQVcsY0FERSxNQUFNOzs0RkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQXV0aENvbmZpZywgT0F1dGhFcnJvckV2ZW50LCBPQXV0aFNlcnZpY2UsIFRva2VuUmVzcG9uc2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJ2RlZXBtZXJnZS10cyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb21FdmVudCxcbiAgbWFwLFxuICBtZXJnZSxcbiAgb2YsXG4gIHNoYXJlLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbiAgdGltZW91dCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RBdXRoQ29uZmlnIH0gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5pbXBvcnQgeyBzZXRIdHRwQXV0aEhlYWRlciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBBdXRoUGx1Z2luTWFuYWdlciwgQXV0aG9yaXplZEhhbmRsZXIgfSBmcm9tICcuL21vZGVscyc7XG5cbi8qKlxuICogVGhlIGBBdXRoU2VydmljZWAgY2xhc3MgcHJvdmlkZXMgYXV0aGVudGljYXRpb24gZnVuY3Rpb25hbGl0eSBmb3IgYW4gQW5ndWxhciBhcHBsaWNhdGlvbi5cbiAqIEl0IGhhbmRsZXMgT0F1dGgyL09JREMgYXV0aGVudGljYXRpb24sIHRva2VuIG1hbmFnZW1lbnQsIGFuZCB1c2VyIGlkZW50aXR5IGNsYWltcy5cbiAqXG4gKiBLZXkgcmVzcG9uc2liaWxpdGllcyBpbmNsdWRlOlxuICogLSBJbml0aWFsaXppbmcgYXV0aGVudGljYXRpb24gd2l0aCBhIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gKiAtIE1hbmFnaW5nIHRva2VucyAoYWNjZXNzLCByZWZyZXNoLCBhbmQgSUQgdG9rZW5zKS5cbiAqIC0gQ2hlY2tpbmcgYW5kIGVtaXR0aW5nIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uIHN0YXRlcy5cbiAqIC0gSGFuZGxpbmcgdXNlciBsb2dpbiBhbmQgbG9nb3V0IGZsb3dzLlxuICogLSBTdXBwb3J0aW5nIHNpbGVudCByZWZyZXNoIGFuZCBvZmZsaW5lIGF1dGhlbnRpY2F0aW9uIHNjZW5hcmlvcy5cbiAqIC0gSW50ZWdyYXRpbmcgYXV0aGVudGljYXRpb24gcGx1Z2lucyB2aWEgYEF1dGhQbHVnaW5NYW5hZ2VyYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW5qZWN0aW5nIHRoZSBBdXRoU2VydmljZVxuICogY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHt9XG4gKlxuICogLy8gVXNpbmcgdGhlIEF1dGhTZXJ2aWNlIHRvIGluaXRpYWxpemUgYXV0aGVudGljYXRpb25cbiAqIGFzeW5jIG5nT25Jbml0KCkge1xuICogICBjb25zdCBjb25maWc6IEF1dGhDb25maWcgPSB7IGNsaWVudElkOiAneW91ci1jbGllbnQtaWQnLCBkaXNjb3ZlcnlVcmw6ICdodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJyB9O1xuICogICBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLmluaXRpYWxpemUoY29uZmlnKTtcbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoQ29uZmlnID0gaW5qZWN0QXV0aENvbmZpZygpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhQbHVnaW5NYW5hZ2VyID0gaW5qZWN0KEF1dGhQbHVnaW5NYW5hZ2VyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvYXV0aFNlcnZpY2UgPSBpbmplY3QoT0F1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dSZWYgPSBpbmplY3QoV2luZG93UmVmKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzUmVkaXJlY3RpbmckJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uQWNjZXNzVG9rZW5VcGRhdGUkID0gZnJvbUV2ZW50PFN0b3JhZ2VFdmVudD4odGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LCAnc3RvcmFnZScpLnBpcGUoXG4gICAgZmlsdGVyKCh7IGtleSB9KSA9PiBrZXkgPT09ICdhY2Nlc3NfdG9rZW4nIHx8IGtleSA9PT0gbnVsbCksXG4gICAgc3RhcnRXaXRoKG51bGwpLFxuICAgIHNoYXJlKCksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2lsZW50UmVmcmVzaEhhbmRsZXIkID0gdGhpcy5pc0luaXRpYWxpemVkJCQucGlwZShcbiAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMud2luZG93UmVmLmlzT25saW5lJCksXG4gICAgdGFwKChpc09ubGluZSkgPT4gdGhpcy51cGRhdGVTaWxlbnRSZWZyZXNoKGlzT25saW5lKSksXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25BdXRoU3RhdGVDaGFuZ2UkID0gY29tYmluZUxhdGVzdChbdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoc3RhcnRXaXRoKG51bGwpKSwgdGhpcy53aW5kb3dSZWYuaXNPbmxpbmUkLCB0aGlzLm9uQWNjZXNzVG9rZW5VcGRhdGUkXSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHRoZSBzZXJ2aWNlIGhhcyBjb21wbGV0ZWQgaW5pdGlhbGl6YXRpb24uXG4gICAqIEVtaXRzIGBmYWxzZWAgdW50aWwgdGhlIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxib29sZWFuPn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAvKipcbiAgICogRW1pdHMgYHRydWVgIHdoZW4gdGhlIHVzZXIgaXMgYmVpbmcgcmVkaXJlY3RlZCB0byB0aGUgbG9naW4gcGFnZS5cbiAgICogRW1pdHMgYGZhbHNlYCB3aGVuIHRoZXJlIGlzIG5vIHJlZGlyZWN0aW9uIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxib29sZWFuPn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc1JlZGlyZWN0aW5nJCA9IHRoaXMuaXNSZWRpcmVjdGluZyQkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbiBhIGxvYWRpbmcgc3RhdGUgKGUuZy4sIGR1cmluZyByZWRpcmVjdGlvbiBvciBwbHVnaW4gaW5pdGlhbGl6YXRpb24pLlxuICAgKiBFbWl0cyBgZmFsc2VgIHdoZW4gdGhlcmUgaXMgbm8gb25nb2luZyBsb2FkaW5nIGFjdGl2aXR5LlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxib29sZWFuPn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0xvYWRpbmckID0gbWVyZ2UodGhpcy5pc1JlZGlyZWN0aW5nJCwgdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5wbHVnaW5zTG9hZGluZyQpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQuXG4gICAqIEVtaXRzIGBmYWxzZWAgd2hlbiB0aGUgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZC5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8Ym9vbGVhbj59XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5wbHVnaW5zUmVhZHkkKSxcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5vbkF1dGhTdGF0ZUNoYW5nZSQpLFxuICAgIG1hcCgoKSA9PiB0aGlzLmlzQXV0aGVudGljYXRlZCgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBpZGVudGl0eSBjbGFpbXMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlci5cbiAgICogSWYgdGhlIHVzZXIgaXMgbm90IGF1dGhlbnRpY2F0ZWQsIGVtaXRzIGBudWxsYC5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8T2R4QXV0aC5JZGVudGl0eUNsYWltcyB8IG51bGw+fVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkZW50aXR5Q2xhaW1zJCA9IHRoaXMuaXNBdXRoZW50aWNhdGVkJC5waXBlKFxuICAgIG1hcCgoKSA9PiB0aGlzLmdldElkZW50aXR5Q2xhaW1zKCkpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIE9BdXRoIGVycm9yIGV2ZW50cy5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8T0F1dGhFcnJvckV2ZW50Pn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnMkID0gdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE9BdXRoRXJyb3JFdmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE9BdXRoRXJyb3JFdmVudCksXG4gICAgc2hhcmUoKSxcbiAgKTtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnRzIHdoZW4gYW4gT0F1dGggdG9rZW4gaXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLlxuICAgKlxuICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxFdmVudD59XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25Ub2tlblJlY2VpdmVkJCA9IHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKFxuICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LnR5cGUgPT09ICd0b2tlbl9yZWNlaXZlZCcpLFxuICAgIHNoYXJlKCksXG4gICk7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZW5ldmVyIHRoZSBgYWNjZXNzX3Rva2VuYCBpbiBsb2NhbCBzdG9yYWdlIGlzIHVwZGF0ZWQgb3IgY2xlYXJlZC5cbiAgICogUHJvdmlkZXMgYW4gb2JzZXJ2YWJsZSBmb3IgdHJhY2tpbmcgdG9rZW4gdXBkYXRlcy5cbiAgICpcbiAgICogQHR5cGUge09ic2VydmFibGU8U3RvcmFnZUV2ZW50IHwgbnVsbD59XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuVXBkYXRlJCgpOiBPYnNlcnZhYmxlPFN0b3JhZ2VFdmVudCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5vbkFjY2Vzc1Rva2VuVXBkYXRlJDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucnVuUGx1Z2lucygpO1xuICAgIHRoaXMuc2lsZW50UmVmcmVzaEhhbmRsZXIkLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXV0aENvbmZpZ30gY29uZmlnIC0gVGhlIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gUmVzb2x2ZXMgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKGNvbmZpZzogQXV0aENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0QXVkaWVuY2UoY29uZmlnLmNsaWVudElkKTtcbiAgICB0aGlzLm9hdXRoU2VydmljZS5jb25maWd1cmUoeyAuLi5jb25maWcsIG9wZW5Vcmk6IHRoaXMucmVkaXJlY3RUb0xvZ2luLmJpbmQodGhpcykgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCh0aGlzLmF1dGhDb25maWcuZGlzY292ZXJ5VXJsKTtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLnRyeUxvZ2luKCk7XG4gICAgICBpZiAodGhpcy5hdXRoQ29uZmlnLnJlZnJlc2hUb2tlbk9uSW5pdCkge1xuICAgICAgICBhd2FpdCB0aGlzLnRyeVJlZnJlc2hUb2tlbigpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlIHx8IGVycm9yIGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGlmIChlcnJvci50eXBlID09PSAndG9rZW5fcmVmcmVzaF9lcnJvcicgfHwgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgKGVycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGVycm9yLnN0YXR1cyA9PT0gNDAwKSkpIHtcbiAgICAgICAgdGhpcy5zaWduT3V0KHRydWUpO1xuICAgICAgICB0aGlzLnNpZ25Jbih0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNJbml0aWFsaXplZCQkLm5leHQodHJ1ZSk7XG4gICAgaWYgKHRoaXMuYXV0aENvbmZpZy5yZXF1aXJlU2lnbkluICYmICF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aGlzLnNpZ25Jbih0aGlzLndpbmRvd1JlZi5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudHJ5TG9hZFVzZXJQcm9maWxlKCk7XG4gICAgYXdhaXQgdGhpcy5yb3V0ZVRvUmVxdWVzdGVkVXJsKCk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbGwgYXV0aGVudGljYXRpb24gcGx1Z2lucyByZWdpc3RlcmVkIGluIHRoZSBgQXV0aFBsdWdpbk1hbmFnZXJgLlxuICAgKi9cbiAgcHVibGljIHJ1blBsdWdpbnMoKTogdm9pZCB7XG4gICAgdGhpcy5hdXRoUGx1Z2luTWFuYWdlci5ydW5QbHVnaW5zKHRoaXMpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGlzc3VlciBVUkwgZm9yIHRoZSBPQXV0aCBzZXJ2ZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtVUkx9IFRoZSBpc3N1ZXIgVVJMLlxuICAgKi9cbiAgcHVibGljIGdldElzc3VlcigpOiBVUkwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgcmV0dXJuIG5ldyBVUkwodGhpcy5vYXV0aFNlcnZpY2UuaXNzdWVyISk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIHRoZSBsb2dpbiBmbG93IGZvciB0aGUgdXNlci4gUmVkaXJlY3RzIHRvIHRoZSBsb2dpbiBwYWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3VybF0gLSBUaGUgVVJMIHRvIHJlZGlyZWN0IGJhY2sgdG8gYWZ0ZXIgbG9naW4uXG4gICAqL1xuICBwdWJsaWMgc2lnbkluKHVybD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3codXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIHRoZSB1c2VyIG91dCBhbmQgY2xlYXJzIHRoZWlyIHRva2Vucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbbm9SZWRpcmVjdF0gLSBJZiBgdHJ1ZWAsIG5vIHJlZGlyZWN0aW9uIG9jY3VycyBhZnRlciBsb2dvdXQuXG4gICAqL1xuICBwdWJsaWMgc2lnbk91dChub1JlZGlyZWN0PzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ091dChub1JlZGlyZWN0IHx8ICF0aGlzLmdldEFjY2Vzc1Rva2VuKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIHJlZnJlc2ggdGhlIHVzZXIncyB0b2tlbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFRva2VuUmVzcG9uc2U+fSBSZXNvbHZlcyB3aXRoIHRoZSBuZXcgdG9rZW4gcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VucygpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGFjY2VzcyB0b2tlbiwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gVGhlIGFjY2VzcyB0b2tlbiwgb3IgYG51bGxgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgcmVmcmVzaCB0b2tlbiwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVsbH0gVGhlIHJlZnJlc2ggdG9rZW4sIG9yIGBudWxsYCBpZiBub3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgSUQgdG9rZW4sIGlmIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9IFRoZSBJRCB0b2tlbiwgb3IgYG51bGxgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0SWRUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBjbGFpbXMgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlci5cbiAgICpcbiAgICogQHJldHVybnMge09keEF1dGguSWRlbnRpdHlDbGFpbXMgfCBudWxsfSBUaGUgaWRlbnRpdHkgY2xhaW1zLCBvciBgbnVsbGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRJZGVudGl0eUNsYWltcygpOiBPZHhBdXRoLklkZW50aXR5Q2xhaW1zIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmdldElkVG9rZW4oKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGRlZXBtZXJnZSh0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpLCB0aGlzLmF1dGhQbHVnaW5NYW5hZ2VyLmdldFJlc3VsdCgpKSBhcyBPZHhBdXRoLklkZW50aXR5Q2xhaW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmF3IGlkZW50aXR5IGNsYWltcyBvZiB0aGUgYXV0aGVudGljYXRlZCB1c2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7T2R4QXV0aC5SYXdJZGVudGl0eUNsYWltcyB8IG51bGx9IFRoZSByYXcgaWRlbnRpdHkgY2xhaW1zLCBvciBgbnVsbGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRSYXdJZGVudGl0eUNsYWltcygpOiBPZHhBdXRoLlJhd0lkZW50aXR5Q2xhaW1zIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmdldElkVG9rZW4oKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldElkZW50aXR5Q2xhaW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBhdXRoZW50aWNhdGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGF1dGhlbnRpY2F0ZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy53aW5kb3dSZWYuaXNPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSAmJiB0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZElkVG9rZW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzVmFsaWRPZmZsaW5lVG9rZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHVzZXIgaXMgYXV0aG9yaXplZCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtBdXRob3JpemVkSGFuZGxlciB8IG51bGx9IFthdXRob3JpemVkSGFuZGxlcl0gLSBBIGhhbmRsZXIgdG8gZGV0ZXJtaW5lIGF1dGhvcml6YXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgYXV0aG9yaXplZCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBwdWJsaWMgaXNBdXRob3JpemVkKGF1dGhvcml6ZWRIYW5kbGVyPzogQXV0aG9yaXplZEhhbmRsZXIgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFuZGxlciA9IGF1dGhvcml6ZWRIYW5kbGVyID8/IHRoaXMuYXV0aENvbmZpZy5kZWZhdWx0QXV0aG9yaXplZEhhbmRsZXI7XG5cbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAoaGFuZGxlcj8uKHRoaXMuZ2V0SWRlbnRpdHlDbGFpbXMoKSwgdGhpcywgdGhpcy5yb3V0ZXIpID8/IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aG9yaXplZCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaGFuZGxlci5cbiAgICpcbiAgICogQHBhcmFtIHtBdXRob3JpemVkSGFuZGxlciB8IG51bGx9IFthdXRob3JpemVkSGFuZGxlcl0gLSBBIGhhbmRsZXIgdG8gZGV0ZXJtaW5lIGF1dGhvcml6YXRpb24uXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPGJvb2xlYW4+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBhdXRob3JpemF0aW9uIHN0YXR1cy5cbiAgICovXG4gIHB1YmxpYyBpc0F1dGhvcml6ZWQkKGF1dGhvcml6ZWRIYW5kbGVyPzogQXV0aG9yaXplZEhhbmRsZXIgfCBudWxsKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkJC5waXBlKG1hcCgoKSA9PiB0aGlzLmlzQXV0aG9yaXplZChhdXRob3JpemVkSGFuZGxlcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhbiBIVFRQIHJlcXVlc3QgYnkgYWRkaW5nIHRoZSBhY2Nlc3MgdG9rZW4gdG8gaXRzIGhlYWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SHR0cFJlcXVlc3Q8VD4gfCBSZXF1ZXN0fSByZXEgLSBUaGUgSFRUUCByZXF1ZXN0IHRvIHByZXBhcmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVxdWlyZVNpZ25JbiAtIFdoZXRoZXIgdG8gcmVxdWlyZSB0aGUgdXNlciB0byBzaWduIGluIGlmIG5vIHRva2VuIGlzIGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8Uj59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHByZXBhcmVkIHJlcXVlc3QuXG4gICAqIEB0ZW1wbGF0ZSBSLCBUXG4gICAqL1xuICBwdWJsaWMgcHJlcGFyZUF1dGhSZXF1ZXN0JDxSIGV4dGVuZHMgSHR0cFJlcXVlc3Q8VD4gfCBSZXF1ZXN0LCBUPihyZXE6IFIsIHJlcXVpcmVTaWduSW4gPSBmYWxzZSk6IE9ic2VydmFibGU8Uj4ge1xuICAgIHJldHVybiB0aGlzLndhaXRGb3JBY2Nlc3NUb2tlbiQocmVxdWlyZVNpZ25JbikucGlwZShtYXAoKHRva2VuKSA9PiBzZXRIdHRwQXV0aEhlYWRlcihyZXEsIHRva2VuKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXRzIGZvciBhIHZhbGlkIGFjY2VzcyB0b2tlbiB0byBiZWNvbWUgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcXVpcmVTaWduSW4gLSBXaGV0aGVyIHRvIHJlcXVpcmUgdGhlIHVzZXIgdG8gc2lnbiBpbiBpZiBubyB0b2tlbiBpcyBhdmFpbGFibGUuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgd2FpdEZvckFjY2Vzc1Rva2VuJChyZXF1aXJlU2lnbkluOiBib29sZWFuKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4kID0gb2YodGhpcy5nZXRBY2Nlc3NUb2tlbigpKS5waXBlKGZpbHRlcigodG9rZW4pID0+ICEhdG9rZW4gJiYgdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSkpO1xuICAgIGNvbnN0IHdhaXRGb3JBY2Nlc3NUb2tlbiQgPSB0aGlzLm9uVG9rZW5SZWNlaXZlZCQucGlwZShcbiAgICAgIHRpbWVvdXQodGhpcy5hdXRoQ29uZmlnLndhaXRGb3JUb2tlbkluTXMgPz8gMCksXG4gICAgICBjYXRjaEVycm9yKGFzeW5jICgpID0+IHRoaXMudHJ5UmVmcmVzaFRva2VuKCkuY2F0Y2goKCkgPT4gbnVsbCkpLFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5pc0luaXRpYWxpemVkJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IG1lcmdlKGFjY2Vzc1Rva2VuJCwgd2FpdEZvckFjY2Vzc1Rva2VuJCkpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmdldEFjY2Vzc1Rva2VuKCkpLFxuICAgICAgdGFwKCh0b2tlbikgPT4gIXRva2VuICYmIHJlcXVpcmVTaWduSW4gJiYgdGhpcy5zaWduSW4odGhpcy53aW5kb3dSZWYubG9jYXRpb24ucGF0aG5hbWUpKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByb3V0ZVRvUmVxdWVzdGVkVXJsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5vYXV0aFNlcnZpY2Uuc3RhdGUgfHwgIXRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMub2F1dGhTZXJ2aWNlLnN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhc1ZhbGlkT2ZmbGluZVRva2VuKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzc3VlZEF0ID0gdGhpcy5nZXRJZGVudGl0eUNsYWltcygpPy5pYXQgPz8gMDtcblxuICAgIHJldHVybiBEYXRlLm5vdygpIC0gaXNzdWVkQXQgKiAxMDAwIDw9IHRoaXMuYXV0aENvbmZpZy5tYXhPZmZsaW5lVGltZSAqIDEwMDA7XG4gIH1cblxuICBwcml2YXRlIHJlZGlyZWN0VG9Mb2dpbih1cmk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud2luZG93UmVmLmxvY2F0aW9uLmFzc2lnbih1cmkpO1xuICAgIHRoaXMuaXNSZWRpcmVjdGluZyQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUxvYWRVc2VyUHJvZmlsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuYXV0aENvbmZpZy5sb2FkVXNlclByb2ZpbGUgfHwgIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkpIHJldHVybjtcbiAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5UmVmcmVzaFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5nZXRSZWZyZXNoVG9rZW4oKSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMub2F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnRBdWRpZW5jZShjbGllbnRJZD86IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCB0b2tlbkNsaWVudElkID0gdGhpcy5nZXRJZGVudGl0eUNsYWltcygpPy5hdWQ7XG4gICAgaWYgKCFjbGllbnRJZCB8fCAhdG9rZW5DbGllbnRJZCB8fCBjbGllbnRJZCA9PT0gdG9rZW5DbGllbnRJZCkgcmV0dXJuO1xuICAgIHRoaXMuc2lnbk91dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2lsZW50UmVmcmVzaChlbmFibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9hdXRoU2VydmljZS5zdG9wQXV0b21hdGljUmVmcmVzaCgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC50eXBpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC50eXBpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIG5hbWVzcGFjZSBPZHhBdXRoIHtcbiAgICB0eXBlIFJhd0lkZW50aXR5Q2xhaW1zID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBpbnRlcmZhY2UgQXV0aFBsdWdpblJlc3VsdCB7XG4gICAgICBpbnN0aXR1dGlvbk5hbWU/OiBzdHJpbmc7XG4gICAgICBwcmVmZXJyZWRMYW5ndWFnZT86IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSWRlbnRpeUNsYWltcyBleHRlbmRzIEF1dGhQbHVnaW5SZXN1bHQge1xuICAgICAgc3ViOiBzdHJpbmc7XG4gICAgICBva3RhaWQ6IHN0cmluZztcbiAgICAgIGlhdDogbnVtYmVyO1xuICAgICAgYXVkOiBzdHJpbmc7XG5cbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgICAgbGFzdG5hbWU6IHN0cmluZztcbiAgICAgIGRpc3BsYXluYW1lOiBzdHJpbmc7XG4gICAgICBwcmVmZXJyZWRfdXNlcm5hbWU6IHN0cmluZztcbiAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICBpbml0aWFsczogc3RyaW5nO1xuXG4gICAgICBsb2NhbGU/OiBzdHJpbmc7XG4gICAgICB6b25laW5mbz86IHN0cmluZztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHt9O1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC50eXBpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC50eXBpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIG5hbWVzcGFjZSBPZHhBdXRoIHtcbiAgICB0eXBlIFJhd0lkZW50aXR5Q2xhaW1zID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBpbnRlcmZhY2UgQXV0aFBsdWdpblJlc3VsdCB7XG4gICAgICBpbnN0aXR1dGlvbk5hbWU/OiBzdHJpbmc7XG4gICAgICBwcmVmZXJyZWRMYW5ndWFnZT86IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSWRlbnRpdHlDbGFpbXMgZXh0ZW5kcyBBdXRoUGx1Z2luUmVzdWx0IHtcbiAgICAgIHN1Yjogc3RyaW5nO1xuICAgICAgb2t0YWlkOiBzdHJpbmc7XG4gICAgICBpYXQ6IG51bWJlcjtcbiAgICAgIGF1ZDogc3RyaW5nO1xuXG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBmaXJzdG5hbWU6IHN0cmluZztcbiAgICAgIGxhc3RuYW1lOiBzdHJpbmc7XG4gICAgICBkaXNwbGF5bmFtZTogc3RyaW5nO1xuICAgICAgcHJlZmVycmVkX3VzZXJuYW1lOiBzdHJpbmc7XG4gICAgICBlbWFpbDogc3RyaW5nO1xuICAgICAgaW5pdGlhbHM6IHN0cmluZztcblxuICAgICAgbG9jYWxlPzogc3RyaW5nO1xuICAgICAgem9uZWluZm8/OiBzdHJpbmc7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7fTtcbiJdfQ==
@@ -18,22 +18,22 @@ let AuthActionsComponent = class AuthActionsComponent {
18
18
  /**
19
19
  * The identity claims.
20
20
  *
21
- * @type {OdxAuth.IdentiyClaims | null}
21
+ * @type {OdxAuth.IdentityClaims | null}
22
22
  * @default null
23
23
  */
24
24
  this.claims = null;
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AuthActionsComponent, isStandalone: true, selector: "odx-auth-actions", inputs: { claims: "claims" }, ngImport: i0, template: "<odx-list>\n @if (claims?.userProfileUrl; as url) {\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix />\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix />\n </a>\n }\n</odx-list>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i2.ListComponent, selector: "odx-list" }, { kind: "component", type: i2.ListItemComponent, selector: "odx-list-item, [odxListItem]", inputs: ["danger", "variant", "muted", "selected"] }, { kind: "component", type: i3.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AuthActionsComponent, isStandalone: true, selector: "odx-auth-actions", inputs: { claims: "claims" }, ngImport: i0, template: "<odx-list>\n @if (claims?.userProfileUrl; as url) {\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix />\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix />\n </a>\n }\n</odx-list>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ListModule }, { kind: "component", type: i2.ListComponent, selector: "odx-list" }, { kind: "component", type: i2.ListItemComponent, selector: "odx-list-item, [odxListItem]", inputs: ["danger", "variant", "muted", "selected"] }, { kind: "component", type: i3.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "pipe", type: TranslatePipe, name: "odxTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
28
28
  };
29
29
  AuthActionsComponent = __decorate([
30
30
  CSSComponent('auth-actions')
31
31
  ], AuthActionsComponent);
32
32
  export { AuthActionsComponent };
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthActionsComponent, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthActionsComponent, decorators: [{
34
34
  type: Component,
35
35
  args: [{ standalone: true, selector: 'odx-auth-actions', imports: [CoreModule, ListModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-list>\n @if (claims?.userProfileUrl; as url) {\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix />\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix />\n </a>\n }\n</odx-list>\n" }]
36
36
  }], propDecorators: { claims: [{
37
37
  type: Input
38
38
  }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1hY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvYXV0aC1hY3Rpb25zL2F1dGgtYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtYWN0aW9ucy9hdXRoLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUVuRDs7R0FFRztBQVVJLElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBQTFCO1FBQ1csWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBRTFDOzs7OztXQUtHO1FBRUksV0FBTSxHQUFpQyxJQUFJLENBQUM7S0FDcEQ7K0dBWFksb0JBQW9CO21HQUFwQixvQkFBb0IsMEdDbkJqQyw2YUFTQSwyQ0RLWSxVQUFVLG1GQUFFLFVBQVUsa1hBQUUsYUFBYTs7QUFLcEMsb0JBQW9CO0lBVGhDLFlBQVksQ0FBQyxjQUFjLENBQUM7R0FTaEIsb0JBQW9CLENBV2hDOzs0RkFYWSxvQkFBb0I7a0JBUmhDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGtCQUFrQixXQUNuQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLG1CQUUvQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzhCQVk5QixNQUFNO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xpc3QnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuXG4vKipcbiAqIERpc3BsYXlzIGF1dGhlbnRpY2F0aW9uIGFjdGlvbnMuXG4gKi9cbkBDU1NDb21wb25lbnQoJ2F1dGgtYWN0aW9ucycpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtYXV0aC1hY3Rpb25zJyxcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIExpc3RNb2R1bGUsIFRyYW5zbGF0ZVBpcGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhBY3Rpb25zQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGl0eSBjbGFpbXMuXG4gICAqXG4gICAqIEB0eXBlIHtPZHhBdXRoLklkZW50aXlDbGFpbXMgfCBudWxsfVxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgY2xhaW1zOiBPZHhBdXRoLklkZW50aXlDbGFpbXMgfCBudWxsID0gbnVsbDtcbn1cbiIsIjxvZHgtbGlzdD5cbiAgQGlmIChjbGFpbXM/LnVzZXJQcm9maWxlVXJsOyBhcyB1cmwpIHtcbiAgICA8YSBkYXRhLXRlc3RpZD1cIm9keC1hdXRoLXVzZXItcHJvZmlsZS1saW5rXCIgb2R4TGlzdEl0ZW0gW2hyZWZdPVwidXJsXCIgcmVsPVwibm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgIDxvZHgtaWNvbiBuYW1lPVwidXNlci1hZG1pbmlzdHJhdGlvblwiIGljb25TZXQ9XCJjb3JlXCIgb2R4TGlzdEl0ZW1QcmVmaXggLz5cbiAgICAgIHt7ICd1c2VyUHJvZmlsZUxpbmsnIHwgb2R4VHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDxvZHgtaWNvbiBuYW1lPVwibGluay1leHRlcm5hbFwiIGljb25TZXQ9XCJjb3JlXCIgc2l6ZT1cInNtYWxsXCIgb2R4TGlzdEl0ZW1TdWZmaXggLz5cbiAgICA8L2E+XG4gIH1cbjwvb2R4LWxpc3Q+XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1hY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvYXV0aC1hY3Rpb25zL2F1dGgtYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtYWN0aW9ucy9hdXRoLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUVuRDs7R0FFRztBQVVJLElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBQTFCO1FBQ1csWUFBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBRTFDOzs7OztXQUtHO1FBRUksV0FBTSxHQUFrQyxJQUFJLENBQUM7S0FDckQ7K0dBWFksb0JBQW9CO21HQUFwQixvQkFBb0IsMEdDbkJqQyw2YUFTQSwyQ0RLWSxVQUFVLG1GQUFFLFVBQVUsa1hBQUUsYUFBYTs7QUFLcEMsb0JBQW9CO0lBVGhDLFlBQVksQ0FBQyxjQUFjLENBQUM7R0FTaEIsb0JBQW9CLENBV2hDOzs0RkFYWSxvQkFBb0I7a0JBUmhDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGtCQUFrQixXQUNuQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLG1CQUUvQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzhCQVk5QixNQUFNO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgTGlzdE1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xpc3QnO1xuaW1wb3J0IHsgQ1NTQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuXG4vKipcbiAqIERpc3BsYXlzIGF1dGhlbnRpY2F0aW9uIGFjdGlvbnMuXG4gKi9cbkBDU1NDb21wb25lbnQoJ2F1dGgtYWN0aW9ucycpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtYXV0aC1hY3Rpb25zJyxcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIExpc3RNb2R1bGUsIFRyYW5zbGF0ZVBpcGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhBY3Rpb25zQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGl0eSBjbGFpbXMuXG4gICAqXG4gICAqIEB0eXBlIHtPZHhBdXRoLklkZW50aXR5Q2xhaW1zIHwgbnVsbH1cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGNsYWltczogT2R4QXV0aC5JZGVudGl0eUNsYWltcyB8IG51bGwgPSBudWxsO1xufVxuIiwiPG9keC1saXN0PlxuICBAaWYgKGNsYWltcz8udXNlclByb2ZpbGVVcmw7IGFzIHVybCkge1xuICAgIDxhIGRhdGEtdGVzdGlkPVwib2R4LWF1dGgtdXNlci1wcm9maWxlLWxpbmtcIiBvZHhMaXN0SXRlbSBbaHJlZl09XCJ1cmxcIiByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgPG9keC1pY29uIG5hbWU9XCJ1c2VyLWFkbWluaXN0cmF0aW9uXCIgaWNvblNldD1cImNvcmVcIiBvZHhMaXN0SXRlbVByZWZpeCAvPlxuICAgICAge3sgJ3VzZXJQcm9maWxlTGluaycgfCBvZHhUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgPG9keC1pY29uIG5hbWU9XCJsaW5rLWV4dGVybmFsXCIgaWNvblNldD1cImNvcmVcIiBzaXplPVwic21hbGxcIiBvZHhMaXN0SXRlbVN1ZmZpeCAvPlxuICAgIDwvYT5cbiAgfVxuPC9vZHgtbGlzdD5cbiJdfQ==
@@ -41,10 +41,10 @@ export class AuthLoadingScreenComponent {
41
41
  }
42
42
  });
43
43
  }
44
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthLoadingScreenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AuthLoadingScreenComponent, isStandalone: true, selector: "div.odx-auth-loading-screen", host: { properties: { "@hostAnimation": "true" } }, ngImport: i0, template: "<div class=\"odx-auth-loading-screen__content\" odxLayout=\"grid 12 horizontal-center vertical-center gap-small\">\n <odx-logo size=\"large\" />\n <odx-circular-progress class=\"odx-auth-loading-screen__spinner\" value=\"-1\" size=\"medium\" stroke=\"3\">\n <odx-icon [name]=\"icon$ | async\" iconSet=\"core\" />\n </odx-circular-progress>\n @if (authConfig.loadingScreenMessage; as content) {\n <p class=\"odx-auth-loading-screen__message\">\n <ng-template [odxDynamicView]=\"content\" />\n </p>\n }\n</div>\n", styles: ["@keyframes odx-auth-loading-screen-animation{0%{opacity:0;transform:translate(-50%,-50%) scale(.9)}to{opacity:1;transform:translate(-50%,-50%)}}.odx-auth-loading-screen{--odx-c-highlight: var(--odx-c-primary);background-color:var(--odx-c-background-content);inset:0;position:fixed;z-index:var(--odx-v-layer-6)}.odx-auth-loading-screen__content{animation:odx-auth-loading-screen-animation .75s ease;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.odx-auth-loading-screen__message{text-align:center}.odx-auth-loading-screen__spinner{position:relative}.odx-auth-loading-screen__spinner .odx-icon{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "component", type: CircularProgressComponent, selector: "odx-circular-progress", inputs: ["stroke", "size", "value"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }], animations: [trigger('hostAnimation', [transition(':leave', useAnimation(fadeOut()))])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthLoadingScreenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AuthLoadingScreenComponent, isStandalone: true, selector: "div.odx-auth-loading-screen", host: { properties: { "@hostAnimation": "true" } }, ngImport: i0, template: "<div class=\"odx-auth-loading-screen__content\" odxLayout=\"grid 12 horizontal-center vertical-center gap-small\">\n <odx-logo size=\"large\" />\n <odx-circular-progress class=\"odx-auth-loading-screen__spinner\" value=\"-1\" size=\"medium\" stroke=\"3\">\n <odx-icon [name]=\"icon$ | async\" iconSet=\"core\" />\n </odx-circular-progress>\n @if (authConfig.loadingScreenMessage; as content) {\n <p class=\"odx-auth-loading-screen__message\">\n <ng-template [odxDynamicView]=\"content\" />\n </p>\n }\n</div>\n", styles: ["@keyframes odx-auth-loading-screen-animation{0%{opacity:0;transform:translate(-50%,-50%) scale(.9)}to{opacity:1;transform:translate(-50%,-50%)}}.odx-auth-loading-screen{--odx-c-highlight: var(--odx-c-primary);background-color:var(--odx-c-background-content);inset:0;position:fixed;z-index:var(--odx-v-layer-6)}.odx-auth-loading-screen__content{animation:odx-auth-loading-screen-animation .75s ease;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.odx-auth-loading-screen__message{text-align:center}.odx-auth-loading-screen__spinner{position:relative}.odx-auth-loading-screen__spinner .odx-icon{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "directive", type: LogoDirective, selector: "odx-logo", inputs: ["size", "variant"] }, { kind: "component", type: CircularProgressComponent, selector: "odx-circular-progress", inputs: ["stroke", "size", "value"] }, { kind: "directive", type: DynamicViewDirective, selector: "ng-template[odxDynamicView]", inputs: ["odxDynamicView", "odxDynamicViewInjector", "odxDynamicViewContext"] }], animations: [trigger('hostAnimation', [transition(':leave', useAnimation(fadeOut()))])], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
46
46
  }
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthLoadingScreenComponent, decorators: [{
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthLoadingScreenComponent, decorators: [{
48
48
  type: Component,
49
49
  args: [{ standalone: true, selector: 'div.odx-auth-loading-screen', imports: [CommonModule, IconComponent, LogoDirective, CircularProgressComponent, DynamicViewDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
50
50
  '[@hostAnimation]': 'true',
@@ -21,10 +21,10 @@ export class AuthActionDirective {
21
21
  this.loadingSpinnerDirective.isLoading = isRedirecting;
22
22
  });
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: AuthActionDirective, ngImport: i0 }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthActionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: AuthActionDirective, ngImport: i0 }); }
26
26
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthActionDirective, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthActionDirective, decorators: [{
28
28
  type: Directive
29
29
  }] });
30
30
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1hY3Rpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvZGlyZWN0aXZlcy9hdXRoLWFjdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRTlDOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFnQixtQkFBbUI7SUFEekM7UUFFbUIsdUJBQWtCLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDdEMsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FVdEQ7SUFSUSxlQUFlO1FBQ3BCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQzFGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FWbUIsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRHhDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9hZGluZ1NwaW5uZXJEaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9sb2FkaW5nLXNwaW5uZXInO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuXG4vKipcbiAqIEFuIGFic3RyYWN0IGRpcmVjdGl2ZSB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgYExvYWRpbmdTcGlubmVyRGlyZWN0aXZlYCBhbmQgYEF1dGhTZXJ2aWNlYCB0byBtYW5hZ2UgbG9hZGluZyBzdGF0ZXMgYmFzZWQgb24gYXV0aGVudGljYXRpb24gcmVkaXJlY3Rpb24uXG4gKlxuICogVGhpcyBkaXJlY3RpdmUgYXV0b21hdGljYWxseSBzZXRzIHRoZSBgYXV0b0NvbG9yYCBwcm9wZXJ0eSBvZiB0aGUgYExvYWRpbmdTcGlubmVyRGlyZWN0aXZlYCB0byBgdHJ1ZWAgYW5kIHN1YnNjcmliZXMgdG8gdGhlIGBpc1JlZGlyZWN0aW5nJGAgb2JzZXJ2YWJsZSBmcm9tIHRoZSBgQXV0aFNlcnZpY2VgLlxuICogV2hlbiBgaXNSZWRpcmVjdGluZyRgIGVtaXRzIGEgdmFsdWUsIGl0IHVwZGF0ZXMgdGhlIGBpc0xvYWRpbmdgIHByb3BlcnR5IG9mIHRoZSBgTG9hZGluZ1NwaW5uZXJEaXJlY3RpdmVgLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdXRoQWN0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU3Bpbm5lckRpcmVjdGl2ZSA9IGluamVjdChMb2FkaW5nU3Bpbm5lckRpcmVjdGl2ZSwgeyBzZWxmOiB0cnVlIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nU3Bpbm5lckRpcmVjdGl2ZS5hdXRvQ29sb3IgPSB0cnVlO1xuICAgIHRoaXMuYXV0aFNlcnZpY2UuaXNSZWRpcmVjdGluZyQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKGlzUmVkaXJlY3RpbmcpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZ1NwaW5uZXJEaXJlY3RpdmUuaXNMb2FkaW5nID0gaXNSZWRpcmVjdGluZztcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBoYW5kbGVDbGljaygpOiB2b2lkO1xufVxuIl19
@@ -32,10 +32,10 @@ export class SignInDirective extends AuthActionDirective {
32
32
  this.authService.signIn();
33
33
  this.afterSignIn.next();
34
34
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SignInDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
36
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: SignInDirective, isStandalone: true, selector: "[odxButton][odxAuthSignIn]", outputs: { afterSignIn: "odxAuthSignIn" }, host: { listeners: { "click": "handleClick()" } }, usesInheritance: true, hostDirectives: [{ directive: i1.LoadingSpinnerDirective }], ngImport: i0 }); }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
36
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: SignInDirective, isStandalone: true, selector: "[odxButton][odxAuthSignIn]", outputs: { afterSignIn: "odxAuthSignIn" }, host: { listeners: { "click": "handleClick()" } }, usesInheritance: true, hostDirectives: [{ directive: i1.LoadingSpinnerDirective }], ngImport: i0 }); }
37
37
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SignInDirective, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInDirective, decorators: [{
39
39
  type: Directive,
40
40
  args: [{
41
41
  standalone: true,
@@ -32,10 +32,10 @@ export class SignOutDirective extends AuthActionDirective {
32
32
  this.authService.signOut();
33
33
  this.afterSignOut.next();
34
34
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SignOutDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
36
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: SignOutDirective, isStandalone: true, selector: "[odxButton][odxAuthSignOut]", outputs: { afterSignOut: "odxAuthSignOut" }, host: { listeners: { "click": "handleClick()" } }, usesInheritance: true, hostDirectives: [{ directive: i1.LoadingSpinnerDirective }], ngImport: i0 }); }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignOutDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
36
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: SignOutDirective, isStandalone: true, selector: "[odxButton][odxAuthSignOut]", outputs: { afterSignOut: "odxAuthSignOut" }, host: { listeners: { "click": "handleClick()" } }, usesInheritance: true, hostDirectives: [{ directive: i1.LoadingSpinnerDirective }], ngImport: i0 }); }
37
37
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SignOutDirective, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignOutDirective, decorators: [{
39
39
  type: Directive,
40
40
  args: [{
41
41
  standalone: true,
@@ -14,4 +14,4 @@ export function userLanguageLoader(languageSelector = (claims) => claims?.prefer
14
14
  return inject(AuthService).identityClaims$.pipe(map(languageSelector), map((value) => (isNonEmptyString(value) ? value : undefined)));
15
15
  };
16
16
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1sYW5ndWFnZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9oZWxwZXJzL3VzZXItbGFuZ3VhZ2UtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLG1CQUFxQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQjtJQUMzRyxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNyQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhbmd1YWdlTG9hZGVyRm4gfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7IGlzTm9uRW1wdHlTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5cbnR5cGUgTGFuZ3VhZ2VTZWxlY3RvciA9IChjbGFpbXM/OiBPZHhBdXRoLklkZW50aXlDbGFpbXMgfCBudWxsKSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbGFuZ3VhZ2UgbG9hZGVyIGZ1bmN0aW9uIGZvciB1c2VyIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZWxlY3Rvcn0gbGFuZ3VhZ2VTZWxlY3RvciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBvcHRpb25hbCBpZGVudGl0eSBjbGFpbXMgYW5kIHJldHVybnMgYSBsYW5ndWFnZSBzdHJpbmcsIG51bGwsIG9yIHVuZGVmaW5lZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHByZWZlcnJlZCBsYW5ndWFnZSBmcm9tIHRoZSBjbGFpbXMuXG4gKiBAcmV0dXJucyB7TGFuZ3VhZ2VMb2FkZXJGbn0gLSBBIGZ1bmN0aW9uIHRoYXQgcmV0cmlldmVzIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlIGZyb20gdGhlIGlkZW50aXR5IGNsYWltcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJMYW5ndWFnZUxvYWRlcihsYW5ndWFnZVNlbGVjdG9yOiBMYW5ndWFnZVNlbGVjdG9yID0gKGNsYWltcykgPT4gY2xhaW1zPy5wcmVmZXJyZWRMYW5ndWFnZSk6IExhbmd1YWdlTG9hZGVyRm4ge1xuICByZXR1cm4gKCkgPT4ge1xuICAgIHJldHVybiBpbmplY3QoQXV0aFNlcnZpY2UpLmlkZW50aXR5Q2xhaW1zJC5waXBlKFxuICAgICAgbWFwKGxhbmd1YWdlU2VsZWN0b3IpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKGlzTm9uRW1wdHlTdHJpbmcodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpKSxcbiAgICApO1xuICB9O1xufVxuIl19
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1sYW5ndWFnZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9oZWxwZXJzL3VzZXItbGFuZ3VhZ2UtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLG1CQUFxQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQjtJQUMzRyxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNyQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhbmd1YWdlTG9hZGVyRm4gfSBmcm9tICdAb2R4L2FuZ3VsYXIvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7IGlzTm9uRW1wdHlTdHJpbmcgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5cbnR5cGUgTGFuZ3VhZ2VTZWxlY3RvciA9IChjbGFpbXM/OiBPZHhBdXRoLklkZW50aXR5Q2xhaW1zIHwgbnVsbCkgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGxhbmd1YWdlIGxvYWRlciBmdW5jdGlvbiBmb3IgdXNlciBhdXRoZW50aWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0xhbmd1YWdlU2VsZWN0b3J9IGxhbmd1YWdlU2VsZWN0b3IgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgb3B0aW9uYWwgaWRlbnRpdHkgY2xhaW1zIGFuZCByZXR1cm5zIGEgbGFuZ3VhZ2Ugc3RyaW5nLCBudWxsLCBvciB1bmRlZmluZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBwcmVmZXJyZWQgbGFuZ3VhZ2UgZnJvbSB0aGUgY2xhaW1zLlxuICogQHJldHVybnMge0xhbmd1YWdlTG9hZGVyRm59IC0gQSBmdW5jdGlvbiB0aGF0IHJldHJpZXZlcyB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZSBmcm9tIHRoZSBpZGVudGl0eSBjbGFpbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VyTGFuZ3VhZ2VMb2FkZXIobGFuZ3VhZ2VTZWxlY3RvcjogTGFuZ3VhZ2VTZWxlY3RvciA9IChjbGFpbXMpID0+IGNsYWltcz8ucHJlZmVycmVkTGFuZ3VhZ2UpOiBMYW5ndWFnZUxvYWRlckZuIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICByZXR1cm4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5pZGVudGl0eUNsYWltcyQucGlwZShcbiAgICAgIG1hcChsYW5ndWFnZVNlbGVjdG9yKSxcbiAgICAgIG1hcCgodmFsdWUpID0+IChpc05vbkVtcHR5U3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKSksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
@@ -39,10 +39,10 @@ export class AuthPluginManager {
39
39
  runPlugin(authService, plugin) {
40
40
  return plugin(authService).pipe(isNumber(this.authConfig.pluginTimeout) ? timeout(Math.max(0, this.authConfig.pluginTimeout)) : tap(), catchError((error) => this.handlePluginError(error)));
41
41
  }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthPluginManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
43
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthPluginManager, providedIn: 'root' }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthPluginManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
43
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthPluginManager, providedIn: 'root' }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthPluginManager, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthPluginManager, decorators: [{
46
46
  type: Injectable,
47
47
  args: [{ providedIn: 'root' }]
48
48
  }] });
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplZC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvbW9kZWxzL2F1dGhvcml6ZWQtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgQXV0aG9yaXplZEhhbmRsZXIgPSAoaWRlbnRpdHlDbGFpbXM6IE9keEF1dGguSWRlbnRpeUNsYWltcyB8IG51bGwsIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcm91dGVyPzogUm91dGVyIHwgbnVsbCkgPT4gYm9vbGVhbjtcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplZC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvbW9kZWxzL2F1dGhvcml6ZWQtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgQXV0aG9yaXplZEhhbmRsZXIgPSAoaWRlbnRpdHlDbGFpbXM6IE9keEF1dGguSWRlbnRpdHlDbGFpbXMgfCBudWxsLCBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHJvdXRlcj86IFJvdXRlciB8IG51bGwpID0+IGJvb2xlYW47XG4iXX0=
@@ -22,10 +22,10 @@ export class ServiceConnectRightsDirective {
22
22
  set rolesOrRights(value) {
23
23
  this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);
24
24
  }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ServiceConnectRightsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
26
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ServiceConnectRightsDirective, isStandalone: true, selector: "ng-template[odxAuthServiceConnectRights]", inputs: { rolesOrRights: ["odxAuthServiceConnectRights", "rolesOrRights"] }, hostDirectives: [{ directive: i1.AuthDirective, inputs: ["odxAuthElse", "odxAuthServiceConnectRightsElse"] }], ngImport: i0 }); }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceConnectRightsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
26
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ServiceConnectRightsDirective, isStandalone: true, selector: "ng-template[odxAuthServiceConnectRights]", inputs: { rolesOrRights: ["odxAuthServiceConnectRights", "rolesOrRights"] }, hostDirectives: [{ directive: i1.AuthDirective, inputs: ["odxAuthElse", "odxAuthServiceConnectRightsElse"] }], ngImport: i0 }); }
27
27
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ServiceConnectRightsDirective, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceConnectRightsDirective, decorators: [{
29
29
  type: Directive,
30
30
  args: [{
31
31
  standalone: true,
@@ -96,10 +96,10 @@ class ServiceConnectRightsDirective {
96
96
  set rolesOrRights(value) {
97
97
  this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);
98
98
  }
99
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ServiceConnectRightsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
100
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ServiceConnectRightsDirective, isStandalone: true, selector: "ng-template[odxAuthServiceConnectRights]", inputs: { rolesOrRights: ["odxAuthServiceConnectRights", "rolesOrRights"] }, hostDirectives: [{ directive: i1.AuthDirective, inputs: ["odxAuthElse", "odxAuthServiceConnectRightsElse"] }], ngImport: i0 }); }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceConnectRightsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
100
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ServiceConnectRightsDirective, isStandalone: true, selector: "ng-template[odxAuthServiceConnectRights]", inputs: { rolesOrRights: ["odxAuthServiceConnectRights", "rolesOrRights"] }, hostDirectives: [{ directive: i1.AuthDirective, inputs: ["odxAuthElse", "odxAuthServiceConnectRightsElse"] }], ngImport: i0 }); }
101
101
  }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ServiceConnectRightsDirective, decorators: [{
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServiceConnectRightsDirective, decorators: [{
103
103
  type: Directive,
104
104
  args: [{
105
105
  standalone: true,
@@ -1 +1 @@
1
- {"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../libs/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/service-connect-plugin-factory.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-user-language.plugin.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-user-profile.plugin.ts","../../../../libs/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n [AuthEnvironment.DEV]: 'https://api.test.connect.draeger.com',\n [AuthEnvironment.STAGE]: 'https://api.staging.connect.draeger.com',\n [AuthEnvironment.PROD]: 'https://api.connect.draeger.com',\n};\nexport const ServiceConnectScopes = {\n BASE: 'dcid',\n PROFILE: 'dcid.profile',\n RIGHTS: 'dcid.rights',\n INSTITUTION: 'dcid.institution',\n};\nexport const ServiceConnectEndpoints = {\n user: '/users/me',\n userRights: '/users/me/rights',\n};\n","import { buildUrl, isString } from '@odx/angular/utils';\nimport { AuthEnvironment } from '@odx/auth';\nimport { ServiceConnectEnvironment, ServiceConnnectEnvironments } from '../service-connect.config';\n\n/**\n * Builds a service connect URL based on the provided environment and endpoints.\n *\n * @param {ServiceConnectEnvironment | AuthEnvironment} environment - The environment configuration which can be either a `ServiceConnectEnvironment` or `AuthEnvironment`.\n * @param {string[]} endpoints - A list of endpoint strings to be appended to the base URL.\n * @returns {string} - The constructed service connect URL as a string.\n */\nexport function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string {\n if (isString(environment)) {\n return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);\n }\n return buildUrl(environment.custom, ...endpoints);\n}\n","export type Right = string | number;\nexport type Role = Right[];\nexport type RolesOrRights = Array<Role | Right>;\n\n/**\n * Checks if the user has any of the specified roles or rights.\n *\n * @param {Right[]} userRights - An array of rights that the user possesses.\n * @param {RolesOrRights} rolesOrRights - An array of roles or rights to check against. A role is represented as an array of rights.\n * @returns {boolean} - `true` if the user has any of the specified roles or rights, otherwise `false`.\n */\nexport function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean {\n return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));\n}\n","import { AuthorizedHandler } from '@odx/auth';\nimport { hasRolesOrRights, RolesOrRights } from './has-roles-or-rights';\n\n/**\n * Creates an authorized handler that checks if the user has the specified roles or rights.\n *\n * @param {RolesOrRights} rolesOrRights - The roles or rights to check against the user's claims.\n * @returns {AuthorizedHandler} - An handler function that takes user claims and returns a boolean indicating\n * whether the user has the required roles or rights.\n */\nexport function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler {\n return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);\n}\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { AuthPluginFactory, injectAuthConfig, requireAuthentication } from '@odx/auth';\nimport { defer, map } from 'rxjs';\nimport { ServiceConnectEnvironment } from '../service-connect.config';\nimport { buildServiceConnectUrl } from './build-service-connect-url';\n\nexport interface ServiceConnectPluginOptions {\n environment?: ServiceConnectEnvironment;\n}\n\nexport interface ServiceConnectPluginFactoryOptions<Dto> {\n endpoint: string[];\n parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;\n defaultValue?: Partial<OdxAuth.AuthPluginResult>;\n setup?: (pluginOptions?: ServiceConnectPluginOptions) => void;\n}\n\nexport type ServiceConnectPluginFactory = (pluginOptions?: ServiceConnectPluginOptions) => AuthPluginFactory;\n\n/**\n * Creates a plugin factory for fetching and parsing service connect data.\n *\n * @param {ServiceConnectPluginFactoryOptions<Dto>} options - The options for the service connect plugin factory.\n * @returns {ServiceConnectPluginFactory} - A function that creates an auth plugin factory for fetching and parsing service connect data.\n */\nexport function serviceConnectPluginFactory<Dto = unknown>(options: ServiceConnectPluginFactoryOptions<Dto>): ServiceConnectPluginFactory {\n return (pluginOptions) => () => {\n options.setup?.(pluginOptions);\n const { environment } = injectAuthConfig();\n const httpClient = inject(HttpClient);\n const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);\n const parseResponse = (dto: Dto | null) => options.parseResponse(dto) ?? options.defaultValue ?? {};\n\n return () =>\n defer(() =>\n httpClient.get<Dto>(url, {\n context: new HttpContext().set(requireAuthentication, true),\n }),\n ).pipe(map((dto) => parseResponse(dto)));\n };\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AuthDirective } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n/**\n * A directive that extends the functionality of the `AuthDirective` to handle\n * roles or rights for service connection authorization.\n *\n * @see AuthDirective\n *\n * This directive should be used on an `ng-template` element with the selector\n * `odxAuthServiceConnectRights`.\n */\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuthServiceConnectRights]',\n hostDirectives: [\n {\n directive: AuthDirective,\n inputs: ['odxAuthElse:odxAuthServiceConnectRightsElse'],\n },\n ],\n})\nexport class ServiceConnectRightsDirective {\n private readonly authDirective = inject(AuthDirective, { host: true });\n\n /**\n * Sets the roles or rights that the user must have to display the content.\n */\n @Input('odxAuthServiceConnectRights')\n public set rolesOrRights(value: RolesOrRights | null | undefined) {\n this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);\n }\n}\n","import { CanActivateFn } from '@angular/router';\nimport { authGuard } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n/**\n * A guard function to check if the user has the required roles or rights to access a route.\n *\n * @param {RolesOrRights} rolesOrRights - The roles or rights required to access the route.\n * @param {string | any[]} redirectTo - (Optional) The route to redirect to if the user does not have the required roles or rights.\n * @param {boolean} isExternal - (Optional) A flag indicating if the redirection is to an external URL. Defaults to `false`.\n * @returns {CanActivateFn} - A function that checks the user's roles or rights and handles redirection if necessary.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[], isExternal = false): CanActivateFn {\n return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo, isExternal);\n}\n","import { GetServiceConnectRightsResponseDto } from './dtos';\nimport { Right, serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n rights: Right[];\n }\n }\n}\n\n/**\n * A plugin for fetching and parsing service connect rights.\n *\n * This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches user rights\n * from the specified endpoint and parses the response to extract the rights.\n *\n * @see {serviceConnectPluginFactory}\n */\nexport const serviceConnectRightsPlugin = serviceConnectPluginFactory<GetServiceConnectRightsResponseDto>({\n endpoint: [ServiceConnectEndpoints.userRights],\n parseResponse: (res) => ({ rights: res?.rights ?? [] }),\n defaultValue: { rights: [] },\n});\n","import { getLanguageCode } from '@odx/angular/utils';\nimport { GetServiceConnectUserResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\n\n/**\n * Gets the language code from a service connect user response.\n *\n * @param {GetServiceConnectUserResponseDto | null} res - The service connect user response.\n * @returns {string | undefined} - The language code or undefined.\n */\nexport function getServiceConnectUserLanguage(res?: GetServiceConnectUserResponseDto | null): string | undefined {\n return (res?.preferred_language ?? res?.language_code) ? getLanguageCode(res.preferred_language ?? res.language_code) : undefined;\n}\n\n/**\n * A plugin for fetching and parsing the user's preferred language from service connect.\n *\n * This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches the user's preferred language\n * from the user endpoint and parses the response to extract the preferred language.\n *\n * @see {serviceConnectPluginFactory}\n */\nexport const serviceConnectUserLanguagePlugin = serviceConnectPluginFactory<GetServiceConnectUserResponseDto>({\n endpoint: [ServiceConnectEndpoints.user],\n parseResponse: (res) => ({ preferredLanguage: getServiceConnectUserLanguage(res) }),\n});\n","import { GetServiceConnectUserResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { getServiceConnectUserLanguage } from './service-connect-user-language.plugin';\nimport { ServiceConnectEndpoints } from './service-connect.config';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n country?: string;\n institutionId?: number;\n institutionName?: string;\n institutionShortname?: string;\n }\n }\n}\n\n/**\n * A plugin for fetching and parsing the user's profile from service connect.\n *\n * This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches the user's profile\n * from the user endpoint and parses the response to extract the user's profile information.\n *\n * @see {serviceConnectPluginFactory}\n */\nexport const serviceConnectUserProfilePlugin = serviceConnectPluginFactory<GetServiceConnectUserResponseDto>({\n endpoint: [ServiceConnectEndpoints.user],\n parseResponse: (res) => {\n return {\n country: res?.country,\n institutionId: res?.institution_id,\n institutionName: res?.institution_name,\n institutionShortname: res?.institution_shortname,\n preferredLanguage: getServiceConnectUserLanguage(res),\n };\n },\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odx-auth-plugins-service-connect.mjs","sources":["../../../../libs/auth/plugins/service-connect/src/lib/service-connect.config.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/build-service-connect-url.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/has-roles-or-rights-handler.ts","../../../../libs/auth/plugins/service-connect/src/lib/helpers/service-connect-plugin-factory.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-rights.directive.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-rights.guard.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-rights.plugin.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-user-language.plugin.ts","../../../../libs/auth/plugins/service-connect/src/lib/service-connect-user-profile.plugin.ts","../../../../libs/auth/plugins/service-connect/src/odx-auth-plugins-service-connect.ts"],"sourcesContent":["import { AuthEnvironment } from '@odx/auth';\n\nexport type ServiceConnectEnvironment = { custom: string };\nexport const ServiceConnnectEnvironments: Record<AuthEnvironment, string> = {\n [AuthEnvironment.DEV]: 'https://api.test.connect.draeger.com',\n [AuthEnvironment.STAGE]: 'https://api.staging.connect.draeger.com',\n [AuthEnvironment.PROD]: 'https://api.connect.draeger.com',\n};\nexport const ServiceConnectScopes = {\n BASE: 'dcid',\n PROFILE: 'dcid.profile',\n RIGHTS: 'dcid.rights',\n INSTITUTION: 'dcid.institution',\n};\nexport const ServiceConnectEndpoints = {\n user: '/users/me',\n userRights: '/users/me/rights',\n};\n","import { buildUrl, isString } from '@odx/angular/utils';\nimport { AuthEnvironment } from '@odx/auth';\nimport { ServiceConnectEnvironment, ServiceConnnectEnvironments } from '../service-connect.config';\n\n/**\n * Builds a service connect URL based on the provided environment and endpoints.\n *\n * @param {ServiceConnectEnvironment | AuthEnvironment} environment - The environment configuration which can be either a `ServiceConnectEnvironment` or `AuthEnvironment`.\n * @param {string[]} endpoints - A list of endpoint strings to be appended to the base URL.\n * @returns {string} - The constructed service connect URL as a string.\n */\nexport function buildServiceConnectUrl(environment: ServiceConnectEnvironment | AuthEnvironment, ...endpoints: string[]): string {\n if (isString(environment)) {\n return buildUrl(ServiceConnnectEnvironments[environment], ...endpoints);\n }\n return buildUrl(environment.custom, ...endpoints);\n}\n","export type Right = string | number;\nexport type Role = Right[];\nexport type RolesOrRights = Array<Role | Right>;\n\n/**\n * Checks if the user has any of the specified roles or rights.\n *\n * @param {Right[]} userRights - An array of rights that the user possesses.\n * @param {RolesOrRights} rolesOrRights - An array of roles or rights to check against. A role is represented as an array of rights.\n * @returns {boolean} - `true` if the user has any of the specified roles or rights, otherwise `false`.\n */\nexport function hasRolesOrRights(userRights: Right[], rolesOrRights: RolesOrRights): boolean {\n return rolesOrRights.some((rights) => (Array.isArray(rights) ? rights : [rights])?.every((right) => userRights.includes(right)));\n}\n","import { AuthorizedHandler } from '@odx/auth';\nimport { hasRolesOrRights, RolesOrRights } from './has-roles-or-rights';\n\n/**\n * Creates an authorized handler that checks if the user has the specified roles or rights.\n *\n * @param {RolesOrRights} rolesOrRights - The roles or rights to check against the user's claims.\n * @returns {AuthorizedHandler} - An handler function that takes user claims and returns a boolean indicating\n * whether the user has the required roles or rights.\n */\nexport function hasRolesOrRightsHandler(rolesOrRights: RolesOrRights): AuthorizedHandler {\n return (claims) => hasRolesOrRights(claims?.rights ?? [], rolesOrRights);\n}\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { AuthPluginFactory, injectAuthConfig, requireAuthentication } from '@odx/auth';\nimport { defer, map } from 'rxjs';\nimport { ServiceConnectEnvironment } from '../service-connect.config';\nimport { buildServiceConnectUrl } from './build-service-connect-url';\n\nexport interface ServiceConnectPluginOptions {\n environment?: ServiceConnectEnvironment;\n}\n\nexport interface ServiceConnectPluginFactoryOptions<Dto> {\n endpoint: string[];\n parseResponse: (res: Dto | null) => Partial<OdxAuth.AuthPluginResult>;\n defaultValue?: Partial<OdxAuth.AuthPluginResult>;\n setup?: (pluginOptions?: ServiceConnectPluginOptions) => void;\n}\n\nexport type ServiceConnectPluginFactory = (pluginOptions?: ServiceConnectPluginOptions) => AuthPluginFactory;\n\n/**\n * Creates a plugin factory for fetching and parsing service connect data.\n *\n * @param {ServiceConnectPluginFactoryOptions<Dto>} options - The options for the service connect plugin factory.\n * @returns {ServiceConnectPluginFactory} - A function that creates an auth plugin factory for fetching and parsing service connect data.\n */\nexport function serviceConnectPluginFactory<Dto = unknown>(options: ServiceConnectPluginFactoryOptions<Dto>): ServiceConnectPluginFactory {\n return (pluginOptions) => () => {\n options.setup?.(pluginOptions);\n const { environment } = injectAuthConfig();\n const httpClient = inject(HttpClient);\n const url = buildServiceConnectUrl(pluginOptions?.environment ?? environment, ...options.endpoint);\n const parseResponse = (dto: Dto | null) => options.parseResponse(dto) ?? options.defaultValue ?? {};\n\n return () =>\n defer(() =>\n httpClient.get<Dto>(url, {\n context: new HttpContext().set(requireAuthentication, true),\n }),\n ).pipe(map((dto) => parseResponse(dto)));\n };\n}\n","import { Directive, inject, Input } from '@angular/core';\nimport { AuthDirective } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n/**\n * A directive that extends the functionality of the `AuthDirective` to handle\n * roles or rights for service connection authorization.\n *\n * @see AuthDirective\n *\n * This directive should be used on an `ng-template` element with the selector\n * `odxAuthServiceConnectRights`.\n */\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuthServiceConnectRights]',\n hostDirectives: [\n {\n directive: AuthDirective,\n inputs: ['odxAuthElse:odxAuthServiceConnectRightsElse'],\n },\n ],\n})\nexport class ServiceConnectRightsDirective {\n private readonly authDirective = inject(AuthDirective, { host: true });\n\n /**\n * Sets the roles or rights that the user must have to display the content.\n */\n @Input('odxAuthServiceConnectRights')\n public set rolesOrRights(value: RolesOrRights | null | undefined) {\n this.authDirective.authorizationHandler = hasRolesOrRightsHandler(value ?? []);\n }\n}\n","import { CanActivateFn } from '@angular/router';\nimport { authGuard } from '@odx/auth';\nimport { hasRolesOrRightsHandler, RolesOrRights } from './helpers';\n\n/**\n * A guard function to check if the user has the required roles or rights to access a route.\n *\n * @param {RolesOrRights} rolesOrRights - The roles or rights required to access the route.\n * @param {string | any[]} redirectTo - (Optional) The route to redirect to if the user does not have the required roles or rights.\n * @param {boolean} isExternal - (Optional) A flag indicating if the redirection is to an external URL. Defaults to `false`.\n * @returns {CanActivateFn} - A function that checks the user's roles or rights and handles redirection if necessary.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function serviceConnectRightsGuard(rolesOrRights: RolesOrRights, redirectTo?: string | any[], isExternal = false): CanActivateFn {\n return authGuard(hasRolesOrRightsHandler(rolesOrRights), redirectTo, isExternal);\n}\n","import { GetServiceConnectRightsResponseDto } from './dtos';\nimport { Right, serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n rights: Right[];\n }\n }\n}\n\n/**\n * A plugin for fetching and parsing service connect rights.\n *\n * This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches user rights\n * from the specified endpoint and parses the response to extract the rights.\n *\n * @see {serviceConnectPluginFactory}\n */\nexport const serviceConnectRightsPlugin = serviceConnectPluginFactory<GetServiceConnectRightsResponseDto>({\n endpoint: [ServiceConnectEndpoints.userRights],\n parseResponse: (res) => ({ rights: res?.rights ?? [] }),\n defaultValue: { rights: [] },\n});\n","import { getLanguageCode } from '@odx/angular/utils';\nimport { GetServiceConnectUserResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { ServiceConnectEndpoints } from './service-connect.config';\n\n/**\n * Gets the language code from a service connect user response.\n *\n * @param {GetServiceConnectUserResponseDto | null} res - The service connect user response.\n * @returns {string | undefined} - The language code or undefined.\n */\nexport function getServiceConnectUserLanguage(res?: GetServiceConnectUserResponseDto | null): string | undefined {\n return (res?.preferred_language ?? res?.language_code) ? getLanguageCode(res.preferred_language ?? res.language_code) : undefined;\n}\n\n/**\n * A plugin for fetching and parsing the user's preferred language from service connect.\n *\n * This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches the user's preferred language\n * from the user endpoint and parses the response to extract the preferred language.\n *\n * @see {serviceConnectPluginFactory}\n */\nexport const serviceConnectUserLanguagePlugin = serviceConnectPluginFactory<GetServiceConnectUserResponseDto>({\n endpoint: [ServiceConnectEndpoints.user],\n parseResponse: (res) => ({ preferredLanguage: getServiceConnectUserLanguage(res) }),\n});\n","import { GetServiceConnectUserResponseDto } from './dtos';\nimport { serviceConnectPluginFactory } from './helpers';\nimport { getServiceConnectUserLanguage } from './service-connect-user-language.plugin';\nimport { ServiceConnectEndpoints } from './service-connect.config';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n country?: string;\n institutionId?: number;\n institutionName?: string;\n institutionShortname?: string;\n }\n }\n}\n\n/**\n * A plugin for fetching and parsing the user's profile from service connect.\n *\n * This plugin uses the `serviceConnectPluginFactory` to create a plugin that fetches the user's profile\n * from the user endpoint and parses the response to extract the user's profile information.\n *\n * @see {serviceConnectPluginFactory}\n */\nexport const serviceConnectUserProfilePlugin = serviceConnectPluginFactory<GetServiceConnectUserResponseDto>({\n endpoint: [ServiceConnectEndpoints.user],\n parseResponse: (res) => {\n return {\n country: res?.country,\n institutionId: res?.institution_id,\n institutionName: res?.institution_name,\n institutionShortname: res?.institution_shortname,\n preferredLanguage: getServiceConnectUserLanguage(res),\n };\n },\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}