@odx/auth 13.0.0 → 13.2.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 +12 -0
- package/README.md +1 -0
- package/esm2022/lib/auth.component.mjs +5 -4
- package/esm2022/lib/auth.typings.mjs +1 -1
- package/esm2022/lib/components/auth-actions/auth-actions.component.mjs +3 -3
- package/esm2022/plugins/service-connect/index.mjs +2 -1
- package/esm2022/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.mjs +1 -1
- package/esm2022/plugins/service-connect/lib/service-connect-user-language.plugin.mjs +5 -5
- package/esm2022/plugins/service-connect/lib/service-connect-user-profile.plugin.mjs +16 -0
- package/fesm2022/odx-auth-plugins-service-connect.mjs +16 -3
- package/fesm2022/odx-auth-plugins-service-connect.mjs.map +1 -1
- package/fesm2022/odx-auth.mjs +6 -5
- package/fesm2022/odx-auth.mjs.map +1 -1
- package/lib/auth.component.d.ts +2 -1
- package/lib/auth.typings.d.ts +1 -0
- package/package.json +1 -1
- package/plugins/service-connect/index.d.ts +1 -0
- package/plugins/service-connect/lib/dtos/get-service-connect-user-response.dto.d.ts +7 -0
- package/plugins/service-connect/lib/service-connect-user-language.plugin.d.ts +2 -0
- package/plugins/service-connect/lib/service-connect-user-profile.plugin.d.ts +11 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @odx/auth
|
|
2
2
|
|
|
3
|
+
## 13.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2a208ee: Add serviceConnectUserProfilePlugin to show institution name in the user profile menu - replaces the serviceConnectUserLanguagePlugin
|
|
8
|
+
|
|
9
|
+
## 13.1.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- c6c4202: Maintenance minor updates for angular and dev packages
|
|
14
|
+
|
|
3
15
|
## 13.0.0
|
|
4
16
|
|
|
5
17
|
### Major Changes
|
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ npm install @odx/auth
|
|
|
19
19
|
- **unauthGuard**: Angular guard to protect routes that don't require authentication or authorization
|
|
20
20
|
- ...
|
|
21
21
|
- **@odx/auth/plugins/service-connect**: main entry point for service connect auth plugins
|
|
22
|
+
- **serviceConnectUserProfilePlugin**: Auth plugin to load user profile including language settings from service connect
|
|
22
23
|
- **serviceConnectRightsPlugin**: Auth plugin to load user rights from service connect
|
|
23
24
|
- **serviceConnectRightsGuard**: Auth guard to check for service connect user rights
|
|
24
25
|
- **ServiceConnectRightsDirective**: Auth directive to check for service connect user rights
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject, input, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { CoreModule } from '@odx/angular';
|
|
3
3
|
import { AreaHeaderModule } from '@odx/angular/components/area-header';
|
|
4
4
|
import { DropdownModule } from '@odx/angular/components/dropdown';
|
|
@@ -30,9 +30,10 @@ export class AuthComponent {
|
|
|
30
30
|
enableFallback: false,
|
|
31
31
|
containerClass: 'odx-auth-user-profile',
|
|
32
32
|
};
|
|
33
|
+
this.hideInstitution = input(false);
|
|
33
34
|
}
|
|
34
35
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
36
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.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 <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\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></odx-icon>\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\"></ng-template>\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></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></odx-icon>\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-template>\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: CoreModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: AreaHeaderModule }, { kind: "component", type: i3.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i3.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i4.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i5.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i7.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i8.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 }); }
|
|
36
37
|
}
|
|
37
38
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthComponent, decorators: [{
|
|
38
39
|
type: Component,
|
|
@@ -47,6 +48,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
47
48
|
LoadingSpinnerModule,
|
|
48
49
|
AuthActionsComponent,
|
|
49
50
|
TranslatePipe,
|
|
50
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [provideTranslations(translations)], template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n
|
|
51
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [provideTranslations(translations)], template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\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></odx-icon>\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\"></ng-template>\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></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></odx-icon>\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-template>\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"] }]
|
|
51
52
|
}] });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sWUFBWSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7QUF1QmpFLE1BQU0sT0FBTyxhQUFhO0lBckIxQjtRQXNCcUIsZUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDaEMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsb0JBQWUsR0FBRztZQUNuQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDN0IsY0FBYyxFQUFFLEtBQUs7WUFDckIsY0FBYyxFQUFFLHVCQUF1QjtTQUNaLENBQUM7UUFFZCxvQkFBZSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNoRDsrR0FWWSxhQUFhO21HQUFiLGFBQWEseU5BRmIsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQywwQkNsQ2hELG1uRUEwQ0Esa2JEdkJJLFVBQVUsMFdBQ1YsZ0JBQWdCLGlyQkFDaEIsY0FBYywwZkFDZCxZQUFZLCtCQUNaLGFBQWEsa0ZBQ2IsZUFBZSxtR0FDZixnQkFBZ0Isb0dBQ2hCLG9CQUFvQiwrQkFDcEIsb0JBQW9CLDRFQUNwQixhQUFhOzs0RkFRSixhQUFhO2tCQXJCekIsU0FBUztpQ0FDSSxJQUFJLFlBQ04sVUFBVSxXQUNYO3dCQUNQLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixvQkFBb0I7d0JBQ3BCLGFBQWE7cUJBQ2QsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3JlTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyJztcbmltcG9ydCB7IEFyZWFIZWFkZXJNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9hcmVhLWhlYWRlcic7XG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSwgRHJvcGRvd25PcHRpb25zIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgSGVhZGVyTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvaGVhZGVyJztcbmltcG9ydCB7IExvYWRpbmdTcGlubmVyTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvbG9hZGluZy1zcGlubmVyJztcbmltcG9ydCB7IExvZ29EaXJlY3RpdmUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9sb2dvJztcbmltcG9ydCB7IHByb3ZpZGVUcmFuc2xhdGlvbnMsIFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwvdHJhbnNsYXRlJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGluamVjdEF1dGhDb25maWcgfSBmcm9tICcuL2F1dGguY29uZmlnJztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi9hdXRoLmkxOG4nO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTaWduSW5EaXJlY3RpdmUsIFNpZ25PdXREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtYXV0aCcsXG4gIGltcG9ydHM6IFtcbiAgICBDb3JlTW9kdWxlLFxuICAgIEFyZWFIZWFkZXJNb2R1bGUsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgSGVhZGVyTW9kdWxlLFxuICAgIExvZ29EaXJlY3RpdmUsXG4gICAgU2lnbkluRGlyZWN0aXZlLFxuICAgIFNpZ25PdXREaXJlY3RpdmUsXG4gICAgTG9hZGluZ1NwaW5uZXJNb2R1bGUsXG4gICAgQXV0aEFjdGlvbnNDb21wb25lbnQsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dGguY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdXRoLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtwcm92aWRlVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucyldLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhDb25maWcgPSBpbmplY3RBdXRoQ29uZmlnKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkcm9wZG93bk9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb246IFBvc2l0aW9uLkJPVFRPTV9FTkQsXG4gICAgZW5hYmxlRmFsbGJhY2s6IGZhbHNlLFxuICAgIGNvbnRhaW5lckNsYXNzOiAnb2R4LWF1dGgtdXNlci1wcm9maWxlJyxcbiAgfSBhcyBQYXJ0aWFsPERyb3Bkb3duT3B0aW9ucz47XG5cbiAgcHVibGljIHJlYWRvbmx5IGhpZGVJbnN0aXR1dGlvbiA9IGlucHV0KGZhbHNlKTtcbn1cbiIsIjxvZHgtYWN0aW9uLWdyb3VwPlxuICA8bmctdGVtcGxhdGUgW25ncnhMZXRdPVwieyBpZENsYWltczogYXV0aFNlcnZpY2UuaWRlbnRpdHlDbGFpbXMkLCBpc0F1dGhlbnRpY2F0ZWQ6IGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQgfVwiIGxldC12bT5cbiAgICBAaWYgKHZtLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgPGJ1dHRvbiBvZHhCdXR0b24gW29keERyb3Bkb3duXT1cInVzZXJQcm9maWxlTWVudVwiIFtvZHhEcm9wZG93bk9wdGlvbnNdPVwiZHJvcGRvd25PcHRpb25zXCIgZGF0YS10ZXN0aWQ9XCJvZHgtYXV0aC11c2VyLXByb2ZpbGUtYnV0dG9uXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ1c2VyQXZhdGFyXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9keC1hdXRoLXNpZ24taW5cIiBvZHhCdXR0b24gb2R4QXV0aFNpZ25JbiB2YXJpYW50PVwic2Vjb25kYXJ5XCIgZGF0YS10ZXN0aWQ9XCJvZHgtYXV0aC1zaWduLWluLWJ1dHRvblwiPlxuICAgICAgICA8b2R4LWljb24gbmFtZT1cInVzZXJcIiBhbGlnbkxlZnQ+PC9vZHgtaWNvbj5cbiAgICAgICAge3sgJ3NpZ25JbkJ1dHRvblRleHQnIHwgb2R4VHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgICA8bmctdGVtcGxhdGUgI3VzZXJQcm9maWxlTWVudT5cbiAgICAgIEBpZiAoIWhpZGVJbnN0aXR1dGlvbigpICYmIHZtLmlkQ2xhaW1zPy5pbnN0aXR1dGlvbk5hbWU7IGFzIGluc3RpdHV0aW9uTmFtZSkge1xuICAgICAgICA8b2R4LWFyZWEtaGVhZGVyIGNsYXNzPVwib2R4LXBhZGRpbmcteC0xMiBvZHgtcGFkZGluZy1ib3R0b20tOFwiIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgIDxvZHgtYXJlYS1oZWFkZXItc3VidGl0bGUgY2xhc3M9XCJvZHgtYXV0aC1pbnN0aXR1dGlvbi1uYW1lXCI+e3sgaW5zdGl0dXRpb25OYW1lIH19PC9vZHgtYXJlYS1oZWFkZXItc3VidGl0bGU+XG4gICAgICAgIDwvb2R4LWFyZWEtaGVhZGVyPlxuICAgICAgfVxuICAgICAgPG9keC1hcmVhLWhlYWRlciBjbGFzcz1cIm9keC1wYWRkaW5nLXgtMTJcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVzZXJBdmF0YXJcIiBuZ1Byb2plY3RBcz1cIm9keC1hdmF0YXJcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB7eyB2bS5pZENsYWltcz8udXNlcm5hbWUgfX1cbiAgICAgICAgPG9keC1hcmVhLWhlYWRlci1zdWJ0aXRsZT5cbiAgICAgICAgICB7eyB2bS5pZENsYWltcz8uZW1haWwgfX1cbiAgICAgICAgPC9vZHgtYXJlYS1oZWFkZXItc3VidGl0bGU+XG4gICAgICA8L29keC1hcmVhLWhlYWRlcj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDxvZHgtYXV0aC1hY3Rpb25zIFtjbGFpbXNdPVwidm0uaWRDbGFpbXNcIj48L29keC1hdXRoLWFjdGlvbnM+XG4gICAgICA8ZGl2IGNsYXNzPVwib2R4LW1hcmdpbi10b3AtMTJcIiBvZHhMYXlvdXQ9XCJmbGV4IHZlcnRpY2FsLWNlbnRlclwiPlxuICAgICAgICA8b2R4LWxvZ28gb2R4TGF5b3V0PVwiYXV0b1wiIGNsYXNzPVwib2R4LW1hcmdpbi1sZWZ0LTEyIG9keC1tYXJnaW4tcmlnaHQtYXV0b1wiPjwvb2R4LWxvZ28+XG4gICAgICAgIDxidXR0b24gb2R4QnV0dG9uIG9keEF1dGhTaWduT3V0IHZhcmlhbnQ9XCJnaG9zdFwiIGRhdGEtdGVzdGlkPVwib2R4LWF1dGgtc2lnbi1vdXQtYnV0dG9uXCI+XG4gICAgICAgICAge3sgJ3NpZ25PdXRCdXR0b25UZXh0JyB8IG9keFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgPG9keC1pY29uIG5hbWU9XCJsb2dvdXRcIiBhbGlnblJpZ2h0Pjwvb2R4LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI3VzZXJBdmF0YXI+XG4gICAgICA8b2R4LWF2YXRhciBjbGFzcz1cIm9keC1hdXRoLXVzZXItYXZhdGFyXCI+XG4gICAgICAgIHt7IHZtLmlkQ2xhaW1zPy5pbml0aWFscyA/PyAnJyB9fVxuICAgICAgPC9vZHgtYXZhdGFyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG48L29keC1hY3Rpb24tZ3JvdXA+XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC50eXBpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC50eXBpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIG5hbWVzcGFjZSBPZHhBdXRoIHtcbiAgICB0eXBlIFJhd0lkZW50aXR5Q2xhaW1zID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBpbnRlcmZhY2UgQXV0aFBsdWdpblJlc3VsdCB7XG4gICAgICBpbnN0aXR1dGlvbk5hbWU/OiBzdHJpbmc7XG4gICAgICBwcmVmZXJyZWRMYW5ndWFnZT86IHN0cmluZztcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgSWRlbnRpeUNsYWltcyBleHRlbmRzIEF1dGhQbHVnaW5SZXN1bHQge1xuICAgICAgc3ViOiBzdHJpbmc7XG4gICAgICBva3RhaWQ6IHN0cmluZztcbiAgICAgIGlhdDogbnVtYmVyO1xuICAgICAgYXVkOiBzdHJpbmc7XG5cbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgICAgbGFzdG5hbWU6IHN0cmluZztcbiAgICAgIGRpc3BsYXluYW1lOiBzdHJpbmc7XG4gICAgICBwcmVmZXJyZWRfdXNlcm5hbWU6IHN0cmluZztcbiAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICBpbml0aWFsczogc3RyaW5nO1xuXG4gICAgICBsb2NhbGU/OiBzdHJpbmc7XG4gICAgICB6b25laW5mbz86IHN0cmluZztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHt9O1xuIl19
|
|
@@ -15,7 +15,7 @@ let AuthActionsComponent = class AuthActionsComponent {
|
|
|
15
15
|
this.claims = null;
|
|
16
16
|
}
|
|
17
17
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuthActionsComponent, isStandalone: true, selector: "odx-auth-actions", inputs: { claims: "claims" }, ngImport: i0, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\"
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuthActionsComponent, isStandalone: true, selector: "odx-auth-actions", inputs: { claims: "claims" }, ngImport: i0, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix></odx-icon>\n </a>\n</odx-list>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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 }); }
|
|
19
19
|
};
|
|
20
20
|
AuthActionsComponent = __decorate([
|
|
21
21
|
CSSComponent('auth-actions')
|
|
@@ -23,8 +23,8 @@ AuthActionsComponent = __decorate([
|
|
|
23
23
|
export { AuthActionsComponent };
|
|
24
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthActionsComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
|
-
args: [{ standalone: true, selector: 'odx-auth-actions', imports: [CoreModule, ListModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\"
|
|
26
|
+
args: [{ standalone: true, selector: 'odx-auth-actions', imports: [CoreModule, ListModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix></odx-icon>\n </a>\n</odx-list>\n" }]
|
|
27
27
|
}], propDecorators: { claims: [{
|
|
28
28
|
type: Input
|
|
29
29
|
}] } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1hY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvYXV0aC1hY3Rpb25zL2F1dGgtYWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9jb21wb25lbnRzL2F1dGgtYWN0aW9ucy9hdXRoLWFjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQVc1QyxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFvQjtJQUExQjtRQUNXLFlBQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUduQyxXQUFNLEdBQWlDLElBQUksQ0FBQztLQUNwRDsrR0FMWSxvQkFBb0I7bUdBQXBCLG9CQUFvQiwwR0NoQmpDLDhhQU9BLDJDRElZLFVBQVUsdUxBQUUsVUFBVSxrWEFBRSxhQUFhOztBQUtwQyxvQkFBb0I7SUFUaEMsWUFBWSxDQUFDLGNBQWMsQ0FBQztHQVNoQixvQkFBb0IsQ0FLaEM7OzRGQUxZLG9CQUFvQjtrQkFSaEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sa0JBQWtCLFdBQ25CLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsbUJBRS9CLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OEJBTTlCLE1BQU07c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBMaXN0TW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvbGlzdCc7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvaW50ZXJuYWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9pbnRlcm5hbC90cmFuc2xhdGUnO1xuaW1wb3J0IHsgaW5qZWN0RWxlbWVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5cbkBDU1NDb21wb25lbnQoJ2F1dGgtYWN0aW9ucycpXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtYXV0aC1hY3Rpb25zJyxcbiAgaW1wb3J0czogW0NvcmVNb2R1bGUsIExpc3RNb2R1bGUsIFRyYW5zbGF0ZVBpcGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhBY3Rpb25zQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNsYWltczogT2R4QXV0aC5JZGVudGl5Q2xhaW1zIHwgbnVsbCA9IG51bGw7XG59XG4iLCI8b2R4LWxpc3Q+XG4gIDxhIGRhdGEtdGVzdGlkPVwib2R4LWF1dGgtdXNlci1wcm9maWxlLWxpbmtcIiBvZHhMaXN0SXRlbSBbaHJlZl09XCJ1cmxcIiByZWw9XCJub29wZW5lclwiIHRhcmdldD1cIl9ibGFua1wiICpuZ0lmPVwiY2xhaW1zPy51c2VyUHJvZmlsZVVybCBhcyB1cmxcIj5cbiAgICA8b2R4LWljb24gbmFtZT1cInVzZXItYWRtaW5pc3RyYXRpb25cIiBpY29uU2V0PVwiY29yZVwiIG9keExpc3RJdGVtUHJlZml4Pjwvb2R4LWljb24+XG4gICAge3sgJ3VzZXJQcm9maWxlTGluaycgfCBvZHhUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDxvZHgtaWNvbiBuYW1lPVwibGluay1leHRlcm5hbFwiIGljb25TZXQ9XCJjb3JlXCIgc2l6ZT1cInNtYWxsXCIgb2R4TGlzdEl0ZW1TdWZmaXg+PC9vZHgtaWNvbj5cbiAgPC9hPlxuPC9vZHgtbGlzdD5cbiJdfQ==
|
|
@@ -4,5 +4,6 @@ export * from './lib/service-connect-rights.directive';
|
|
|
4
4
|
export * from './lib/service-connect-rights.guard';
|
|
5
5
|
export * from './lib/service-connect-rights.plugin';
|
|
6
6
|
export * from './lib/service-connect-user-language.plugin';
|
|
7
|
+
export * from './lib/service-connect-user-profile.plugin';
|
|
7
8
|
export * from './lib/service-connect.config';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvcGx1Z2lucy9zZXJ2aWNlLWNvbm5lY3Qvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZHRvcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2UtY29ubmVjdC1yaWdodHMuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2UtY29ubmVjdC1yaWdodHMuZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZS1jb25uZWN0LXJpZ2h0cy5wbHVnaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZS1jb25uZWN0LXVzZXItbGFuZ3VhZ2UucGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2UtY29ubmVjdC11c2VyLXByb2ZpbGUucGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2UtY29ubmVjdC5jb25maWcnO1xuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXNlcnZpY2UtY29ubmVjdC11c2VyLXJlc3BvbnNlLmR0by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9wbHVnaW5zL3NlcnZpY2UtY29ubmVjdC9zcmMvbGliL2R0b3MvZ2V0LXNlcnZpY2UtY29ubmVjdC11c2VyLXJlc3BvbnNlLmR0by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHZXRTZXJ2aWNlQ29ubmVjdFVzZXJSZXNwb25zZUR0byB7XG4gIHVzZXJfaWQ6IHN0cmluZztcbiAgZmlyc3RfbmFtZTogc3RyaW5nO1xuICBsYXN0X25hbWU6IHN0cmluZztcbiAgbGFuZ3VhZ2VfY29kZTogc3RyaW5nO1xuICBwcmVmZXJyZWRfbGFuZ3VhZ2U6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBpbnN0aXR1dGlvbl9pZDogbnVtYmVyO1xuICBpbnN0aXR1dGlvbl9uYW1lOiBzdHJpbmc7XG4gIGluc3RpdHV0aW9uX3Nob3J0bmFtZTogc3RyaW5nO1xufVxuIl19
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { getLanguageCode } from '@odx/angular/utils';
|
|
2
2
|
import { serviceConnectPluginFactory } from './helpers';
|
|
3
3
|
import { ServiceConnectEndpoints } from './service-connect.config';
|
|
4
|
+
export function getServiceConnectUserLanguage(res) {
|
|
5
|
+
return (res?.preferred_language ?? res?.language_code) ? getLanguageCode(res.preferred_language ?? res.language_code) : undefined;
|
|
6
|
+
}
|
|
4
7
|
export const serviceConnectUserLanguagePlugin = serviceConnectPluginFactory({
|
|
5
8
|
endpoint: [ServiceConnectEndpoints.user],
|
|
6
|
-
parseResponse: (res) => {
|
|
7
|
-
const preferredLanguage = res?.preferred_language ?? res?.language_code ? getLanguageCode(res.preferred_language ?? res.language_code) : undefined;
|
|
8
|
-
return { preferredLanguage };
|
|
9
|
-
},
|
|
9
|
+
parseResponse: (res) => ({ preferredLanguage: getServiceConnectUserLanguage(res) }),
|
|
10
10
|
});
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXVzZXItbGFuZ3VhZ2UucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3BsdWdpbnMvc2VydmljZS1jb25uZWN0L3NyYy9saWIvc2VydmljZS1jb25uZWN0LXVzZXItbGFuZ3VhZ2UucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkUsTUFBTSxVQUFVLDZCQUE2QixDQUFDLEdBQTZDO0lBQ3pGLE9BQU8sQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLElBQUksR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3BJLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRywyQkFBMkIsQ0FBbUM7SUFDNUcsUUFBUSxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO0lBQ3hDLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Q0FDcEYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TGFuZ3VhZ2VDb2RlIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IEdldFNlcnZpY2VDb25uZWN0VXNlclJlc3BvbnNlRHRvIH0gZnJvbSAnLi9kdG9zJztcbmltcG9ydCB7IHNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29ubmVjdEVuZHBvaW50cyB9IGZyb20gJy4vc2VydmljZS1jb25uZWN0LmNvbmZpZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJ2aWNlQ29ubmVjdFVzZXJMYW5ndWFnZShyZXM/OiBHZXRTZXJ2aWNlQ29ubmVjdFVzZXJSZXNwb25zZUR0byB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKHJlcz8ucHJlZmVycmVkX2xhbmd1YWdlID8/IHJlcz8ubGFuZ3VhZ2VfY29kZSkgPyBnZXRMYW5ndWFnZUNvZGUocmVzLnByZWZlcnJlZF9sYW5ndWFnZSA/PyByZXMubGFuZ3VhZ2VfY29kZSkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBzZXJ2aWNlQ29ubmVjdFVzZXJMYW5ndWFnZVBsdWdpbiA9IHNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeTxHZXRTZXJ2aWNlQ29ubmVjdFVzZXJSZXNwb25zZUR0bz4oe1xuICBlbmRwb2ludDogW1NlcnZpY2VDb25uZWN0RW5kcG9pbnRzLnVzZXJdLFxuICBwYXJzZVJlc3BvbnNlOiAocmVzKSA9PiAoeyBwcmVmZXJyZWRMYW5ndWFnZTogZ2V0U2VydmljZUNvbm5lY3RVc2VyTGFuZ3VhZ2UocmVzKSB9KSxcbn0pO1xuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { serviceConnectPluginFactory } from './helpers';
|
|
2
|
+
import { getServiceConnectUserLanguage } from './service-connect-user-language.plugin';
|
|
3
|
+
import { ServiceConnectEndpoints } from './service-connect.config';
|
|
4
|
+
export const serviceConnectUserProfilePlugin = serviceConnectPluginFactory({
|
|
5
|
+
endpoint: [ServiceConnectEndpoints.user],
|
|
6
|
+
parseResponse: (res) => {
|
|
7
|
+
return {
|
|
8
|
+
country: res?.country,
|
|
9
|
+
institutionId: res?.institution_id,
|
|
10
|
+
institutionName: res?.institution_name,
|
|
11
|
+
institutionShortname: res?.institution_shortname,
|
|
12
|
+
preferredLanguage: getServiceConnectUserLanguage(res),
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb25uZWN0LXVzZXItcHJvZmlsZS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvcGx1Z2lucy9zZXJ2aWNlLWNvbm5lY3Qvc3JjL2xpYi9zZXJ2aWNlLWNvbm5lY3QtdXNlci1wcm9maWxlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFjbkUsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsMkJBQTJCLENBQW1DO0lBQzNHLFFBQVEsRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQztJQUN4QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNyQixPQUFPO1lBQ0wsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPO1lBQ3JCLGFBQWEsRUFBRSxHQUFHLEVBQUUsY0FBYztZQUNsQyxlQUFlLEVBQUUsR0FBRyxFQUFFLGdCQUFnQjtZQUN0QyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUscUJBQXFCO1lBQ2hELGlCQUFpQixFQUFFLDZCQUE2QixDQUFDLEdBQUcsQ0FBQztTQUN0RCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdldFNlcnZpY2VDb25uZWN0VXNlclJlc3BvbnNlRHRvIH0gZnJvbSAnLi9kdG9zJztcbmltcG9ydCB7IHNlcnZpY2VDb25uZWN0UGx1Z2luRmFjdG9yeSB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlQ29ubmVjdFVzZXJMYW5ndWFnZSB9IGZyb20gJy4vc2VydmljZS1jb25uZWN0LXVzZXItbGFuZ3VhZ2UucGx1Z2luJztcbmltcG9ydCB7IFNlcnZpY2VDb25uZWN0RW5kcG9pbnRzIH0gZnJvbSAnLi9zZXJ2aWNlLWNvbm5lY3QuY29uZmlnJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICBuYW1lc3BhY2UgT2R4QXV0aCB7XG4gICAgaW50ZXJmYWNlIEF1dGhQbHVnaW5SZXN1bHQge1xuICAgICAgY291bnRyeT86IHN0cmluZztcbiAgICAgIGluc3RpdHV0aW9uSWQ/OiBudW1iZXI7XG4gICAgICBpbnN0aXR1dGlvbk5hbWU/OiBzdHJpbmc7XG4gICAgICBpbnN0aXR1dGlvblNob3J0bmFtZT86IHN0cmluZztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHNlcnZpY2VDb25uZWN0VXNlclByb2ZpbGVQbHVnaW4gPSBzZXJ2aWNlQ29ubmVjdFBsdWdpbkZhY3Rvcnk8R2V0U2VydmljZUNvbm5lY3RVc2VyUmVzcG9uc2VEdG8+KHtcbiAgZW5kcG9pbnQ6IFtTZXJ2aWNlQ29ubmVjdEVuZHBvaW50cy51c2VyXSxcbiAgcGFyc2VSZXNwb25zZTogKHJlcykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBjb3VudHJ5OiByZXM/LmNvdW50cnksXG4gICAgICBpbnN0aXR1dGlvbklkOiByZXM/Lmluc3RpdHV0aW9uX2lkLFxuICAgICAgaW5zdGl0dXRpb25OYW1lOiByZXM/Lmluc3RpdHV0aW9uX25hbWUsXG4gICAgICBpbnN0aXR1dGlvblNob3J0bmFtZTogcmVzPy5pbnN0aXR1dGlvbl9zaG9ydG5hbWUsXG4gICAgICBwcmVmZXJyZWRMYW5ndWFnZTogZ2V0U2VydmljZUNvbm5lY3RVc2VyTGFuZ3VhZ2UocmVzKSxcbiAgICB9O1xuICB9LFxufSk7XG4iXX0=
|
|
@@ -88,11 +88,24 @@ const serviceConnectRightsPlugin = serviceConnectPluginFactory({
|
|
|
88
88
|
defaultValue: { rights: [] },
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
+
function getServiceConnectUserLanguage(res) {
|
|
92
|
+
return (res?.preferred_language ?? res?.language_code) ? getLanguageCode(res.preferred_language ?? res.language_code) : undefined;
|
|
93
|
+
}
|
|
91
94
|
const serviceConnectUserLanguagePlugin = serviceConnectPluginFactory({
|
|
95
|
+
endpoint: [ServiceConnectEndpoints.user],
|
|
96
|
+
parseResponse: (res) => ({ preferredLanguage: getServiceConnectUserLanguage(res) }),
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const serviceConnectUserProfilePlugin = serviceConnectPluginFactory({
|
|
92
100
|
endpoint: [ServiceConnectEndpoints.user],
|
|
93
101
|
parseResponse: (res) => {
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
return {
|
|
103
|
+
country: res?.country,
|
|
104
|
+
institutionId: res?.institution_id,
|
|
105
|
+
institutionName: res?.institution_name,
|
|
106
|
+
institutionShortname: res?.institution_shortname,
|
|
107
|
+
preferredLanguage: getServiceConnectUserLanguage(res),
|
|
108
|
+
};
|
|
96
109
|
},
|
|
97
110
|
});
|
|
98
111
|
|
|
@@ -100,5 +113,5 @@ const serviceConnectUserLanguagePlugin = serviceConnectPluginFactory({
|
|
|
100
113
|
* Generated bundle index. Do not edit.
|
|
101
114
|
*/
|
|
102
115
|
|
|
103
|
-
export { ServiceConnectEndpoints, ServiceConnectRightsDirective, ServiceConnectScopes, ServiceConnnectEnvironments, buildServiceConnectUrl, hasRolesOrRights, hasRolesOrRightsHandler, serviceConnectPluginFactory, serviceConnectRightsGuard, serviceConnectRightsPlugin, serviceConnectUserLanguagePlugin };
|
|
116
|
+
export { ServiceConnectEndpoints, ServiceConnectRightsDirective, ServiceConnectScopes, ServiceConnnectEnvironments, buildServiceConnectUrl, getServiceConnectUserLanguage, hasRolesOrRights, hasRolesOrRightsHandler, serviceConnectPluginFactory, serviceConnectRightsGuard, serviceConnectRightsPlugin, serviceConnectUserLanguagePlugin, serviceConnectUserProfilePlugin };
|
|
104
117
|
//# sourceMappingURL=odx-auth-plugins-service-connect.mjs.map
|
|
@@ -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/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\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\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\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\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@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 @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// 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\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\nexport const serviceConnectUserLanguagePlugin = serviceConnectPluginFactory<GetServiceConnectUserResponseDto>({\n endpoint: [ServiceConnectEndpoints.user],\n parseResponse: (res) => {\n const preferredLanguage = res?.preferred_language ?? res?.language_code ? getLanguageCode(res.preferred_language ?? res.language_code) : undefined;\n\n return { preferredLanguage };\n },\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;AAGa,MAAA,2BAA2B,GAAoC;AAC1E,IAAA,CAAC,eAAe,CAAC,GAAG,GAAG,sCAAsC;AAC7D,IAAA,CAAC,eAAe,CAAC,KAAK,GAAG,yCAAyC;AAClE,IAAA,CAAC,eAAe,CAAC,IAAI,GAAG,iCAAiC;EACzD;AACW,MAAA,oBAAoB,GAAG;AAClC,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,OAAO,EAAE,cAAc;AACvB,IAAA,MAAM,EAAE,aAAa;AACrB,IAAA,WAAW,EAAE,kBAAkB;EAC/B;AACW,MAAA,uBAAuB,GAAG;AACrC,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,UAAU,EAAE,kBAAkB;;;SCZhB,sBAAsB,CAAC,WAAwD,EAAE,GAAG,SAAmB,EAAA;AACrH,IAAA,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAC,2BAA2B,CAAC,WAAW,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;KACzE;IACD,OAAO,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AACpD;;ACLgB,SAAA,gBAAgB,CAAC,UAAmB,EAAE,aAA4B,EAAA;AAChF,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnI;;ACHM,SAAU,uBAAuB,CAAC,aAA4B,EAAA;AAClE,IAAA,OAAO,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3E;;ACeM,SAAU,2BAA2B,CAAgB,OAAgD,EAAA;AACzG,IAAA,OAAO,CAAC,aAAa,KAAK,MAAK;AAC7B,QAAA,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC;AAC/B,QAAA,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAAC;AAC3C,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACtC,QAAA,MAAM,GAAG,GAAG,sBAAsB,CAAC,aAAa,EAAE,WAAW,IAAI,WAAW,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnG,QAAA,MAAM,aAAa,GAAG,CAAC,GAAe,KAAK,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;AAEpG,QAAA,OAAO,MACL,KAAK,CAAC,MACJ,UAAU,CAAC,GAAG,CAAM,GAAG,EAAE;YACvB,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;AAC5D,SAAA,CAAC,CACH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C,KAAC,CAAC;AACJ;;MCrBa,6BAA6B,CAAA;AAV1C,IAAA,WAAA,GAAA;QAWmB,IAAa,CAAA,aAAA,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAMxE,KAAA;IAJC,IACW,aAAa,CAAC,KAAuC,EAAA;QAC9D,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,uBAAuB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;KAChF;+GANU,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,6BAAA,EAAA,eAAA,CAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iCAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAVzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,0CAA0C;AACpD,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,aAAa;4BACxB,MAAM,EAAE,CAAC,6CAA6C,CAAC;AACxD,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;8BAKY,aAAa,EAAA,CAAA;sBADvB,KAAK;uBAAC,6BAA6B,CAAA;;;ACbtC;AACM,SAAU,yBAAyB,CAAC,aAA4B,EAAE,UAA2B,EAAE,UAAU,GAAG,KAAK,EAAA;IACrH,OAAO,SAAS,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AACnF;;ACMO,MAAM,0BAA0B,GAAG,2BAA2B,CAAqC;AACxG,IAAA,QAAQ,EAAE,CAAC,uBAAuB,CAAC,UAAU,CAAC;AAC9C,IAAA,aAAa,EAAE,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;AACvD,IAAA,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AAC7B,CAAA;;ACZM,MAAM,gCAAgC,GAAG,2BAA2B,CAAmC;AAC5G,IAAA,QAAQ,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC;AACxC,IAAA,aAAa,EAAE,CAAC,GAAG,KAAI;QACrB,MAAM,iBAAiB,GAAG,GAAG,EAAE,kBAAkB,IAAI,GAAG,EAAE,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QAEnJ,OAAO,EAAE,iBAAiB,EAAE,CAAC;KAC9B;AACF,CAAA;;ACZD;;AAEG;;;;"}
|
|
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\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\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\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\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@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 @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// 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\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\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\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\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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"}
|
package/fesm2022/odx-auth.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, EnvironmentInjector, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, DestroyRef, InjectionToken, ENVIRONMENT_INITIALIZER, makeEnvironmentProviders, APP_INITIALIZER, Injectable, Directive, EventEmitter, Output, HostListener, NgModule } from '@angular/core';
|
|
2
|
+
import { inject, EnvironmentInjector, Component, ChangeDetectionStrategy, ViewEncapsulation, Input, DestroyRef, InjectionToken, ENVIRONMENT_INITIALIZER, makeEnvironmentProviders, APP_INITIALIZER, Injectable, Directive, EventEmitter, Output, HostListener, input, NgModule } from '@angular/core';
|
|
3
3
|
import { Environment, CoreModule, WindowRef } from '@odx/angular';
|
|
4
4
|
import * as i3$1 from '@odx/angular/components/area-header';
|
|
5
5
|
import { AreaHeaderModule } from '@odx/angular/components/area-header';
|
|
@@ -137,14 +137,14 @@ let AuthActionsComponent = class AuthActionsComponent {
|
|
|
137
137
|
this.claims = null;
|
|
138
138
|
}
|
|
139
139
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
140
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuthActionsComponent, isStandalone: true, selector: "odx-auth-actions", inputs: { claims: "claims" }, ngImport: i0, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\"
|
|
140
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuthActionsComponent, isStandalone: true, selector: "odx-auth-actions", inputs: { claims: "claims" }, ngImport: i0, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix></odx-icon>\n </a>\n</odx-list>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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 }); }
|
|
141
141
|
};
|
|
142
142
|
AuthActionsComponent = __decorate([
|
|
143
143
|
CSSComponent('auth-actions')
|
|
144
144
|
], AuthActionsComponent);
|
|
145
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthActionsComponent, decorators: [{
|
|
146
146
|
type: Component,
|
|
147
|
-
args: [{ standalone: true, selector: 'odx-auth-actions', imports: [CoreModule, ListModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\"
|
|
147
|
+
args: [{ standalone: true, selector: 'odx-auth-actions', imports: [CoreModule, ListModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix></odx-icon>\n </a>\n</odx-list>\n" }]
|
|
148
148
|
}], propDecorators: { claims: [{
|
|
149
149
|
type: Input
|
|
150
150
|
}] } });
|
|
@@ -630,9 +630,10 @@ class AuthComponent {
|
|
|
630
630
|
enableFallback: false,
|
|
631
631
|
containerClass: 'odx-auth-user-profile',
|
|
632
632
|
};
|
|
633
|
+
this.hideInstitution = input(false);
|
|
633
634
|
}
|
|
634
635
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
635
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
636
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.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 <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\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></odx-icon>\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\"></ng-template>\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></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></odx-icon>\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-template>\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: CoreModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i2$1.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "ngmodule", type: AreaHeaderModule }, { kind: "component", type: i3$1.AreaHeaderComponent, selector: "odx-area-header", inputs: ["size"] }, { kind: "directive", type: i3$1.AreaHeaderSubtitleDirective, selector: "odx-area-header-subtitle" }, { kind: "component", type: i4.AvatarComponent, selector: "odx-avatar", inputs: ["size", "variant"] }, { kind: "component", type: i5.ActionGroupComponent, selector: "odx-action-group", inputs: ["reverse"] }, { kind: "component", type: i6.ButtonComponent, selector: "button[odxButton], a[odxButton]", inputs: ["variant", "size"] }, { kind: "component", type: i3.IconComponent, selector: "odx-icon", inputs: ["inline", "size", "name", "iconSet", "identifier"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i8.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 }); }
|
|
636
637
|
}
|
|
637
638
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthComponent, decorators: [{
|
|
638
639
|
type: Component,
|
|
@@ -647,7 +648,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
647
648
|
LoadingSpinnerModule,
|
|
648
649
|
AuthActionsComponent,
|
|
649
650
|
TranslatePipe,
|
|
650
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [provideTranslations(translations)], template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n
|
|
651
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [provideTranslations(translations)], template: "<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\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></odx-icon>\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\"></ng-template>\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></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></odx-icon>\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-template>\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"] }]
|
|
651
652
|
}] });
|
|
652
653
|
|
|
653
654
|
class AuthDirective {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-auth.mjs","sources":["../../../../libs/auth/src/lib/helpers/create-auth-host-url.ts","../../../../libs/auth/src/lib/helpers/create-inititals.ts","../../../../libs/auth/src/lib/helpers/handle-auth-error.ts","../../../../libs/auth/src/lib/helpers/handle-oauth-event.ts","../../../../libs/auth/src/lib/helpers/resolve-email.ts","../../../../libs/auth/src/lib/helpers/resolve-username.ts","../../../../libs/auth/src/lib/helpers/set-http-auth-header.ts","../../../../libs/auth/src/lib/models/auth-environment.ts","../../../../libs/auth/src/lib/auth.interceptor.ts","../../../../libs/auth/src/lib/auth.logger.ts","../../../../libs/auth/src/lib/components/auth-actions/auth-actions.component.ts","../../../../libs/auth/src/lib/components/auth-actions/auth-actions.component.html","../../../../libs/auth/src/lib/components/auth-loading-screen/auth-loading-screen.component.ts","../../../../libs/auth/src/lib/components/auth-loading-screen/auth-loading-screen.component.html","../../../../libs/auth/src/lib/plugins/core-debug.plugin.ts","../../../../libs/auth/src/lib/plugins/core-identity.plugin.ts","../../../../libs/auth/src/lib/plugins/user-profile-link.plugin.ts","../../../../libs/auth/src/lib/auth.providers.ts","../../../../libs/auth/src/lib/models/auth-plugin-manager.ts","../../../../libs/auth/src/lib/models/offline-auth-error-handler.ts","../../../../libs/auth/src/lib/auth.service.ts","../../../../libs/auth/src/lib/helpers/user-language-loader.ts","../../../../libs/auth/src/lib/auth.config.ts","../../../../libs/auth/src/lib/auth.i18n.ts","../../../../libs/auth/src/lib/directives/auth-action.directive.ts","../../../../libs/auth/src/lib/directives/sign-in.directive.ts","../../../../libs/auth/src/lib/directives/sign-out.directive.ts","../../../../libs/auth/src/lib/auth.component.ts","../../../../libs/auth/src/lib/auth.component.html","../../../../libs/auth/src/lib/auth.directive.ts","../../../../libs/auth/src/lib/auth.guard.ts","../../../../libs/auth/src/lib/auth.module.ts","../../../../libs/auth/src/lib/unauth.guard.ts","../../../../libs/auth/src/odx-auth.ts"],"sourcesContent":["import { buildUrl } from '@odx/angular/utils';\nimport { ODX_AUTH_HOSTS } from '../auth.config';\nimport { AuthEnvironment } from '../models';\n\nexport function createAuthHostUrl(environment: AuthEnvironment, ...segments: string[]): string {\n return buildUrl(ODX_AUTH_HOSTS[environment], ...segments);\n}\n","export function createInitials(value?: string | null): string {\n if (!value) return '';\n const parts = value\n .replace(/\\([^()]*\\)/, '')\n .trim()\n .split(' ');\n\n return parts.reduce((initials, curr, index) => {\n if (index === 0 || index === parts.length - 1) {\n initials += curr[0].toUpperCase();\n }\n return initials;\n }, '');\n}\n","import { EnvironmentInjector, inject } from '@angular/core';\nimport { OAuthErrorEvent } from 'angular-oauth2-oidc';\nimport { AuthErrorHandlerFn } from '../auth.config';\n\nexport function handleAuthError(handlers: AuthErrorHandlerFn[]): (error: OAuthErrorEvent) => void {\n const injector = inject(EnvironmentInjector);\n\n return (error) => {\n injector.runInContext(() => {\n for (const handler of handlers) {\n try {\n handler(error);\n break;\n } catch (unhandledError) {\n if (!(unhandledError instanceof OAuthErrorEvent)) throw error;\n continue;\n }\n }\n });\n };\n}\n","import { OAuthEvent } from 'angular-oauth2-oidc';\nimport { filter, Observable, OperatorFunction, switchMap } from 'rxjs';\n\nexport function handleOAuthEvent<T extends OAuthEvent>(type: T['type'], handler: (event: T) => Promise<void>): OperatorFunction<T, void> {\n return (source$: Observable<T>) =>\n source$.pipe(\n filter((event) => event.type === type),\n switchMap((event) => handler(event)),\n );\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveEmail(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['email'])) {\n return claims['email'];\n }\n if (isString(claims['email_address'])) {\n return claims['email_address'];\n }\n if (Array.isArray(claims['emails']) && isString(claims['emails'][0])) {\n return claims['emails'][0];\n }\n return '';\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveUsername(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['firstname']) && isString(claims['lastname'])) {\n return `${claims['firstname']} ${claims['lastname']}`;\n }\n if (isString(claims['given_name']) && isString(claims['family_name'])) {\n return `${claims['given_name']} ${claims['family_name']}`;\n }\n if (isString(claims['name'])) {\n return claims['name'];\n }\n if (isString(claims['displayname'])) {\n return claims['displayname'];\n }\n\n return '';\n}\n","import { HttpRequest } from '@angular/common/http';\nimport { AUTH_HTTP_HEADER } from '../auth.config';\n\nexport function setHttpAuthHeader<R extends HttpRequest<T> | Request, T>(req: R, token?: string | null): R {\n if (!token) return req;\n const header = `Bearer ${token}`;\n if (req instanceof HttpRequest) {\n return req.clone({ headers: req.headers.set(AUTH_HTTP_HEADER, header) }) as R;\n }\n req.headers.set(AUTH_HTTP_HEADER, header);\n\n return req;\n}\n","import { Environment } from '@odx/angular';\n\nexport type AuthEnvironment = (typeof AuthEnvironment)[keyof typeof AuthEnvironment];\nexport const AuthEnvironment = Environment;\n","import { HttpContextToken, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { mergeMap } from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\n\nexport const requireAuthentication = new HttpContextToken<boolean>(() => false);\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n const { allowedUrls, requireSignInForRequests } = injectAuthConfig();\n const isUrlAllowed = allowedUrls.some((allowedUrl) => matchUrl(req.url, allowedUrl));\n if (!isUrlAllowed && !req.context.get(requireAuthentication)) {\n return next(req);\n }\n\n return inject(AuthService).prepareAuthRequest$(req, requireSignInForRequests).pipe(mergeMap(next));\n};\n","import { Logger } from '@odx/angular/internal';\n\nexport default new Logger('@odx/auth');\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ListModule } from '@odx/angular/components/list';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { TranslatePipe } from '@odx/angular/internal/translate';\nimport { injectElement } from '@odx/angular/utils';\n\n@CSSComponent('auth-actions')\n@Component({\n standalone: true,\n selector: 'odx-auth-actions',\n imports: [CoreModule, ListModule, TranslatePipe],\n templateUrl: './auth-actions.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AuthActionsComponent {\n public readonly element = injectElement();\n\n @Input()\n public claims: OdxAuth.IdentiyClaims | null = null;\n}\n","<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n </a>\n</odx-list>\n","import { transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\nimport { fadeOut } from '@odx/angular/animations';\nimport { DynamicViewDirective, DynamicViewRef, DynamicViewService } from '@odx/angular/cdk/dynamic-view';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { CircularProgressComponent } from '@odx/angular/components/circular-progress';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { map } from 'rxjs';\nimport { injectAuthConfig } from '../../auth.config';\nimport { AuthService } from '../../auth.service';\n\n@Component({\n standalone: true,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div.odx-auth-loading-screen',\n imports: [CommonModule, ButtonComponent, IconComponent, LogoDirective, CircularProgressComponent, DynamicViewDirective],\n templateUrl: './auth-loading-screen.component.html',\n styleUrls: ['./auth-loading-screen.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[@hostAnimation]': 'true',\n },\n animations: [trigger('hostAnimation', [transition(':leave', useAnimation(fadeOut()))])],\n})\nexport class AuthLoadingScreenComponent {\n private static instance: DynamicViewRef<typeof AuthLoadingScreenComponent> | null = null;\n\n protected readonly authConfig = injectAuthConfig();\n protected readonly icon$ = inject(AuthService).isRedirecting$.pipe(map((isRedirecting) => (isRedirecting ? 'link-external' : 'user')));\n\n public static initialize(authService: AuthService, dynamicViewService: DynamicViewService): void {\n authService.isLoading$.subscribe((isLoading) => {\n if (isLoading) {\n AuthLoadingScreenComponent.instance ??= dynamicViewService.createView(AuthLoadingScreenComponent);\n } else {\n AuthLoadingScreenComponent.instance?.destroy();\n AuthLoadingScreenComponent.instance = null;\n }\n });\n }\n}\n","<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 <p class=\"odx-auth-loading-screen__message\" *ngIf=\"authConfig.loadingScreenMessage as content\">\n <ng-template [odxDynamicView]=\"content\" />\n </p>\n</div>\n","import { DestroyRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subscription, of } from 'rxjs';\nimport logger from '../auth.logger';\nimport { AuthPluginFactory } from '../models';\n\nexport const coreDebugPlugin: AuthPluginFactory = () => {\n logger.warn('DEBUG MODE ENABLED - DO NOT USE IN PRODUCTION!');\n const destroyRef = inject(DestroyRef);\n let instance: Subscription | null = null;\n\n return (authService) => {\n instance ??= authService.identityClaims$.pipe(takeUntilDestroyed(destroyRef)).subscribe((claims) => {\n logger.info(`User: ${claims?.username} (${claims?.email})`);\n logger.group('Identity claims', (log) => log(claims), false);\n logger.group('Access token', (log) => log(authService.getAccessToken()));\n logger.group('Refresh token', (log) => log(authService.getRefreshToken()));\n logger.group('ID token', (log) => log(authService.getIdToken()));\n });\n\n return of({});\n };\n};\n","import { of } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n email: string;\n initials: string;\n username: string;\n }\n }\n}\n\nexport const coreIdentityPlugin: AuthPluginFactory = () => {\n const { resolveEmail, resolveUsername, createInitials } = injectAuthConfig();\n\n return (authService) => {\n const claims = authService.getRawIdentityClaims();\n if (!claims) return of({});\n const username = resolveUsername(claims);\n\n return of({ email: resolveEmail(claims), username, initials: createInitials(username) });\n };\n};\n","import { of } from 'rxjs';\nimport { ODX_AUTH_USER_PROFILE_HOSTS, injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n userProfileUrl: string;\n }\n }\n}\n\nexport const userProfileUrlPlugin: AuthPluginFactory = () => {\n const { environment, userProfileUrl } = injectAuthConfig();\n return () => {\n return of({ userProfileUrl: userProfileUrl ?? ODX_AUTH_USER_PROFILE_HOSTS[environment] });\n };\n};\n","import { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { APP_INITIALIZER, ENVIRONMENT_INITIALIZER, EnvironmentProviders, InjectionToken, Provider, inject, makeEnvironmentProviders } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { DynamicViewService } from '@odx/angular/cdk/dynamic-view';\nimport { ConfigDependencies, ConfigProvider, buildUrl } from '@odx/angular/utils';\nimport { OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';\nimport { tap } from 'rxjs';\nimport { AuthConfig, AuthErrorHandlerFn, ODX_AUTH_DEFAULT_SCOPES, injectAuthConfig, provideAuthConfig } from './auth.config';\nimport { authInterceptor } from './auth.interceptor';\nimport logger from './auth.logger';\nimport { AuthService } from './auth.service';\nimport { AuthLoadingScreenComponent } from './components';\nimport { createAuthHostUrl, handleAuthError } from './helpers';\nimport { AuthPlugin, AuthPluginErrorHandler, AuthPluginFactory, offlineAuthErrorHandler } from './models';\nimport { coreDebugPlugin, coreIdentityPlugin, userProfileUrlPlugin } from './plugins';\n\nexport const ODX_AUTH_ERROR_HANDLERS = new InjectionToken<AuthErrorHandlerFn[]>('@odx/auth::ErrorHandlers', {\n providedIn: 'root',\n factory: () => {\n const { errorHandler } = injectAuthConfig();\n\n return [offlineAuthErrorHandler, errorHandler];\n },\n});\n\nexport const ODX_AUTH_PLUGINS_ERROR_HANDLER = new InjectionToken<AuthPluginErrorHandler | null>('@odx/auth::PluginsErrorHandler', {\n providedIn: 'root',\n factory: () => injectAuthConfig().pluginsErrorHandler ?? null,\n});\n\nexport const ODX_AUTH_CORE_PLUGINS = new InjectionToken<AuthPluginFactory[]>('@odx/auth::CorePlugins', {\n providedIn: 'root',\n factory: () => {\n const { showDebugInformation } = injectAuthConfig();\n const plugins = [coreIdentityPlugin, userProfileUrlPlugin];\n if (showDebugInformation) {\n plugins.push(coreDebugPlugin);\n }\n\n return plugins;\n },\n});\n\nexport const ODX_AUTH_PLUGINS = new InjectionToken<AuthPlugin[]>('@odx/auth::Plugins', {\n providedIn: 'root',\n factory: () => {\n const { plugins } = injectAuthConfig();\n const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);\n\n return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());\n },\n});\n\nexport function provideAuthLogger(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const { showDebugInformation } = injectAuthConfig();\n if (!showDebugInformation) logger.disable();\n\n return () => void 0;\n },\n multi: true,\n };\n}\n\nexport function initializeAuthErrorHandlers(): void {\n const authService = inject(AuthService);\n const handler = handleAuthError(inject(ODX_AUTH_ERROR_HANDLERS));\n\n authService.errors$.pipe(tap((error) => handler(error))).subscribe();\n}\n\nexport function initalizeAuthConfig(): () => Promise<void> {\n const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl, enableLoadingScreen } = injectAuthConfig();\n const authService = inject(AuthService);\n const redirectUri = buildUrl(inject(WindowRef).getOrigin(), redirectPath);\n const scope = Array.from(new Set(ODX_AUTH_DEFAULT_SCOPES.concat(scopes ?? []))).join(' ');\n if (enableLoadingScreen) {\n AuthLoadingScreenComponent.initialize(authService, inject(DynamicViewService));\n }\n return () =>\n authService.initialize({\n clientId,\n issuer: issuer ?? createAuthHostUrl(environment, 'oauth2/default'),\n scope,\n redirectUri,\n postLogoutRedirectUri: postLogoutRedirectUrl,\n preserveRequestedRoute: true,\n strictDiscoveryDocumentValidation: !discoveryUrl,\n responseType: 'code',\n showDebugInformation: false,\n timeoutFactor,\n waitForTokenInMsec: 1000,\n });\n}\n\nexport function provideAuth<D extends ConfigDependencies>(config: ConfigProvider<Partial<AuthConfig>, D>): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAuthConfig(config),\n provideAuthLogger(),\n provideOAuthClient({ resourceServer: { sendAccessToken: false, allowedUrls: [] } }),\n provideHttpClient(withInterceptors([authInterceptor])),\n {\n provide: APP_INITIALIZER,\n useFactory: initalizeAuthConfig,\n multi: true,\n },\n {\n provide: OAuthStorage,\n useFactory: () => injectAuthConfig().storage ?? inject(WindowRef).nativeWindow.localStorage,\n },\n ]);\n}\n","import { inject, Injectable } from '@angular/core';\nimport { isNumber } from '@odx/angular/utils';\nimport { deepmerge } from 'deepmerge-ts';\nimport { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, filter, map, Observable, of, share, switchMap, take, tap, timeout } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { ODX_AUTH_PLUGINS, ODX_AUTH_PLUGINS_ERROR_HANDLER } from '../auth.providers';\nimport { AuthService } from '../auth.service';\n\nexport type AuthPlugin = (authService: AuthService) => Observable<Partial<OdxAuth.AuthPluginResult>>;\nexport type AuthPluginFactory = () => AuthPlugin;\nexport type AuthPluginError = unknown;\nexport type AuthPluginErrorHandler = (error: AuthPluginError) => void;\n\n@Injectable({ providedIn: 'root' })\nexport class AuthPluginManager {\n private readonly authConfig = injectAuthConfig();\n private readonly pluginsErrorHandler = inject(ODX_AUTH_PLUGINS_ERROR_HANDLER, { optional: true });\n private readonly plugins = inject(ODX_AUTH_PLUGINS);\n private readonly result$$ = new BehaviorSubject<OdxAuth.AuthPluginResult | null>(null);\n\n public readonly pluginsReady$ = this.result$$.pipe(filter(Boolean), map(Boolean), distinctUntilChanged(), share());\n public readonly pluginsLoading$ = this.result$$.pipe(\n map((result) => !result),\n distinctUntilChanged(),\n share(),\n );\n\n public runPlugins(authService: AuthService): Observable<OdxAuth.AuthPluginResult> {\n if (this.plugins.length < 1) {\n return of({} as OdxAuth.AuthPluginResult);\n }\n return authService.waitForAccessToken$(false).pipe(\n switchMap((token) => {\n if (!token) return of([{}]);\n return combineLatest(this.plugins.map((plugin) => this.runPlugin(authService, plugin)));\n }),\n map((results) => deepmerge(...results) as OdxAuth.AuthPluginResult),\n tap((result) => this.result$$.next(result)),\n take(1),\n );\n }\n\n public getResult(): OdxAuth.AuthPluginResult {\n return this.result$$.getValue() ?? ({} as OdxAuth.AuthPluginResult);\n }\n\n private handlePluginError(error?: unknown): Observable<OdxAuth.AuthPluginResult> {\n try {\n this.pluginsErrorHandler?.(error);\n } catch {\n //\n }\n\n return of({} as OdxAuth.AuthPluginResult);\n }\n\n private runPlugin(authService: AuthService, plugin: AuthPlugin): ReturnType<AuthPlugin> {\n return plugin(authService).pipe(\n isNumber(this.authConfig.pluginTimeout) ? timeout(Math.max(0, this.authConfig.pluginTimeout)) : tap(),\n catchError((error) => this.handlePluginError(error)),\n );\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { AuthErrorHandlerFn } from '../auth.config';\n\nexport const offlineAuthErrorHandler: AuthErrorHandlerFn = (error) => {\n if (error.type === 'discovery_document_load_error' && (error.reason as HttpErrorResponse)?.status === 504) {\n return;\n }\n throw error;\n};\n","import { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { AuthConfig, OAuthErrorEvent, OAuthService, TokenResponse } from 'angular-oauth2-oidc';\nimport { deepmerge } from 'deepmerge-ts';\nimport {\n BehaviorSubject,\n Observable,\n catchError,\n combineLatest,\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n of,\n share,\n shareReplay,\n startWith,\n switchMap,\n take,\n tap,\n timeout,\n} from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { setHttpAuthHeader } from './helpers';\nimport { AuthPluginManager, AuthorizedHandler } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly authConfig = injectAuthConfig();\n private readonly authPluginManager = inject(AuthPluginManager);\n private readonly oauthService = inject(OAuthService);\n private readonly router = inject(Router);\n private readonly windowRef = inject(WindowRef);\n\n private readonly isInitialized$$ = new BehaviorSubject(false);\n private readonly isRedirecting$$ = new BehaviorSubject(false);\n private readonly onAccessTokenUpdate$ = fromEvent<StorageEvent>(this.windowRef.nativeWindow, 'storage').pipe(\n filter(({ key }) => key === 'access_token' || key === null),\n startWith(null),\n share(),\n );\n private readonly silentRefreshHandler$ = this.isInitialized$$.pipe(\n filter(Boolean),\n switchMap(() => this.windowRef.isOnline$),\n tap((isOnline) => this.updateSilentRefresh(isOnline)),\n );\n private readonly onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);\n\n public readonly isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());\n public readonly isRedirecting$ = this.isRedirecting$$.pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));\n public readonly isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());\n public readonly isAuthenticated$ = this.isInitialized$.pipe(\n switchMap(() => this.authPluginManager.pluginsReady$),\n switchMap(() => this.onAuthStateChange$),\n map(() => this.isAuthenticated()),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly identityClaims$ = this.isAuthenticated$.pipe(\n map(() => this.getIdentityClaims()),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly errors$ = this.oauthService.events.pipe(\n filter((event): event is OAuthErrorEvent => event instanceof OAuthErrorEvent),\n share(),\n );\n public readonly onTokenReceived$ = this.oauthService.events.pipe(\n filter((event) => event.type === 'token_received'),\n share(),\n );\n\n constructor() {\n this.runPlugins();\n this.silentRefreshHandler$.subscribe();\n }\n\n public async initialize(config: AuthConfig): Promise<void> {\n this.assertAudience(config.clientId);\n this.oauthService.configure({ ...config, openUri: this.redirectToLogin.bind(this) });\n try {\n await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);\n await this.oauthService.tryLogin();\n if (this.authConfig.refreshTokenOnInit) {\n await this.tryRefreshToken();\n }\n } catch (error) {\n if (!(error instanceof HttpErrorResponse || error instanceof OAuthErrorEvent)) {\n throw error;\n }\n if (error.type === 'token_refresh_error' || (error instanceof HttpErrorResponse && (error.status === 401 || error.status === 400))) {\n this.signOut(true);\n this.signIn(this.windowRef.location.pathname);\n }\n }\n this.isInitialized$$.next(true);\n if (this.authConfig.requireSignIn && !this.isAuthenticated()) {\n this.signIn(this.windowRef.location.pathname);\n }\n await this.tryLoadUserProfile();\n await this.routeToRequestedUrl();\n }\n\n public runPlugins(): void {\n this.authPluginManager.runPlugins(this).subscribe();\n }\n\n public getIssuer(): URL {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new URL(this.oauthService.issuer!);\n }\n\n public signIn(url?: string): void {\n this.oauthService.initLoginFlow(url);\n }\n\n public signOut(noRedirect?: boolean): void {\n this.oauthService.logOut(noRedirect || !this.getAccessToken());\n }\n\n public async refreshTokens(): Promise<TokenResponse> {\n return this.oauthService.refreshToken();\n }\n\n public getAccessToken(): string | null {\n return this.oauthService.getAccessToken() ?? null;\n }\n\n public getRefreshToken(): string | null {\n return this.oauthService.getRefreshToken() ?? null;\n }\n\n public getIdToken(): string | null {\n return this.oauthService.getIdToken() ?? null;\n }\n\n public getIdentityClaims(): OdxAuth.IdentiyClaims | null {\n if (!this.getIdToken()) return null;\n return deepmerge(this.oauthService.getIdentityClaims(), this.authPluginManager.getResult()) as OdxAuth.IdentiyClaims;\n }\n\n public getRawIdentityClaims(): OdxAuth.RawIdentityClaims | null {\n if (!this.getIdToken()) return null;\n return this.oauthService.getIdentityClaims();\n }\n\n public isAuthenticated(): boolean {\n if (this.windowRef.isOnline()) {\n return this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken();\n }\n return this.hasValidOfflineToken();\n }\n\n public isAuthorized(authorizedHandler?: AuthorizedHandler | null): boolean {\n const handler = authorizedHandler ?? this.authConfig.defaultAuthorizedHandler;\n\n return this.isAuthenticated() && (handler?.(this.getIdentityClaims(), this, this.router) ?? true);\n }\n\n public isAuthorized$(authorizedHandler?: AuthorizedHandler | null): Observable<boolean> {\n return this.isAuthenticated$.pipe(map(() => this.isAuthorized(authorizedHandler)));\n }\n\n public prepareAuthRequest$<R extends HttpRequest<T> | Request, T>(req: R, requireSignIn = false): Observable<R> {\n return this.waitForAccessToken$(requireSignIn).pipe(map((token) => setHttpAuthHeader(req, token)));\n }\n\n public waitForAccessToken$(requireSignIn: boolean): Observable<string | null> {\n const accessToken$ = of(this.getAccessToken()).pipe(filter((token) => !!token && this.isAuthenticated()));\n const waitForAccessToken$ = this.onTokenReceived$.pipe(\n timeout(this.authConfig.waitForTokenInMs ?? 0),\n catchError(async () => this.tryRefreshToken().catch(() => null)),\n );\n\n return this.isInitialized$.pipe(\n switchMap(() => merge(accessToken$, waitForAccessToken$)),\n take(1),\n map(() => this.getAccessToken()),\n tap((token) => !token && requireSignIn && this.signIn(this.windowRef.location.pathname)),\n );\n }\n\n private async routeToRequestedUrl(): Promise<void> {\n if (!this.oauthService.state || !this.oauthService.hasValidAccessToken()) return;\n await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));\n }\n\n private hasValidOfflineToken(): boolean {\n const issuedAt = this.getIdentityClaims()?.iat ?? 0;\n\n return Date.now() - issuedAt * 1000 <= this.authConfig.maxOfflineTime * 1000;\n }\n\n private redirectToLogin(uri: string): void {\n this.windowRef.location.assign(uri);\n this.isRedirecting$$.next(true);\n }\n\n private async tryLoadUserProfile(): Promise<void> {\n if (!this.authConfig.loadUserProfile || !this.isAuthenticated()) return;\n await this.oauthService.loadUserProfile().catch(() => null);\n }\n\n private async tryRefreshToken(): Promise<void> {\n if (!this.getRefreshToken()) return;\n await this.oauthService.refreshToken();\n }\n\n private assertAudience(clientId?: string | null): void {\n const tokenClientId = this.getIdentityClaims()?.aud;\n if (!clientId || !tokenClientId || clientId === tokenClientId) return;\n this.signOut(true);\n }\n\n private updateSilentRefresh(enabled: boolean) {\n if (enabled) {\n this.oauthService.setupAutomaticSilentRefresh();\n } else {\n this.oauthService.stopAutomaticRefresh();\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { LanguageLoaderFn } from '@odx/angular/localization';\nimport { isNonEmptyString } from '@odx/angular/utils';\nimport { map } from 'rxjs';\nimport { AuthService } from '../auth.service';\n\ntype LanguageSelector = (claims?: OdxAuth.IdentiyClaims | null) => string | null | undefined;\n\nexport function userLanguageLoader(languageSelector: LanguageSelector = (claims) => claims?.preferredLanguage): LanguageLoaderFn {\n return () => {\n return inject(AuthService).identityClaims$.pipe(\n map(languageSelector),\n map((value) => (isNonEmptyString(value) ? value : undefined)),\n );\n };\n}\n","import { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';\nimport { createInitials, resolveEmail, resolveUsername } from './helpers';\n\nimport { AuthEnvironment, AuthorizedHandler, AuthPluginFactory } from './models';\n\nexport const AUTH_HTTP_HEADER = 'Authorization';\nexport const ODX_AUTH_DEFAULT_SCOPES = ['openid', 'profile', 'email', 'offline_access'];\nexport const ODX_AUTH_HOSTS: Record<AuthEnvironment, string> = {\n dev: 'https://dev.login.draeger.com',\n stage: 'https://test.login.draeger.com',\n prod: 'https://login.draeger.com',\n};\nexport const ODX_AUTH_USER_PROFILE_HOSTS: Record<AuthEnvironment, string> = {\n dev: 'https://lemon-ocean-04a922703.3.azurestaticapps.net',\n stage: 'https://purple-cliff-0e61c5703.3.azurestaticapps.net',\n prod: 'https://id.draeger.com',\n};\n\nexport type AuthErrorHandlerFn = (error: OAuthErrorEvent) => void;\nexport type ResolveUsernameFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type ResolveEmailFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type CreateInitialsFn = (value: string) => string;\n\nexport interface AuthConfig {\n environment: AuthEnvironment;\n clientId?: string;\n issuer?: string;\n redirectPath: string;\n allowedUrls: Array<string | RegExp>;\n timeoutFactor: number;\n maxOfflineTime: number;\n loadUserProfile: boolean;\n postLogoutRedirectUrl?: string;\n scopes?: string[];\n discoveryUrl?: string;\n errorHandler: AuthErrorHandlerFn;\n createInitials: CreateInitialsFn;\n resolveEmail: ResolveEmailFn;\n resolveUsername: ResolveUsernameFn;\n storage?: OAuthStorage;\n plugins: AuthPluginFactory[];\n pluginsErrorHandler?: (error: unknown) => void;\n defaultAuthorizedHandler?: AuthorizedHandler | null;\n enableLoadingScreen: boolean;\n refreshTokenOnInit?: boolean;\n loadingScreenMessage?: DynamicTextContent | null;\n userProfileUrl?: string;\n requireSignIn?: boolean;\n requireSignInForRequests?: boolean;\n waitForTokenInMs?: number;\n showDebugInformation?: boolean;\n pluginTimeout?: number;\n}\n\nexport const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {\n environment: 'prod',\n redirectPath: 'login/callback',\n allowedUrls: [],\n timeoutFactor: 0.75,\n maxOfflineTime: 24 * 60 * 60, // 1 day\n loadUserProfile: false,\n errorHandler: (error) => {\n throw error;\n },\n createInitials,\n resolveEmail,\n resolveUsername,\n plugins: [],\n defaultAuthorizedHandler: null,\n enableLoadingScreen: true,\n loadingScreenMessage: null,\n waitForTokenInMs: 1000,\n} as AuthConfig);\n","import { TranslationObject } from '@odx/angular/internal/translate';\n\nexport default {\n en: {\n userProfileLink: 'My profile',\n signInButtonText: 'Sign in',\n signOutButtonText: 'Sign out',\n },\n de: {\n userProfileLink: 'Mein Profil',\n signInButtonText: 'Einloggen',\n signOutButtonText: 'Ausloggen',\n },\n} as TranslationObject;\n","import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from '../auth.service';\n\n@Directive()\nexport abstract class AuthActionDirective implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly loadingSpinnerDirective = inject(LoadingSpinnerDirective, { self: true });\n protected readonly authService = inject(AuthService);\n\n public ngAfterViewInit(): void {\n this.loadingSpinnerDirective.autoColor = true;\n this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe((isRedirecting) => {\n this.loadingSpinnerDirective.isLoading = isRedirecting;\n });\n }\n\n protected abstract handleClick(): void;\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignIn]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignInDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignIn')\n public afterSignIn = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signIn();\n this.afterSignIn.next();\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignOut]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignOutDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignOut')\n public afterSignOut = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signOut();\n this.afterSignOut.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { AreaHeaderModule } from '@odx/angular/components/area-header';\nimport { DropdownModule, DropdownOptions } from '@odx/angular/components/dropdown';\nimport { HeaderModule } from '@odx/angular/components/header';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { provideTranslations, TranslatePipe } from '@odx/angular/internal/translate';\nimport { Position } from '@odx/angular/utils';\nimport { injectAuthConfig } from './auth.config';\nimport translations from './auth.i18n';\nimport { AuthService } from './auth.service';\nimport { AuthActionsComponent } from './components';\nimport { SignInDirective, SignOutDirective } from './directives';\n\n@Component({\n standalone: true,\n selector: 'odx-auth',\n imports: [\n CoreModule,\n AreaHeaderModule,\n DropdownModule,\n HeaderModule,\n LogoDirective,\n SignInDirective,\n SignOutDirective,\n LoadingSpinnerModule,\n AuthActionsComponent,\n TranslatePipe,\n ],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [provideTranslations(translations)],\n})\nexport class AuthComponent {\n protected readonly authConfig = injectAuthConfig();\n protected readonly authService = inject(AuthService);\n protected readonly dropdownOptions = {\n position: Position.BOTTOM_END,\n enableFallback: false,\n containerClass: 'odx-auth-user-profile',\n } as Partial<DropdownOptions>;\n}\n","<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\n </button>\n <ng-template #userProfileMenu>\n <odx-area-header class=\"odx-padding-x-12\" size=\"small\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\" ngProjectAs=\"odx-avatar\"></ng-template>\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></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></odx-icon>\n </button>\n </div>\n </ng-template>\n </ng-template>\n <ng-template #notAuthenticated>\n <button class=\"odx-auth-sign-in\" odxButton odxAuthSignIn variant=\"secondary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ 'signInButtonText' | odxTranslate | async }}\n </button>\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-template>\n</odx-action-group>\n","import { NgIf, NgIfContext } from '@angular/common';\nimport { AfterViewInit, Directive, inject, Input, TemplateRef } from '@angular/core';\nimport { isString, untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuth]',\n hostDirectives: [NgIf],\n})\nexport class AuthDirective implements AfterViewInit {\n private readonly authService = inject(AuthService);\n private readonly ngIfDirective = inject(NgIf, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n @Input('odxAuth')\n public authorizationHandler?: AuthorizedHandler | null | string = null;\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('odxAuthElse')\n public set elseTemplate(value: TemplateRef<NgIfContext<unknown>>) {\n this.ngIfDirective.ngIfElse = value;\n }\n\n public ngAfterViewInit(): void {\n this.authService.identityClaims$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;\n this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { isString } from '@odx/angular/utils';\nimport { EMPTY, of, switchMap, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function authGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string, isExternal = false): CanActivateFn {\n return (_, state) => {\n const authService = inject(AuthService);\n const windowRef = inject(WindowRef);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n switchMap((isAuthenticated) => {\n if (!isAuthenticated) {\n authService.signIn(state.url);\n\n return EMPTY;\n }\n return of(authService.isAuthorized(authorizedHandler));\n }),\n tap((isAuthorized) => {\n if (isAuthorized || !router) return;\n if (isString(redirectTo)) {\n if (isExternal) {\n windowRef.location.assign(redirectTo);\n } else {\n router.navigateByUrl(redirectTo);\n }\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","import { NgModule } from '@angular/core';\nimport { AuthComponent } from './auth.component';\nimport { AuthDirective } from './auth.directive';\nimport { SignInDirective, SignOutDirective } from './directives';\n\nconst modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];\n\n@NgModule({\n imports: [...modules],\n exports: [...modules],\n})\nexport class AuthModule {}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function unauthGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string, isExternal = false): CanActivateFn {\n return (_) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n const windowRef = inject(WindowRef);\n\n return authService.isAuthenticated$.pipe(\n map(() => !authService.isAuthorized(authorizedHandler)),\n tap((isUnauthorized) => {\n if (isUnauthorized || !router) return;\n if (isString(redirectTo)) {\n if (isExternal) {\n windowRef.location.assign(redirectTo);\n } else {\n router.navigateByUrl(redirectTo);\n }\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-auth.mjs","sources":["../../../../libs/auth/src/lib/helpers/create-auth-host-url.ts","../../../../libs/auth/src/lib/helpers/create-inititals.ts","../../../../libs/auth/src/lib/helpers/handle-auth-error.ts","../../../../libs/auth/src/lib/helpers/handle-oauth-event.ts","../../../../libs/auth/src/lib/helpers/resolve-email.ts","../../../../libs/auth/src/lib/helpers/resolve-username.ts","../../../../libs/auth/src/lib/helpers/set-http-auth-header.ts","../../../../libs/auth/src/lib/models/auth-environment.ts","../../../../libs/auth/src/lib/auth.interceptor.ts","../../../../libs/auth/src/lib/auth.logger.ts","../../../../libs/auth/src/lib/components/auth-actions/auth-actions.component.ts","../../../../libs/auth/src/lib/components/auth-actions/auth-actions.component.html","../../../../libs/auth/src/lib/components/auth-loading-screen/auth-loading-screen.component.ts","../../../../libs/auth/src/lib/components/auth-loading-screen/auth-loading-screen.component.html","../../../../libs/auth/src/lib/plugins/core-debug.plugin.ts","../../../../libs/auth/src/lib/plugins/core-identity.plugin.ts","../../../../libs/auth/src/lib/plugins/user-profile-link.plugin.ts","../../../../libs/auth/src/lib/auth.providers.ts","../../../../libs/auth/src/lib/models/auth-plugin-manager.ts","../../../../libs/auth/src/lib/models/offline-auth-error-handler.ts","../../../../libs/auth/src/lib/auth.service.ts","../../../../libs/auth/src/lib/helpers/user-language-loader.ts","../../../../libs/auth/src/lib/auth.config.ts","../../../../libs/auth/src/lib/auth.i18n.ts","../../../../libs/auth/src/lib/directives/auth-action.directive.ts","../../../../libs/auth/src/lib/directives/sign-in.directive.ts","../../../../libs/auth/src/lib/directives/sign-out.directive.ts","../../../../libs/auth/src/lib/auth.component.ts","../../../../libs/auth/src/lib/auth.component.html","../../../../libs/auth/src/lib/auth.directive.ts","../../../../libs/auth/src/lib/auth.guard.ts","../../../../libs/auth/src/lib/auth.module.ts","../../../../libs/auth/src/lib/unauth.guard.ts","../../../../libs/auth/src/odx-auth.ts"],"sourcesContent":["import { buildUrl } from '@odx/angular/utils';\nimport { ODX_AUTH_HOSTS } from '../auth.config';\nimport { AuthEnvironment } from '../models';\n\nexport function createAuthHostUrl(environment: AuthEnvironment, ...segments: string[]): string {\n return buildUrl(ODX_AUTH_HOSTS[environment], ...segments);\n}\n","export function createInitials(value?: string | null): string {\n if (!value) return '';\n const parts = value\n .replace(/\\([^()]*\\)/, '')\n .trim()\n .split(' ');\n\n return parts.reduce((initials, curr, index) => {\n if (index === 0 || index === parts.length - 1) {\n initials += curr[0].toUpperCase();\n }\n return initials;\n }, '');\n}\n","import { EnvironmentInjector, inject } from '@angular/core';\nimport { OAuthErrorEvent } from 'angular-oauth2-oidc';\nimport { AuthErrorHandlerFn } from '../auth.config';\n\nexport function handleAuthError(handlers: AuthErrorHandlerFn[]): (error: OAuthErrorEvent) => void {\n const injector = inject(EnvironmentInjector);\n\n return (error) => {\n injector.runInContext(() => {\n for (const handler of handlers) {\n try {\n handler(error);\n break;\n } catch (unhandledError) {\n if (!(unhandledError instanceof OAuthErrorEvent)) throw error;\n continue;\n }\n }\n });\n };\n}\n","import { OAuthEvent } from 'angular-oauth2-oidc';\nimport { filter, Observable, OperatorFunction, switchMap } from 'rxjs';\n\nexport function handleOAuthEvent<T extends OAuthEvent>(type: T['type'], handler: (event: T) => Promise<void>): OperatorFunction<T, void> {\n return (source$: Observable<T>) =>\n source$.pipe(\n filter((event) => event.type === type),\n switchMap((event) => handler(event)),\n );\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveEmail(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['email'])) {\n return claims['email'];\n }\n if (isString(claims['email_address'])) {\n return claims['email_address'];\n }\n if (Array.isArray(claims['emails']) && isString(claims['emails'][0])) {\n return claims['emails'][0];\n }\n return '';\n}\n","import { isString } from '@odx/angular/utils';\n\nexport function resolveUsername(claims: OdxAuth.RawIdentityClaims): string {\n if (isString(claims['firstname']) && isString(claims['lastname'])) {\n return `${claims['firstname']} ${claims['lastname']}`;\n }\n if (isString(claims['given_name']) && isString(claims['family_name'])) {\n return `${claims['given_name']} ${claims['family_name']}`;\n }\n if (isString(claims['name'])) {\n return claims['name'];\n }\n if (isString(claims['displayname'])) {\n return claims['displayname'];\n }\n\n return '';\n}\n","import { HttpRequest } from '@angular/common/http';\nimport { AUTH_HTTP_HEADER } from '../auth.config';\n\nexport function setHttpAuthHeader<R extends HttpRequest<T> | Request, T>(req: R, token?: string | null): R {\n if (!token) return req;\n const header = `Bearer ${token}`;\n if (req instanceof HttpRequest) {\n return req.clone({ headers: req.headers.set(AUTH_HTTP_HEADER, header) }) as R;\n }\n req.headers.set(AUTH_HTTP_HEADER, header);\n\n return req;\n}\n","import { Environment } from '@odx/angular';\n\nexport type AuthEnvironment = (typeof AuthEnvironment)[keyof typeof AuthEnvironment];\nexport const AuthEnvironment = Environment;\n","import { HttpContextToken, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { matchUrl } from '@odx/angular/utils';\nimport { mergeMap } from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { AuthService } from './auth.service';\n\nexport const requireAuthentication = new HttpContextToken<boolean>(() => false);\n\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\n const { allowedUrls, requireSignInForRequests } = injectAuthConfig();\n const isUrlAllowed = allowedUrls.some((allowedUrl) => matchUrl(req.url, allowedUrl));\n if (!isUrlAllowed && !req.context.get(requireAuthentication)) {\n return next(req);\n }\n\n return inject(AuthService).prepareAuthRequest$(req, requireSignInForRequests).pipe(mergeMap(next));\n};\n","import { Logger } from '@odx/angular/internal';\n\nexport default new Logger('@odx/auth');\n","import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { ListModule } from '@odx/angular/components/list';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { TranslatePipe } from '@odx/angular/internal/translate';\nimport { injectElement } from '@odx/angular/utils';\n\n@CSSComponent('auth-actions')\n@Component({\n standalone: true,\n selector: 'odx-auth-actions',\n imports: [CoreModule, ListModule, TranslatePipe],\n templateUrl: './auth-actions.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AuthActionsComponent {\n public readonly element = injectElement();\n\n @Input()\n public claims: OdxAuth.IdentiyClaims | null = null;\n}\n","<odx-list>\n <a data-testid=\"odx-auth-user-profile-link\" odxListItem [href]=\"url\" rel=\"noopener\" target=\"_blank\" *ngIf=\"claims?.userProfileUrl as url\">\n <odx-icon name=\"user-administration\" iconSet=\"core\" odxListItemPrefix></odx-icon>\n {{ 'userProfileLink' | odxTranslate | async }}\n <odx-icon name=\"link-external\" iconSet=\"core\" size=\"small\" odxListItemSuffix></odx-icon>\n </a>\n</odx-list>\n","import { transition, trigger, useAnimation } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\nimport { fadeOut } from '@odx/angular/animations';\nimport { DynamicViewDirective, DynamicViewRef, DynamicViewService } from '@odx/angular/cdk/dynamic-view';\nimport { ButtonComponent } from '@odx/angular/components/button';\nimport { CircularProgressComponent } from '@odx/angular/components/circular-progress';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { map } from 'rxjs';\nimport { injectAuthConfig } from '../../auth.config';\nimport { AuthService } from '../../auth.service';\n\n@Component({\n standalone: true,\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'div.odx-auth-loading-screen',\n imports: [CommonModule, ButtonComponent, IconComponent, LogoDirective, CircularProgressComponent, DynamicViewDirective],\n templateUrl: './auth-loading-screen.component.html',\n styleUrls: ['./auth-loading-screen.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[@hostAnimation]': 'true',\n },\n animations: [trigger('hostAnimation', [transition(':leave', useAnimation(fadeOut()))])],\n})\nexport class AuthLoadingScreenComponent {\n private static instance: DynamicViewRef<typeof AuthLoadingScreenComponent> | null = null;\n\n protected readonly authConfig = injectAuthConfig();\n protected readonly icon$ = inject(AuthService).isRedirecting$.pipe(map((isRedirecting) => (isRedirecting ? 'link-external' : 'user')));\n\n public static initialize(authService: AuthService, dynamicViewService: DynamicViewService): void {\n authService.isLoading$.subscribe((isLoading) => {\n if (isLoading) {\n AuthLoadingScreenComponent.instance ??= dynamicViewService.createView(AuthLoadingScreenComponent);\n } else {\n AuthLoadingScreenComponent.instance?.destroy();\n AuthLoadingScreenComponent.instance = null;\n }\n });\n }\n}\n","<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 <p class=\"odx-auth-loading-screen__message\" *ngIf=\"authConfig.loadingScreenMessage as content\">\n <ng-template [odxDynamicView]=\"content\" />\n </p>\n</div>\n","import { DestroyRef, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subscription, of } from 'rxjs';\nimport logger from '../auth.logger';\nimport { AuthPluginFactory } from '../models';\n\nexport const coreDebugPlugin: AuthPluginFactory = () => {\n logger.warn('DEBUG MODE ENABLED - DO NOT USE IN PRODUCTION!');\n const destroyRef = inject(DestroyRef);\n let instance: Subscription | null = null;\n\n return (authService) => {\n instance ??= authService.identityClaims$.pipe(takeUntilDestroyed(destroyRef)).subscribe((claims) => {\n logger.info(`User: ${claims?.username} (${claims?.email})`);\n logger.group('Identity claims', (log) => log(claims), false);\n logger.group('Access token', (log) => log(authService.getAccessToken()));\n logger.group('Refresh token', (log) => log(authService.getRefreshToken()));\n logger.group('ID token', (log) => log(authService.getIdToken()));\n });\n\n return of({});\n };\n};\n","import { of } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n email: string;\n initials: string;\n username: string;\n }\n }\n}\n\nexport const coreIdentityPlugin: AuthPluginFactory = () => {\n const { resolveEmail, resolveUsername, createInitials } = injectAuthConfig();\n\n return (authService) => {\n const claims = authService.getRawIdentityClaims();\n if (!claims) return of({});\n const username = resolveUsername(claims);\n\n return of({ email: resolveEmail(claims), username, initials: createInitials(username) });\n };\n};\n","import { of } from 'rxjs';\nimport { ODX_AUTH_USER_PROFILE_HOSTS, injectAuthConfig } from '../auth.config';\nimport { AuthPluginFactory } from '../models';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace OdxAuth {\n interface AuthPluginResult {\n userProfileUrl: string;\n }\n }\n}\n\nexport const userProfileUrlPlugin: AuthPluginFactory = () => {\n const { environment, userProfileUrl } = injectAuthConfig();\n return () => {\n return of({ userProfileUrl: userProfileUrl ?? ODX_AUTH_USER_PROFILE_HOSTS[environment] });\n };\n};\n","import { provideHttpClient, withInterceptors } from '@angular/common/http';\nimport { APP_INITIALIZER, ENVIRONMENT_INITIALIZER, EnvironmentProviders, InjectionToken, Provider, inject, makeEnvironmentProviders } from '@angular/core';\nimport { WindowRef } from '@odx/angular';\nimport { DynamicViewService } from '@odx/angular/cdk/dynamic-view';\nimport { ConfigDependencies, ConfigProvider, buildUrl } from '@odx/angular/utils';\nimport { OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';\nimport { tap } from 'rxjs';\nimport { AuthConfig, AuthErrorHandlerFn, ODX_AUTH_DEFAULT_SCOPES, injectAuthConfig, provideAuthConfig } from './auth.config';\nimport { authInterceptor } from './auth.interceptor';\nimport logger from './auth.logger';\nimport { AuthService } from './auth.service';\nimport { AuthLoadingScreenComponent } from './components';\nimport { createAuthHostUrl, handleAuthError } from './helpers';\nimport { AuthPlugin, AuthPluginErrorHandler, AuthPluginFactory, offlineAuthErrorHandler } from './models';\nimport { coreDebugPlugin, coreIdentityPlugin, userProfileUrlPlugin } from './plugins';\n\nexport const ODX_AUTH_ERROR_HANDLERS = new InjectionToken<AuthErrorHandlerFn[]>('@odx/auth::ErrorHandlers', {\n providedIn: 'root',\n factory: () => {\n const { errorHandler } = injectAuthConfig();\n\n return [offlineAuthErrorHandler, errorHandler];\n },\n});\n\nexport const ODX_AUTH_PLUGINS_ERROR_HANDLER = new InjectionToken<AuthPluginErrorHandler | null>('@odx/auth::PluginsErrorHandler', {\n providedIn: 'root',\n factory: () => injectAuthConfig().pluginsErrorHandler ?? null,\n});\n\nexport const ODX_AUTH_CORE_PLUGINS = new InjectionToken<AuthPluginFactory[]>('@odx/auth::CorePlugins', {\n providedIn: 'root',\n factory: () => {\n const { showDebugInformation } = injectAuthConfig();\n const plugins = [coreIdentityPlugin, userProfileUrlPlugin];\n if (showDebugInformation) {\n plugins.push(coreDebugPlugin);\n }\n\n return plugins;\n },\n});\n\nexport const ODX_AUTH_PLUGINS = new InjectionToken<AuthPlugin[]>('@odx/auth::Plugins', {\n providedIn: 'root',\n factory: () => {\n const { plugins } = injectAuthConfig();\n const corePlugins = inject(ODX_AUTH_CORE_PLUGINS);\n\n return [...corePlugins, ...plugins].map((pluginFactory) => pluginFactory());\n },\n});\n\nexport function provideAuthLogger(): Provider {\n return {\n provide: ENVIRONMENT_INITIALIZER,\n useFactory: () => {\n const { showDebugInformation } = injectAuthConfig();\n if (!showDebugInformation) logger.disable();\n\n return () => void 0;\n },\n multi: true,\n };\n}\n\nexport function initializeAuthErrorHandlers(): void {\n const authService = inject(AuthService);\n const handler = handleAuthError(inject(ODX_AUTH_ERROR_HANDLERS));\n\n authService.errors$.pipe(tap((error) => handler(error))).subscribe();\n}\n\nexport function initalizeAuthConfig(): () => Promise<void> {\n const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl, enableLoadingScreen } = injectAuthConfig();\n const authService = inject(AuthService);\n const redirectUri = buildUrl(inject(WindowRef).getOrigin(), redirectPath);\n const scope = Array.from(new Set(ODX_AUTH_DEFAULT_SCOPES.concat(scopes ?? []))).join(' ');\n if (enableLoadingScreen) {\n AuthLoadingScreenComponent.initialize(authService, inject(DynamicViewService));\n }\n return () =>\n authService.initialize({\n clientId,\n issuer: issuer ?? createAuthHostUrl(environment, 'oauth2/default'),\n scope,\n redirectUri,\n postLogoutRedirectUri: postLogoutRedirectUrl,\n preserveRequestedRoute: true,\n strictDiscoveryDocumentValidation: !discoveryUrl,\n responseType: 'code',\n showDebugInformation: false,\n timeoutFactor,\n waitForTokenInMsec: 1000,\n });\n}\n\nexport function provideAuth<D extends ConfigDependencies>(config: ConfigProvider<Partial<AuthConfig>, D>): EnvironmentProviders {\n return makeEnvironmentProviders([\n provideAuthConfig(config),\n provideAuthLogger(),\n provideOAuthClient({ resourceServer: { sendAccessToken: false, allowedUrls: [] } }),\n provideHttpClient(withInterceptors([authInterceptor])),\n {\n provide: APP_INITIALIZER,\n useFactory: initalizeAuthConfig,\n multi: true,\n },\n {\n provide: OAuthStorage,\n useFactory: () => injectAuthConfig().storage ?? inject(WindowRef).nativeWindow.localStorage,\n },\n ]);\n}\n","import { inject, Injectable } from '@angular/core';\nimport { isNumber } from '@odx/angular/utils';\nimport { deepmerge } from 'deepmerge-ts';\nimport { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, filter, map, Observable, of, share, switchMap, take, tap, timeout } from 'rxjs';\nimport { injectAuthConfig } from '../auth.config';\nimport { ODX_AUTH_PLUGINS, ODX_AUTH_PLUGINS_ERROR_HANDLER } from '../auth.providers';\nimport { AuthService } from '../auth.service';\n\nexport type AuthPlugin = (authService: AuthService) => Observable<Partial<OdxAuth.AuthPluginResult>>;\nexport type AuthPluginFactory = () => AuthPlugin;\nexport type AuthPluginError = unknown;\nexport type AuthPluginErrorHandler = (error: AuthPluginError) => void;\n\n@Injectable({ providedIn: 'root' })\nexport class AuthPluginManager {\n private readonly authConfig = injectAuthConfig();\n private readonly pluginsErrorHandler = inject(ODX_AUTH_PLUGINS_ERROR_HANDLER, { optional: true });\n private readonly plugins = inject(ODX_AUTH_PLUGINS);\n private readonly result$$ = new BehaviorSubject<OdxAuth.AuthPluginResult | null>(null);\n\n public readonly pluginsReady$ = this.result$$.pipe(filter(Boolean), map(Boolean), distinctUntilChanged(), share());\n public readonly pluginsLoading$ = this.result$$.pipe(\n map((result) => !result),\n distinctUntilChanged(),\n share(),\n );\n\n public runPlugins(authService: AuthService): Observable<OdxAuth.AuthPluginResult> {\n if (this.plugins.length < 1) {\n return of({} as OdxAuth.AuthPluginResult);\n }\n return authService.waitForAccessToken$(false).pipe(\n switchMap((token) => {\n if (!token) return of([{}]);\n return combineLatest(this.plugins.map((plugin) => this.runPlugin(authService, plugin)));\n }),\n map((results) => deepmerge(...results) as OdxAuth.AuthPluginResult),\n tap((result) => this.result$$.next(result)),\n take(1),\n );\n }\n\n public getResult(): OdxAuth.AuthPluginResult {\n return this.result$$.getValue() ?? ({} as OdxAuth.AuthPluginResult);\n }\n\n private handlePluginError(error?: unknown): Observable<OdxAuth.AuthPluginResult> {\n try {\n this.pluginsErrorHandler?.(error);\n } catch {\n //\n }\n\n return of({} as OdxAuth.AuthPluginResult);\n }\n\n private runPlugin(authService: AuthService, plugin: AuthPlugin): ReturnType<AuthPlugin> {\n return plugin(authService).pipe(\n isNumber(this.authConfig.pluginTimeout) ? timeout(Math.max(0, this.authConfig.pluginTimeout)) : tap(),\n catchError((error) => this.handlePluginError(error)),\n );\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { AuthErrorHandlerFn } from '../auth.config';\n\nexport const offlineAuthErrorHandler: AuthErrorHandlerFn = (error) => {\n if (error.type === 'discovery_document_load_error' && (error.reason as HttpErrorResponse)?.status === 504) {\n return;\n }\n throw error;\n};\n","import { HttpErrorResponse, HttpRequest } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { AuthConfig, OAuthErrorEvent, OAuthService, TokenResponse } from 'angular-oauth2-oidc';\nimport { deepmerge } from 'deepmerge-ts';\nimport {\n BehaviorSubject,\n Observable,\n catchError,\n combineLatest,\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n of,\n share,\n shareReplay,\n startWith,\n switchMap,\n take,\n tap,\n timeout,\n} from 'rxjs';\nimport { injectAuthConfig } from './auth.config';\nimport { setHttpAuthHeader } from './helpers';\nimport { AuthPluginManager, AuthorizedHandler } from './models';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly authConfig = injectAuthConfig();\n private readonly authPluginManager = inject(AuthPluginManager);\n private readonly oauthService = inject(OAuthService);\n private readonly router = inject(Router);\n private readonly windowRef = inject(WindowRef);\n\n private readonly isInitialized$$ = new BehaviorSubject(false);\n private readonly isRedirecting$$ = new BehaviorSubject(false);\n private readonly onAccessTokenUpdate$ = fromEvent<StorageEvent>(this.windowRef.nativeWindow, 'storage').pipe(\n filter(({ key }) => key === 'access_token' || key === null),\n startWith(null),\n share(),\n );\n private readonly silentRefreshHandler$ = this.isInitialized$$.pipe(\n filter(Boolean),\n switchMap(() => this.windowRef.isOnline$),\n tap((isOnline) => this.updateSilentRefresh(isOnline)),\n );\n private readonly onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);\n\n public readonly isInitialized$ = this.isInitialized$$.pipe(filter(Boolean), distinctUntilChanged());\n public readonly isRedirecting$ = this.isRedirecting$$.pipe(distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));\n public readonly isLoading$ = merge(this.isRedirecting$, this.authPluginManager.pluginsLoading$).pipe(distinctUntilChanged());\n public readonly isAuthenticated$ = this.isInitialized$.pipe(\n switchMap(() => this.authPluginManager.pluginsReady$),\n switchMap(() => this.onAuthStateChange$),\n map(() => this.isAuthenticated()),\n distinctUntilChanged(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly identityClaims$ = this.isAuthenticated$.pipe(\n map(() => this.getIdentityClaims()),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n public readonly errors$ = this.oauthService.events.pipe(\n filter((event): event is OAuthErrorEvent => event instanceof OAuthErrorEvent),\n share(),\n );\n public readonly onTokenReceived$ = this.oauthService.events.pipe(\n filter((event) => event.type === 'token_received'),\n share(),\n );\n\n constructor() {\n this.runPlugins();\n this.silentRefreshHandler$.subscribe();\n }\n\n public async initialize(config: AuthConfig): Promise<void> {\n this.assertAudience(config.clientId);\n this.oauthService.configure({ ...config, openUri: this.redirectToLogin.bind(this) });\n try {\n await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);\n await this.oauthService.tryLogin();\n if (this.authConfig.refreshTokenOnInit) {\n await this.tryRefreshToken();\n }\n } catch (error) {\n if (!(error instanceof HttpErrorResponse || error instanceof OAuthErrorEvent)) {\n throw error;\n }\n if (error.type === 'token_refresh_error' || (error instanceof HttpErrorResponse && (error.status === 401 || error.status === 400))) {\n this.signOut(true);\n this.signIn(this.windowRef.location.pathname);\n }\n }\n this.isInitialized$$.next(true);\n if (this.authConfig.requireSignIn && !this.isAuthenticated()) {\n this.signIn(this.windowRef.location.pathname);\n }\n await this.tryLoadUserProfile();\n await this.routeToRequestedUrl();\n }\n\n public runPlugins(): void {\n this.authPluginManager.runPlugins(this).subscribe();\n }\n\n public getIssuer(): URL {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return new URL(this.oauthService.issuer!);\n }\n\n public signIn(url?: string): void {\n this.oauthService.initLoginFlow(url);\n }\n\n public signOut(noRedirect?: boolean): void {\n this.oauthService.logOut(noRedirect || !this.getAccessToken());\n }\n\n public async refreshTokens(): Promise<TokenResponse> {\n return this.oauthService.refreshToken();\n }\n\n public getAccessToken(): string | null {\n return this.oauthService.getAccessToken() ?? null;\n }\n\n public getRefreshToken(): string | null {\n return this.oauthService.getRefreshToken() ?? null;\n }\n\n public getIdToken(): string | null {\n return this.oauthService.getIdToken() ?? null;\n }\n\n public getIdentityClaims(): OdxAuth.IdentiyClaims | null {\n if (!this.getIdToken()) return null;\n return deepmerge(this.oauthService.getIdentityClaims(), this.authPluginManager.getResult()) as OdxAuth.IdentiyClaims;\n }\n\n public getRawIdentityClaims(): OdxAuth.RawIdentityClaims | null {\n if (!this.getIdToken()) return null;\n return this.oauthService.getIdentityClaims();\n }\n\n public isAuthenticated(): boolean {\n if (this.windowRef.isOnline()) {\n return this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken();\n }\n return this.hasValidOfflineToken();\n }\n\n public isAuthorized(authorizedHandler?: AuthorizedHandler | null): boolean {\n const handler = authorizedHandler ?? this.authConfig.defaultAuthorizedHandler;\n\n return this.isAuthenticated() && (handler?.(this.getIdentityClaims(), this, this.router) ?? true);\n }\n\n public isAuthorized$(authorizedHandler?: AuthorizedHandler | null): Observable<boolean> {\n return this.isAuthenticated$.pipe(map(() => this.isAuthorized(authorizedHandler)));\n }\n\n public prepareAuthRequest$<R extends HttpRequest<T> | Request, T>(req: R, requireSignIn = false): Observable<R> {\n return this.waitForAccessToken$(requireSignIn).pipe(map((token) => setHttpAuthHeader(req, token)));\n }\n\n public waitForAccessToken$(requireSignIn: boolean): Observable<string | null> {\n const accessToken$ = of(this.getAccessToken()).pipe(filter((token) => !!token && this.isAuthenticated()));\n const waitForAccessToken$ = this.onTokenReceived$.pipe(\n timeout(this.authConfig.waitForTokenInMs ?? 0),\n catchError(async () => this.tryRefreshToken().catch(() => null)),\n );\n\n return this.isInitialized$.pipe(\n switchMap(() => merge(accessToken$, waitForAccessToken$)),\n take(1),\n map(() => this.getAccessToken()),\n tap((token) => !token && requireSignIn && this.signIn(this.windowRef.location.pathname)),\n );\n }\n\n private async routeToRequestedUrl(): Promise<void> {\n if (!this.oauthService.state || !this.oauthService.hasValidAccessToken()) return;\n await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));\n }\n\n private hasValidOfflineToken(): boolean {\n const issuedAt = this.getIdentityClaims()?.iat ?? 0;\n\n return Date.now() - issuedAt * 1000 <= this.authConfig.maxOfflineTime * 1000;\n }\n\n private redirectToLogin(uri: string): void {\n this.windowRef.location.assign(uri);\n this.isRedirecting$$.next(true);\n }\n\n private async tryLoadUserProfile(): Promise<void> {\n if (!this.authConfig.loadUserProfile || !this.isAuthenticated()) return;\n await this.oauthService.loadUserProfile().catch(() => null);\n }\n\n private async tryRefreshToken(): Promise<void> {\n if (!this.getRefreshToken()) return;\n await this.oauthService.refreshToken();\n }\n\n private assertAudience(clientId?: string | null): void {\n const tokenClientId = this.getIdentityClaims()?.aud;\n if (!clientId || !tokenClientId || clientId === tokenClientId) return;\n this.signOut(true);\n }\n\n private updateSilentRefresh(enabled: boolean) {\n if (enabled) {\n this.oauthService.setupAutomaticSilentRefresh();\n } else {\n this.oauthService.stopAutomaticRefresh();\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { LanguageLoaderFn } from '@odx/angular/localization';\nimport { isNonEmptyString } from '@odx/angular/utils';\nimport { map } from 'rxjs';\nimport { AuthService } from '../auth.service';\n\ntype LanguageSelector = (claims?: OdxAuth.IdentiyClaims | null) => string | null | undefined;\n\nexport function userLanguageLoader(languageSelector: LanguageSelector = (claims) => claims?.preferredLanguage): LanguageLoaderFn {\n return () => {\n return inject(AuthService).identityClaims$.pipe(\n map(languageSelector),\n map((value) => (isNonEmptyString(value) ? value : undefined)),\n );\n };\n}\n","import { DynamicTextContent } from '@odx/angular/cdk/dynamic-view';\nimport { createConfigTokens } from '@odx/angular/utils';\nimport { OAuthErrorEvent, OAuthStorage } from 'angular-oauth2-oidc';\nimport { createInitials, resolveEmail, resolveUsername } from './helpers';\n\nimport { AuthEnvironment, AuthorizedHandler, AuthPluginFactory } from './models';\n\nexport const AUTH_HTTP_HEADER = 'Authorization';\nexport const ODX_AUTH_DEFAULT_SCOPES = ['openid', 'profile', 'email', 'offline_access'];\nexport const ODX_AUTH_HOSTS: Record<AuthEnvironment, string> = {\n dev: 'https://dev.login.draeger.com',\n stage: 'https://test.login.draeger.com',\n prod: 'https://login.draeger.com',\n};\nexport const ODX_AUTH_USER_PROFILE_HOSTS: Record<AuthEnvironment, string> = {\n dev: 'https://lemon-ocean-04a922703.3.azurestaticapps.net',\n stage: 'https://purple-cliff-0e61c5703.3.azurestaticapps.net',\n prod: 'https://id.draeger.com',\n};\n\nexport type AuthErrorHandlerFn = (error: OAuthErrorEvent) => void;\nexport type ResolveUsernameFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type ResolveEmailFn = (rawClaims: OdxAuth.RawIdentityClaims) => string;\nexport type CreateInitialsFn = (value: string) => string;\n\nexport interface AuthConfig {\n environment: AuthEnvironment;\n clientId?: string;\n issuer?: string;\n redirectPath: string;\n allowedUrls: Array<string | RegExp>;\n timeoutFactor: number;\n maxOfflineTime: number;\n loadUserProfile: boolean;\n postLogoutRedirectUrl?: string;\n scopes?: string[];\n discoveryUrl?: string;\n errorHandler: AuthErrorHandlerFn;\n createInitials: CreateInitialsFn;\n resolveEmail: ResolveEmailFn;\n resolveUsername: ResolveUsernameFn;\n storage?: OAuthStorage;\n plugins: AuthPluginFactory[];\n pluginsErrorHandler?: (error: unknown) => void;\n defaultAuthorizedHandler?: AuthorizedHandler | null;\n enableLoadingScreen: boolean;\n refreshTokenOnInit?: boolean;\n loadingScreenMessage?: DynamicTextContent | null;\n userProfileUrl?: string;\n requireSignIn?: boolean;\n requireSignInForRequests?: boolean;\n waitForTokenInMs?: number;\n showDebugInformation?: boolean;\n pluginTimeout?: number;\n}\n\nexport const { AuthDefaultConfig, AuthConfig, injectAuthConfig, provideAuthConfig } = createConfigTokens('Auth', '@odx/auth', {\n environment: 'prod',\n redirectPath: 'login/callback',\n allowedUrls: [],\n timeoutFactor: 0.75,\n maxOfflineTime: 24 * 60 * 60, // 1 day\n loadUserProfile: false,\n errorHandler: (error) => {\n throw error;\n },\n createInitials,\n resolveEmail,\n resolveUsername,\n plugins: [],\n defaultAuthorizedHandler: null,\n enableLoadingScreen: true,\n loadingScreenMessage: null,\n waitForTokenInMs: 1000,\n} as AuthConfig);\n","import { TranslationObject } from '@odx/angular/internal/translate';\n\nexport default {\n en: {\n userProfileLink: 'My profile',\n signInButtonText: 'Sign in',\n signOutButtonText: 'Sign out',\n },\n de: {\n userProfileLink: 'Mein Profil',\n signInButtonText: 'Einloggen',\n signOutButtonText: 'Ausloggen',\n },\n} as TranslationObject;\n","import { AfterViewInit, Directive, inject } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from '../auth.service';\n\n@Directive()\nexport abstract class AuthActionDirective implements AfterViewInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n private readonly loadingSpinnerDirective = inject(LoadingSpinnerDirective, { self: true });\n protected readonly authService = inject(AuthService);\n\n public ngAfterViewInit(): void {\n this.loadingSpinnerDirective.autoColor = true;\n this.authService.isRedirecting$.pipe(this.takeUntilDestroyed()).subscribe((isRedirecting) => {\n this.loadingSpinnerDirective.isLoading = isRedirecting;\n });\n }\n\n protected abstract handleClick(): void;\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignIn]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignInDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignIn')\n public afterSignIn = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signIn();\n this.afterSignIn.next();\n }\n}\n","import { Directive, EventEmitter, HostListener, Output } from '@angular/core';\nimport { LoadingSpinnerDirective } from '@odx/angular/components/loading-spinner';\nimport { AuthActionDirective } from './auth-action.directive';\n\n@Directive({\n standalone: true,\n selector: '[odxButton][odxAuthSignOut]',\n hostDirectives: [LoadingSpinnerDirective],\n})\nexport class SignOutDirective extends AuthActionDirective {\n // eslint-disable-next-line @angular-eslint/no-output-rename\n @Output('odxAuthSignOut')\n public afterSignOut = new EventEmitter<void>();\n\n @HostListener('click')\n protected override handleClick(): void {\n this.authService.signOut();\n this.afterSignOut.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input, ViewEncapsulation } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { AreaHeaderModule } from '@odx/angular/components/area-header';\nimport { DropdownModule, DropdownOptions } from '@odx/angular/components/dropdown';\nimport { HeaderModule } from '@odx/angular/components/header';\nimport { LoadingSpinnerModule } from '@odx/angular/components/loading-spinner';\nimport { LogoDirective } from '@odx/angular/components/logo';\nimport { provideTranslations, TranslatePipe } from '@odx/angular/internal/translate';\nimport { Position } from '@odx/angular/utils';\nimport { injectAuthConfig } from './auth.config';\nimport translations from './auth.i18n';\nimport { AuthService } from './auth.service';\nimport { AuthActionsComponent } from './components';\nimport { SignInDirective, SignOutDirective } from './directives';\n\n@Component({\n standalone: true,\n selector: 'odx-auth',\n imports: [\n CoreModule,\n AreaHeaderModule,\n DropdownModule,\n HeaderModule,\n LogoDirective,\n SignInDirective,\n SignOutDirective,\n LoadingSpinnerModule,\n AuthActionsComponent,\n TranslatePipe,\n ],\n templateUrl: './auth.component.html',\n styleUrls: ['./auth.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [provideTranslations(translations)],\n})\nexport class AuthComponent {\n protected readonly authConfig = injectAuthConfig();\n protected readonly authService = inject(AuthService);\n protected readonly dropdownOptions = {\n position: Position.BOTTOM_END,\n enableFallback: false,\n containerClass: 'odx-auth-user-profile',\n } as Partial<DropdownOptions>;\n\n public readonly hideInstitution = input(false);\n}\n","<odx-action-group>\n <ng-template [ngrxLet]=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ }\" let-vm>\n @if (vm.isAuthenticated) {\n <button odxButton [odxDropdown]=\"userProfileMenu\" [odxDropdownOptions]=\"dropdownOptions\" data-testid=\"odx-auth-user-profile-button\">\n <ng-template [ngTemplateOutlet]=\"userAvatar\"></ng-template>\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></odx-icon>\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\"></ng-template>\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></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></odx-icon>\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-template>\n</odx-action-group>\n","import { NgIf, NgIfContext } from '@angular/common';\nimport { AfterViewInit, Directive, inject, Input, TemplateRef } from '@angular/core';\nimport { isString, untilDestroyed } from '@odx/angular/utils';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[odxAuth]',\n hostDirectives: [NgIf],\n})\nexport class AuthDirective implements AfterViewInit {\n private readonly authService = inject(AuthService);\n private readonly ngIfDirective = inject(NgIf, { host: true });\n private readonly takeUntilDestroyed = untilDestroyed();\n\n @Input('odxAuth')\n public authorizationHandler?: AuthorizedHandler | null | string = null;\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('odxAuthElse')\n public set elseTemplate(value: TemplateRef<NgIfContext<unknown>>) {\n this.ngIfDirective.ngIfElse = value;\n }\n\n public ngAfterViewInit(): void {\n this.authService.identityClaims$.pipe(this.takeUntilDestroyed()).subscribe(() => {\n const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;\n this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { isString } from '@odx/angular/utils';\nimport { EMPTY, of, switchMap, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function authGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string, isExternal = false): CanActivateFn {\n return (_, state) => {\n const authService = inject(AuthService);\n const windowRef = inject(WindowRef);\n const router = inject(Router, { optional: true });\n\n return authService.isAuthenticated$.pipe(\n switchMap((isAuthenticated) => {\n if (!isAuthenticated) {\n authService.signIn(state.url);\n\n return EMPTY;\n }\n return of(authService.isAuthorized(authorizedHandler));\n }),\n tap((isAuthorized) => {\n if (isAuthorized || !router) return;\n if (isString(redirectTo)) {\n if (isExternal) {\n windowRef.location.assign(redirectTo);\n } else {\n router.navigateByUrl(redirectTo);\n }\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","import { NgModule } from '@angular/core';\nimport { AuthComponent } from './auth.component';\nimport { AuthDirective } from './auth.directive';\nimport { SignInDirective, SignOutDirective } from './directives';\n\nconst modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];\n\n@NgModule({\n imports: [...modules],\n exports: [...modules],\n})\nexport class AuthModule {}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { WindowRef } from '@odx/angular';\nimport { isString } from '@odx/angular/utils';\nimport { map, take, tap } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { AuthorizedHandler } from './models';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function unauthGuard(authorizedHandler?: AuthorizedHandler, redirectTo?: any[] | string, isExternal = false): CanActivateFn {\n return (_) => {\n const authService = inject(AuthService);\n const router = inject(Router, { optional: true });\n const windowRef = inject(WindowRef);\n\n return authService.isAuthenticated$.pipe(\n map(() => !authService.isAuthorized(authorizedHandler)),\n tap((isUnauthorized) => {\n if (isUnauthorized || !router) return;\n if (isString(redirectTo)) {\n if (isExternal) {\n windowRef.location.assign(redirectTo);\n } else {\n router.navigateByUrl(redirectTo);\n }\n } else if (Array.isArray(redirectTo)) {\n router.navigate(redirectTo);\n }\n }),\n take(1),\n );\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i7"],"mappings":"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"}
|
package/lib/auth.component.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare class AuthComponent {
|
|
|
5
5
|
protected readonly authConfig: import("./auth.config").AuthConfig;
|
|
6
6
|
protected readonly authService: AuthService;
|
|
7
7
|
protected readonly dropdownOptions: Partial<DropdownOptions>;
|
|
8
|
+
readonly hideInstitution: import("@angular/core").InputSignal<boolean>;
|
|
8
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<AuthComponent, never>;
|
|
9
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AuthComponent, "odx-auth", never, {}, {}, never, ["*"], true, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AuthComponent, "odx-auth", never, { "hideInstitution": { "alias": "hideInstitution"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
10
11
|
}
|
package/lib/auth.typings.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -4,4 +4,5 @@ export * from './lib/service-connect-rights.directive';
|
|
|
4
4
|
export * from './lib/service-connect-rights.guard';
|
|
5
5
|
export * from './lib/service-connect-rights.plugin';
|
|
6
6
|
export * from './lib/service-connect-user-language.plugin';
|
|
7
|
+
export * from './lib/service-connect-user-profile.plugin';
|
|
7
8
|
export * from './lib/service-connect.config';
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export interface GetServiceConnectUserResponseDto {
|
|
2
|
+
user_id: string;
|
|
3
|
+
first_name: string;
|
|
4
|
+
last_name: string;
|
|
2
5
|
language_code: string;
|
|
3
6
|
preferred_language: string;
|
|
7
|
+
country: string;
|
|
8
|
+
institution_id: number;
|
|
9
|
+
institution_name: string;
|
|
10
|
+
institution_shortname: string;
|
|
4
11
|
}
|
|
@@ -1 +1,3 @@
|
|
|
1
|
+
import { GetServiceConnectUserResponseDto } from './dtos';
|
|
2
|
+
export declare function getServiceConnectUserLanguage(res?: GetServiceConnectUserResponseDto | null): string | undefined;
|
|
1
3
|
export declare const serviceConnectUserLanguagePlugin: import("./helpers").ServiceConnectPluginFactory;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
namespace OdxAuth {
|
|
3
|
+
interface AuthPluginResult {
|
|
4
|
+
country?: string;
|
|
5
|
+
institutionId?: number;
|
|
6
|
+
institutionName?: string;
|
|
7
|
+
institutionShortname?: string;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export declare const serviceConnectUserProfilePlugin: import("./helpers").ServiceConnectPluginFactory;
|