@odx/auth 1.0.0-alpha.1 → 1.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/index.mjs +6 -3
- package/esm2020/lib/auth-error-handler.mjs +20 -0
- package/esm2020/lib/auth.component.mjs +13 -21
- package/esm2020/lib/auth.config.mjs +11 -3
- package/esm2020/lib/auth.directive.mjs +41 -0
- package/esm2020/lib/auth.guard.mjs +18 -0
- package/esm2020/lib/auth.module.mjs +10 -12
- package/esm2020/lib/auth.providers.mjs +53 -42
- package/esm2020/lib/auth.service.mjs +87 -21
- package/esm2020/lib/auth.typings.mjs +2 -0
- package/esm2020/lib/directives/sign-in.directive.mjs +6 -6
- package/esm2020/lib/directives/sign-out.directive.mjs +6 -6
- package/esm2020/lib/helpers/create-inititals.mjs +12 -0
- package/esm2020/lib/helpers/index.mjs +3 -3
- package/esm2020/lib/helpers/parse-identity-claims.mjs +10 -0
- package/esm2020/lib/models/authorized-handler.mjs +2 -0
- package/esm2020/lib/models/index.mjs +2 -2
- package/fesm2015/odx-auth.mjs +255 -134
- package/fesm2015/odx-auth.mjs.map +1 -1
- package/fesm2020/odx-auth.mjs +252 -135
- package/fesm2020/odx-auth.mjs.map +1 -1
- package/index.d.ts +5 -2
- package/lib/auth-error-handler.d.ts +12 -0
- package/lib/auth.component.d.ts +2 -3
- package/lib/auth.config.d.ts +11 -6
- package/lib/auth.directive.d.ts +15 -0
- package/lib/auth.guard.d.ts +3 -0
- package/lib/auth.module.d.ts +4 -4
- package/lib/auth.providers.d.ts +9 -6
- package/lib/auth.service.d.ts +27 -11
- package/lib/auth.typings.d.ts +19 -0
- package/lib/directives/sign-in.directive.d.ts +3 -3
- package/lib/directives/sign-out.directive.d.ts +3 -3
- package/lib/helpers/create-inititals.d.ts +1 -0
- package/lib/helpers/index.d.ts +2 -2
- package/lib/helpers/parse-identity-claims.d.ts +1 -0
- package/lib/models/auth-environment.d.ts +1 -1
- package/lib/models/authorized-handler.d.ts +4 -0
- package/lib/models/index.d.ts +1 -1
- package/package.json +3 -4
- package/esm2020/lib/auth.interceptor.mjs +0 -25
- package/esm2020/lib/helpers/get-user-initials.mjs +0 -12
- package/esm2020/lib/helpers/resolve-issuer.mjs +0 -13
- package/esm2020/lib/models/user.mjs +0 -2
- package/lib/auth.interceptor.d.ts +0 -11
- package/lib/helpers/get-user-initials.d.ts +0 -2
- package/lib/helpers/resolve-issuer.d.ts +0 -2
- package/lib/models/user.d.ts +0 -4
package/esm2020/index.mjs
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from './lib/auth-error-handler';
|
|
2
2
|
export * from './lib/auth.component';
|
|
3
3
|
export * from './lib/auth.config';
|
|
4
|
-
export * from './lib/auth.
|
|
4
|
+
export * from './lib/auth.directive';
|
|
5
|
+
export * from './lib/auth.guard';
|
|
5
6
|
export * from './lib/auth.module';
|
|
6
7
|
export * from './lib/auth.providers';
|
|
7
8
|
export * from './lib/auth.service';
|
|
9
|
+
export * from './lib/auth.typings';
|
|
8
10
|
export * from './lib/directives';
|
|
9
11
|
export * from './lib/helpers';
|
|
10
|
-
|
|
12
|
+
export * from './lib/models';
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLWVycm9yLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnByb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC50eXBpbmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class AuthErrorHandler {
|
|
4
|
+
}
|
|
5
|
+
AuthErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthErrorHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6
|
+
AuthErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthErrorHandler });
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthErrorHandler, decorators: [{
|
|
8
|
+
type: Injectable
|
|
9
|
+
}] });
|
|
10
|
+
export class NoopAuthErrorHandler extends AuthErrorHandler {
|
|
11
|
+
handleError(error) {
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
NoopAuthErrorHandler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: NoopAuthErrorHandler, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
16
|
+
NoopAuthErrorHandler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: NoopAuthErrorHandler });
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: NoopAuthErrorHandler, decorators: [{
|
|
18
|
+
type: Injectable
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1lcnJvci1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC1lcnJvci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDLE1BQU0sT0FBZ0IsZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCO2lIQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFEckMsVUFBVTs7QUFNWCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZ0JBQWdCO0lBQ2pELFdBQVcsQ0FBQyxLQUFzQjtRQUN2QyxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7O2lIQUhVLG9CQUFvQjtxSEFBcEIsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPQXV0aEVycm9yRXZlbnQgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF1dGhFcnJvckhhbmRsZXIge1xuICBwdWJsaWMgYWJzdHJhY3QgaGFuZGxlRXJyb3IoZXJyb3I6IE9BdXRoRXJyb3JFdmVudCk6IHZvaWQ7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOb29wQXV0aEVycm9ySGFuZGxlciBleHRlbmRzIEF1dGhFcnJvckhhbmRsZXIge1xuICBwdWJsaWMgaGFuZGxlRXJyb3IoZXJyb3I6IE9BdXRoRXJyb3JFdmVudCk6IHZvaWQge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG4iXX0=
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
1
|
import { ChangeDetectionStrategy, Component, inject, Input, ViewEncapsulation } from '@angular/core';
|
|
3
2
|
import { CoreModule } from '@odx/angular';
|
|
4
3
|
import { AreaHeaderModule } from '@odx/angular/components/area-header';
|
|
5
4
|
import { DropdownModule } from '@odx/angular/components/dropdown';
|
|
6
5
|
import { HeaderModule } from '@odx/angular/components/header';
|
|
7
6
|
import { LogoDirective } from '@odx/angular/components/logo';
|
|
8
|
-
import {
|
|
9
|
-
import { injectAuthModuleConfig } from './auth.config';
|
|
7
|
+
import { Position } from '@odx/angular/utils';
|
|
10
8
|
import { AuthService } from './auth.service';
|
|
11
9
|
import { SignInDirective, SignOutDirective } from './directives';
|
|
12
|
-
import { getUserInitials } from './helpers';
|
|
13
10
|
import * as i0 from "@angular/core";
|
|
14
11
|
import * as i1 from "@angular/common";
|
|
15
|
-
import * as i2 from "@
|
|
12
|
+
import * as i2 from "@ngrx/component";
|
|
16
13
|
import * as i3 from "@odx/angular/components/area-header";
|
|
17
14
|
import * as i4 from "@odx/angular/components/avatar";
|
|
18
15
|
import * as i5 from "@odx/angular/components/action-group";
|
|
@@ -22,29 +19,24 @@ import * as i8 from "@odx/angular/components/dropdown";
|
|
|
22
19
|
import * as i9 from "@odx/angular/components/header";
|
|
23
20
|
export class AuthComponent {
|
|
24
21
|
constructor() {
|
|
25
|
-
this.config = injectAuthModuleConfig();
|
|
26
22
|
this.authService = inject(AuthService);
|
|
23
|
+
this.dropdownOptions = {
|
|
24
|
+
position: Position.BOTTOM_END,
|
|
25
|
+
enableFallback: false,
|
|
26
|
+
containerClass: 'odx-auth-user-profile',
|
|
27
|
+
};
|
|
27
28
|
this.signInButtonText = 'Sign in';
|
|
28
29
|
this.signOutButtonText = 'Sign out';
|
|
29
30
|
}
|
|
30
|
-
getInitials(user) {
|
|
31
|
-
return getUserInitials(user);
|
|
32
|
-
}
|
|
33
31
|
}
|
|
34
|
-
AuthComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
35
|
-
AuthComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
36
|
-
|
|
37
|
-
Pure,
|
|
38
|
-
__metadata("design:type", Function),
|
|
39
|
-
__metadata("design:paramtypes", [Object]),
|
|
40
|
-
__metadata("design:returntype", String)
|
|
41
|
-
], AuthComponent.prototype, "getInitials", null);
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: AuthComponent, decorators: [{
|
|
32
|
+
AuthComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
AuthComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.1", type: AuthComponent, isStandalone: true, selector: "odx-auth", inputs: { signInButtonText: "signInButtonText", signOutButtonText: "signOutButtonText" }, ngImport: i0, template: "<odx-action-group *ngrxLet=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ } as vm\">\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton odxHeaderAvatar [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?.name }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\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 }}\n <odx-icon name=\"arrow-right\" 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=\"primary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ signInButtonText }}\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</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}\n"], dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "directive", type: i8.DropdownDirective, selector: "[odxDropdown]", inputs: ["odxDropdown", "odxDropdownDisabled", "odxDropdownShowLoader", "odxDropdownOptions", "odxDropdownReferenceElement", "odxDropdownTriggerElement", "odxDropdownHost", "odxDropdownOpenTrigger", "odxDropdownCloseTrigger"], outputs: ["odxDropdownBeforeOpen", "odxDropdownAfterOpen", "odxDropdownBeforeClose", "odxDropdownAfterClose"], exportAs: ["odxDropdown"] }, { kind: "ngmodule", type: HeaderModule }, { kind: "directive", type: i9.HeaderAvatarDirective, selector: "button[odxButton][odxHeaderAvatar]" }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthComponent, decorators: [{
|
|
43
35
|
type: Component,
|
|
44
|
-
args: [{ standalone: true, selector: 'odx-auth', imports: [CoreModule, AreaHeaderModule, DropdownModule, HeaderModule, LogoDirective, SignInDirective, SignOutDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-action-group *
|
|
36
|
+
args: [{ standalone: true, selector: 'odx-auth', imports: [CoreModule, AreaHeaderModule, DropdownModule, HeaderModule, LogoDirective, SignInDirective, SignOutDirective], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<odx-action-group *ngrxLet=\"{ idClaims: authService.identityClaims$, isAuthenticated: authService.isAuthenticated$ } as vm\">\n <ng-template [ngIf]=\"vm.isAuthenticated\" [ngIfElse]=\"notAuthenticated\">\n <button odxButton odxHeaderAvatar [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?.name }}\n <odx-area-header-subtitle>\n {{ vm.idClaims?.email }}\n </odx-area-header-subtitle>\n </odx-area-header>\n <ng-content></ng-content>\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 }}\n <odx-icon name=\"arrow-right\" 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=\"primary\" data-testid=\"odx-auth-sign-in-button\">\n <odx-icon name=\"user\" alignLeft></odx-icon>\n {{ signInButtonText }}\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</odx-action-group>\n", styles: [".odx-auth-user-profile .odx-dropdown__inner>.odx-area-header{max-width:max(360px,25vw);min-width:296px}\n"] }]
|
|
45
37
|
}], propDecorators: { signInButtonText: [{
|
|
46
38
|
type: Input
|
|
47
39
|
}], signOutButtonText: [{
|
|
48
40
|
type: Input
|
|
49
|
-
}]
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
}] } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7QUFXakUsTUFBTSxPQUFPLGFBQWE7SUFUMUI7UUFVcUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsb0JBQWUsR0FBRztZQUNuQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDN0IsY0FBYyxFQUFFLEtBQUs7WUFDckIsY0FBYyxFQUFFLHVCQUF1QjtTQUNaLENBQUM7UUFHdkIscUJBQWdCLEdBQUcsU0FBUyxDQUFDO1FBRzdCLHNCQUFpQixHQUFHLFVBQVUsQ0FBQztLQUN2Qzs7MEdBYlksYUFBYTs4RkFBYixhQUFhLDhKQ25CMUIsOHREQW1DQSxrS0R0QlksVUFBVSx5WkFBRSxnQkFBZ0Isd3BCQUFFLGNBQWMseWRBQUUsWUFBWSxzSUFBRSxhQUFhLGtGQUFFLGVBQWUsbUdBQUUsZ0JBQWdCOzJGQU0zRyxhQUFhO2tCQVR6QixTQUFTO2lDQUNJLElBQUksWUFDTixVQUFVLFdBQ1gsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLG1CQUd0Ryx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzhCQVc5QixnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBSUMsaUJBQWlCO3NCQUR2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQXJlYUhlYWRlck1vZHVsZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2FyZWEtaGVhZGVyJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlLCBEcm9wZG93bk9wdGlvbnMgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBIZWFkZXJNb2R1bGUgfSBmcm9tICdAb2R4L2FuZ3VsYXIvY29tcG9uZW50cy9oZWFkZXInO1xuaW1wb3J0IHsgTG9nb0RpcmVjdGl2ZSB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2xvZ28nO1xuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBTaWduSW5EaXJlY3RpdmUsIFNpZ25PdXREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdvZHgtYXV0aCcsXG4gIGltcG9ydHM6IFtDb3JlTW9kdWxlLCBBcmVhSGVhZGVyTW9kdWxlLCBEcm9wZG93bk1vZHVsZSwgSGVhZGVyTW9kdWxlLCBMb2dvRGlyZWN0aXZlLCBTaWduSW5EaXJlY3RpdmUsIFNpZ25PdXREaXJlY3RpdmVdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F1dGguY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZHJvcGRvd25PcHRpb25zID0ge1xuICAgIHBvc2l0aW9uOiBQb3NpdGlvbi5CT1RUT01fRU5ELFxuICAgIGVuYWJsZUZhbGxiYWNrOiBmYWxzZSxcbiAgICBjb250YWluZXJDbGFzczogJ29keC1hdXRoLXVzZXItcHJvZmlsZScsXG4gIH0gYXMgUGFydGlhbDxEcm9wZG93bk9wdGlvbnM+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaWduSW5CdXR0b25UZXh0ID0gJ1NpZ24gaW4nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaWduT3V0QnV0dG9uVGV4dCA9ICdTaWduIG91dCc7XG59XG4iLCI8b2R4LWFjdGlvbi1ncm91cCAqbmdyeExldD1cInsgaWRDbGFpbXM6IGF1dGhTZXJ2aWNlLmlkZW50aXR5Q2xhaW1zJCwgaXNBdXRoZW50aWNhdGVkOiBhdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQkIH0gYXMgdm1cIj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInZtLmlzQXV0aGVudGljYXRlZFwiIFtuZ0lmRWxzZV09XCJub3RBdXRoZW50aWNhdGVkXCI+XG4gICAgPGJ1dHRvbiBvZHhCdXR0b24gb2R4SGVhZGVyQXZhdGFyIFtvZHhEcm9wZG93bl09XCJ1c2VyUHJvZmlsZU1lbnVcIiBbb2R4RHJvcGRvd25PcHRpb25zXT1cImRyb3Bkb3duT3B0aW9uc1wiIGRhdGEtdGVzdGlkPVwib2R4LWF1dGgtdXNlci1wcm9maWxlLWJ1dHRvblwiPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVzZXJBdmF0YXJcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvYnV0dG9uPlxuICAgIDxuZy10ZW1wbGF0ZSAjdXNlclByb2ZpbGVNZW51PlxuICAgICAgPG9keC1hcmVhLWhlYWRlciBjbGFzcz1cIm9keC1wYWRkaW5nLXgtMTJcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVzZXJBdmF0YXJcIiBuZ1Byb2plY3RBcz1cIm9keC1hdmF0YXJcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB7eyB2bS5pZENsYWltcz8ubmFtZSB9fVxuICAgICAgICA8b2R4LWFyZWEtaGVhZGVyLXN1YnRpdGxlPlxuICAgICAgICAgIHt7IHZtLmlkQ2xhaW1zPy5lbWFpbCB9fVxuICAgICAgICA8L29keC1hcmVhLWhlYWRlci1zdWJ0aXRsZT5cbiAgICAgIDwvb2R4LWFyZWEtaGVhZGVyPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPGRpdiBjbGFzcz1cIm9keC1tYXJnaW4tdG9wLTEyXCIgb2R4TGF5b3V0PVwiZmxleCB2ZXJ0aWNhbC1jZW50ZXJcIj5cbiAgICAgICAgPG9keC1sb2dvIG9keExheW91dD1cImF1dG9cIiBjbGFzcz1cIm9keC1tYXJnaW4tbGVmdC0xMiBvZHgtbWFyZ2luLXJpZ2h0LWF1dG9cIj48L29keC1sb2dvPlxuICAgICAgICA8YnV0dG9uIG9keEJ1dHRvbiBvZHhBdXRoU2lnbk91dCB2YXJpYW50PVwiZ2hvc3RcIiBkYXRhLXRlc3RpZD1cIm9keC1hdXRoLXNpZ24tb3V0LWJ1dHRvblwiPlxuICAgICAgICAgIHt7IHNpZ25PdXRCdXR0b25UZXh0IH19XG4gICAgICAgICAgPG9keC1pY29uIG5hbWU9XCJhcnJvdy1yaWdodFwiIGFsaWduUmlnaHQ+PC9vZHgtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI25vdEF1dGhlbnRpY2F0ZWQ+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm9keC1hdXRoLXNpZ24taW5cIiBvZHhCdXR0b24gb2R4QXV0aFNpZ25JbiB2YXJpYW50PVwicHJpbWFyeVwiIGRhdGEtdGVzdGlkPVwib2R4LWF1dGgtc2lnbi1pbi1idXR0b25cIj5cbiAgICAgIDxvZHgtaWNvbiBuYW1lPVwidXNlclwiIGFsaWduTGVmdD48L29keC1pY29uPlxuICAgICAge3sgc2lnbkluQnV0dG9uVGV4dCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3VzZXJBdmF0YXI+XG4gICAgPG9keC1hdmF0YXIgY2xhc3M9XCJvZHgtYXV0aC11c2VyLWF2YXRhclwiPlxuICAgICAge3sgdm0uaWRDbGFpbXM/LmluaXRpYWxzID8/ICcnIH19XG4gICAgPC9vZHgtYXZhdGFyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9vZHgtYWN0aW9uLWdyb3VwPlxuIl19
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { createModuleConfigTokens } from '@odx/angular/utils';
|
|
2
|
-
export const DEFAULT_AUTH_SCOPES = ['openid', 'profile'];
|
|
2
|
+
export const DEFAULT_AUTH_SCOPES = ['openid', 'profile', 'email', 'offline_access'];
|
|
3
|
+
export const DEFAULT_ISSUERS = {
|
|
4
|
+
dev: 'https://dev.login.draeger.com/oauth2/default',
|
|
5
|
+
stage: 'https://test.login.draeger.com/oauth2/default',
|
|
6
|
+
prod: 'https://login.draeger.com/oauth2/default',
|
|
7
|
+
};
|
|
3
8
|
export const { AuthDefaultModuleConfig, AuthModuleConfig, injectAuthModuleConfig } = createModuleConfigTokens('Auth', '@odx/auth', {
|
|
4
9
|
environment: 'prod',
|
|
5
10
|
redirectPath: 'login/callback',
|
|
6
|
-
|
|
11
|
+
allowedUrls: [],
|
|
12
|
+
timeoutFactor: 0.75,
|
|
13
|
+
maxOfflineTime: 24 * 60 * 60,
|
|
14
|
+
loadUserProfile: false,
|
|
7
15
|
});
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUk5RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDcEYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFvQztJQUM5RCxHQUFHLEVBQUUsOENBQThDO0lBQ25ELEtBQUssRUFBRSwrQ0FBK0M7SUFDdEQsSUFBSSxFQUFFLDBDQUEwQztDQUNqRCxDQUFDO0FBZ0JGLE1BQU0sQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO0lBQ2pJLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFlBQVksRUFBRSxnQkFBZ0I7SUFDOUIsV0FBVyxFQUFFLEVBQUU7SUFDZixhQUFhLEVBQUUsSUFBSTtJQUNuQixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQzVCLGVBQWUsRUFBRSxLQUFLO0NBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTW9kdWxlQ29uZmlnVG9rZW5zIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcblxuaW1wb3J0IHsgQXV0aEVudmlyb25tZW50IH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BVVRIX1NDT1BFUyA9IFsnb3BlbmlkJywgJ3Byb2ZpbGUnLCAnZW1haWwnLCAnb2ZmbGluZV9hY2Nlc3MnXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lTU1VFUlM6IFJlY29yZDxBdXRoRW52aXJvbm1lbnQsIHN0cmluZz4gPSB7XG4gIGRldjogJ2h0dHBzOi8vZGV2LmxvZ2luLmRyYWVnZXIuY29tL29hdXRoMi9kZWZhdWx0JyxcbiAgc3RhZ2U6ICdodHRwczovL3Rlc3QubG9naW4uZHJhZWdlci5jb20vb2F1dGgyL2RlZmF1bHQnLFxuICBwcm9kOiAnaHR0cHM6Ly9sb2dpbi5kcmFlZ2VyLmNvbS9vYXV0aDIvZGVmYXVsdCcsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhNb2R1bGVDb25maWcge1xuICBlbnZpcm9ubWVudDogQXV0aEVudmlyb25tZW50O1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgaXNzdWVyPzogc3RyaW5nO1xuICByZWRpcmVjdFBhdGg6IHN0cmluZztcbiAgYWxsb3dlZFVybHM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIHRpbWVvdXRGYWN0b3I6IG51bWJlcjtcbiAgbWF4T2ZmbGluZVRpbWU6IG51bWJlcjtcbiAgbG9hZFVzZXJQcm9maWxlOiBib29sZWFuO1xuICBwb3N0TG9nb3V0UmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICBkaXNjb3ZlcnlVcmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCB7IEF1dGhEZWZhdWx0TW9kdWxlQ29uZmlnLCBBdXRoTW9kdWxlQ29uZmlnLCBpbmplY3RBdXRoTW9kdWxlQ29uZmlnIH0gPSBjcmVhdGVNb2R1bGVDb25maWdUb2tlbnMoJ0F1dGgnLCAnQG9keC9hdXRoJywge1xuICBlbnZpcm9ubWVudDogJ3Byb2QnLFxuICByZWRpcmVjdFBhdGg6ICdsb2dpbi9jYWxsYmFjaycsXG4gIGFsbG93ZWRVcmxzOiBbXSxcbiAgdGltZW91dEZhY3RvcjogMC43NSxcbiAgbWF4T2ZmbGluZVRpbWU6IDI0ICogNjAgKiA2MCwgLy8gMSBkYXlcbiAgbG9hZFVzZXJQcm9maWxlOiBmYWxzZSxcbn0gYXMgQXV0aE1vZHVsZUNvbmZpZyk7XG4iXX0=
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { Directive, inject, Input, TemplateRef } from '@angular/core';
|
|
3
|
+
import { isString, untilDestroyed } from '@odx/angular/utils';
|
|
4
|
+
import { AuthService } from './auth.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
export class AuthDirective {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.authService = inject(AuthService);
|
|
10
|
+
this.ngIfDirective = inject(NgIf, { host: true });
|
|
11
|
+
this.takeUntilDestroyed = untilDestroyed();
|
|
12
|
+
this.authorizationHandler = null;
|
|
13
|
+
}
|
|
14
|
+
// eslint-disable-next-line @angular-eslint/no-input-rename
|
|
15
|
+
set elseTemplate(value) {
|
|
16
|
+
this.ngIfDirective.ngIfElse = value;
|
|
17
|
+
}
|
|
18
|
+
ngAfterViewInit() {
|
|
19
|
+
this.authService.isAuthenticated$.pipe(this.takeUntilDestroyed()).subscribe(() => {
|
|
20
|
+
const handler = isString(this.authorizationHandler) ? null : this.authorizationHandler;
|
|
21
|
+
this.ngIfDirective.ngIf = this.authService.isAuthorized(handler);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
AuthDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
26
|
+
AuthDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: AuthDirective, isStandalone: true, selector: "ng-template[odxAuth]", inputs: { authorizationHandler: ["odxAuth", "authorizationHandler"], elseTemplate: ["odxAuthElse", "elseTemplate"] }, hostDirectives: [{ directive: i1.NgIf }], ngImport: i0 });
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthDirective, decorators: [{
|
|
28
|
+
type: Directive,
|
|
29
|
+
args: [{
|
|
30
|
+
standalone: true,
|
|
31
|
+
selector: 'ng-template[odxAuth]',
|
|
32
|
+
hostDirectives: [NgIf],
|
|
33
|
+
}]
|
|
34
|
+
}], propDecorators: { authorizationHandler: [{
|
|
35
|
+
type: Input,
|
|
36
|
+
args: ['odxAuth']
|
|
37
|
+
}], elseTemplate: [{
|
|
38
|
+
type: Input,
|
|
39
|
+
args: ['odxAuthElse']
|
|
40
|
+
}] } });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFlLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVE3QyxNQUFNLE9BQU8sYUFBYTtJQUwxQjtRQU1tQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUdoRCx5QkFBb0IsR0FBdUMsSUFBSSxDQUFDO0tBY3hFO0lBWkMsMkRBQTJEO0lBQzNELElBQ1csWUFBWSxDQUFDLEtBQXdDO1FBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBRU0sZUFBZTtRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUN2RixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzBHQW5CVSxhQUFhOzhGQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFMekIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDO2lCQUN2Qjs4QkFPUSxvQkFBb0I7c0JBRDFCLEtBQUs7dUJBQUMsU0FBUztnQkFLTCxZQUFZO3NCQUR0QixLQUFLO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmLCBOZ0lmQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIGluamVjdCwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1N0cmluZywgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemVkSGFuZGxlciB9IGZyb20gJy4vbW9kZWxzJztcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbb2R4QXV0aF0nLFxuICBob3N0RGlyZWN0aXZlczogW05nSWZdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5nSWZEaXJlY3RpdmUgPSBpbmplY3QoTmdJZiwgeyBob3N0OiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHRha2VVbnRpbERlc3Ryb3llZCA9IHVudGlsRGVzdHJveWVkKCk7XG5cbiAgQElucHV0KCdvZHhBdXRoJylcbiAgcHVibGljIGF1dGhvcml6YXRpb25IYW5kbGVyPzogQXV0aG9yaXplZEhhbmRsZXIgfCBudWxsIHwgc3RyaW5nID0gbnVsbDtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ29keEF1dGhFbHNlJylcbiAgcHVibGljIHNldCBlbHNlVGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmPE5nSWZDb250ZXh0PHVua25vd24+Pikge1xuICAgIHRoaXMubmdJZkRpcmVjdGl2ZS5uZ0lmRWxzZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQucGlwZSh0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGlzU3RyaW5nKHRoaXMuYXV0aG9yaXphdGlvbkhhbmRsZXIpID8gbnVsbCA6IHRoaXMuYXV0aG9yaXphdGlvbkhhbmRsZXI7XG4gICAgICB0aGlzLm5nSWZEaXJlY3RpdmUubmdJZiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRob3JpemVkKGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { map, take } from 'rxjs';
|
|
4
|
+
import { AuthService } from './auth.service';
|
|
5
|
+
export function authGuard(authorizedHandler) {
|
|
6
|
+
return (_, state) => {
|
|
7
|
+
const authService = inject(AuthService);
|
|
8
|
+
const router = inject(Router);
|
|
9
|
+
const isAuthorized = () => authorizedHandler?.(authService.getIdentityClaims(), router, authService);
|
|
10
|
+
return authService.isAuthenticated$.pipe(map((isAuthenticated) => {
|
|
11
|
+
if (!isAuthenticated) {
|
|
12
|
+
authService.signIn(state.url);
|
|
13
|
+
}
|
|
14
|
+
return isAuthorized() ?? isAuthenticated;
|
|
15
|
+
}), take(1));
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYXV0aC9zcmMvbGliL2F1dGguZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQWlCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3QyxNQUFNLFVBQVUsU0FBUyxDQUFDLGlCQUErQztJQUN2RSxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFckcsT0FBTyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMvQjtZQUNELE9BQU8sWUFBWSxFQUFFLElBQUksZUFBZSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FuQWN0aXZhdGVGbiwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBdXRob3JpemVkSGFuZGxlcldpdGhSb3V0ZXIgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRoR3VhcmQoYXV0aG9yaXplZEhhbmRsZXI/OiBBdXRob3JpemVkSGFuZGxlcldpdGhSb3V0ZXIpOiBDYW5BY3RpdmF0ZUZuIHtcbiAgcmV0dXJuIChfLCBzdGF0ZSkgPT4ge1xuICAgIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSAoKSA9PiBhdXRob3JpemVkSGFuZGxlcj8uKGF1dGhTZXJ2aWNlLmdldElkZW50aXR5Q2xhaW1zKCksIHJvdXRlciwgYXV0aFNlcnZpY2UpO1xuXG4gICAgcmV0dXJuIGF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCQucGlwZShcbiAgICAgIG1hcCgoaXNBdXRoZW50aWNhdGVkKSA9PiB7XG4gICAgICAgIGlmICghaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgYXV0aFNlcnZpY2Uuc2lnbkluKHN0YXRlLnVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXV0aG9yaXplZCgpID8/IGlzQXV0aGVudGljYXRlZDtcbiAgICAgIH0pLFxuICAgICAgdGFrZSgxKVxuICAgICk7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,28 +1,26 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
|
-
import { provideModuleConfig } from '@odx/angular/utils';
|
|
3
|
-
import { OktaAuthModule } from '@okta/okta-angular';
|
|
4
2
|
import { AuthComponent } from './auth.component';
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
3
|
+
import { AuthDirective } from './auth.directive';
|
|
4
|
+
import { provideAuth } from './auth.providers';
|
|
7
5
|
import { SignInDirective, SignOutDirective } from './directives';
|
|
8
6
|
import * as i0 from "@angular/core";
|
|
9
|
-
const modules = [AuthComponent, SignInDirective, SignOutDirective];
|
|
7
|
+
const modules = [AuthComponent, AuthDirective, SignInDirective, SignOutDirective];
|
|
10
8
|
export class AuthModule {
|
|
11
9
|
static forRoot(config) {
|
|
12
10
|
return {
|
|
13
11
|
ngModule: AuthModule,
|
|
14
|
-
providers: [
|
|
12
|
+
providers: [provideAuth(config)],
|
|
15
13
|
};
|
|
16
14
|
}
|
|
17
15
|
}
|
|
18
|
-
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
19
|
-
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.
|
|
20
|
-
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.
|
|
21
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
16
|
+
AuthModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
AuthModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: AuthModule, imports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective], exports: [AuthComponent, AuthDirective, SignInDirective, SignOutDirective] });
|
|
18
|
+
AuthModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthModule, imports: [AuthComponent] });
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthModule, decorators: [{
|
|
22
20
|
type: NgModule,
|
|
23
21
|
args: [{
|
|
24
22
|
imports: [...modules],
|
|
25
|
-
exports: [
|
|
23
|
+
exports: [...modules],
|
|
26
24
|
}]
|
|
27
25
|
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUVqRSxNQUFNLE9BQU8sR0FBRyxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFNbEYsTUFBTSxPQUFPLFVBQVU7SUFDZCxNQUFNLENBQUMsT0FBTyxDQUFxQyxNQUEwRDtRQUNsSCxPQUFPO1lBQ0wsUUFBUSxFQUFFLFVBQVU7WUFDcEIsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2pDLENBQUM7SUFDSixDQUFDOzt1R0FOVSxVQUFVO3dHQUFWLFVBQVUsWUFOTixhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsYUFBL0QsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO3dHQU1uRSxVQUFVLFlBTk4sYUFBYTsyRkFNakIsVUFBVTtrQkFKdEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDckIsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ0RlcGVuZGVuY2llcywgTW9kdWxlQ29uZmlnUHJvdmlkZXIgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgQXV0aENvbXBvbmVudCB9IGZyb20gJy4vYXV0aC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0aE1vZHVsZUNvbmZpZyB9IGZyb20gJy4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHsgQXV0aERpcmVjdGl2ZSB9IGZyb20gJy4vYXV0aC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgcHJvdmlkZUF1dGggfSBmcm9tICcuL2F1dGgucHJvdmlkZXJzJztcbmltcG9ydCB7IFNpZ25JbkRpcmVjdGl2ZSwgU2lnbk91dERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcyc7XG5cbmNvbnN0IG1vZHVsZXMgPSBbQXV0aENvbXBvbmVudCwgQXV0aERpcmVjdGl2ZSwgU2lnbkluRGlyZWN0aXZlLCBTaWduT3V0RGlyZWN0aXZlXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLm1vZHVsZXNdLFxuICBleHBvcnRzOiBbLi4ubW9kdWxlc10sXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhNb2R1bGUge1xuICBwdWJsaWMgc3RhdGljIGZvclJvb3Q8RCBleHRlbmRzIE1vZHVsZUNvbmZpZ0RlcGVuZGVuY2llcz4oY29uZmlnOiBNb2R1bGVDb25maWdQcm92aWRlcjxQYXJ0aWFsPEF1dGhNb2R1bGVDb25maWc+LCBEPik6IE1vZHVsZVdpdGhQcm92aWRlcnM8QXV0aE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW3Byb3ZpZGVBdXRoKGNvbmZpZyldLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,50 +1,61 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { APP_INITIALIZER, inject } from '@angular/core';
|
|
3
|
-
import { Router } from '@angular/router';
|
|
1
|
+
import { APP_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';
|
|
4
2
|
import { WindowRef } from '@odx/angular';
|
|
5
|
-
import { buildUrl } from '@odx/angular/utils';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { DEFAULT_AUTH_SCOPES, injectAuthModuleConfig } from './auth.config';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
3
|
+
import { buildUrl, provideModuleConfig } from '@odx/angular/utils';
|
|
4
|
+
import { OAuthModuleConfig, OAuthStorage, provideOAuthClient } from 'angular-oauth2-oidc';
|
|
5
|
+
import { AuthErrorHandler, NoopAuthErrorHandler } from './auth-error-handler';
|
|
6
|
+
import { AuthModuleConfig, DEFAULT_AUTH_SCOPES, DEFAULT_ISSUERS, injectAuthModuleConfig } from './auth.config';
|
|
7
|
+
import { AuthService } from './auth.service';
|
|
8
|
+
export function configureInterceptor() {
|
|
9
|
+
const { allowedUrls } = injectAuthModuleConfig();
|
|
10
|
+
return {
|
|
11
|
+
resourceServer: {
|
|
12
|
+
customUrlValidation: (url) => allowedUrls.some((allowedUrl) => !!url.match(allowedUrl)),
|
|
13
|
+
sendAccessToken: true,
|
|
14
|
+
},
|
|
16
15
|
};
|
|
17
16
|
}
|
|
18
17
|
export function initalizeAuthConfig() {
|
|
19
|
-
const { clientId, scopes, redirectPath, environment,
|
|
18
|
+
const { clientId, scopes, redirectPath, environment, postLogoutRedirectUrl, issuer, timeoutFactor, discoveryUrl } = injectAuthModuleConfig();
|
|
19
|
+
const authService = inject(AuthService);
|
|
20
20
|
const origin = inject(WindowRef).getOrigin();
|
|
21
|
-
const
|
|
21
|
+
const scope = Array.from(new Set(DEFAULT_AUTH_SCOPES.concat(scopes ?? []))).join(' ');
|
|
22
|
+
return () => authService.initialize({
|
|
23
|
+
clientId,
|
|
24
|
+
issuer: issuer ?? DEFAULT_ISSUERS[environment],
|
|
25
|
+
scope,
|
|
26
|
+
redirectUri: buildUrl(origin, redirectPath),
|
|
27
|
+
postLogoutRedirectUri: postLogoutRedirectUrl,
|
|
28
|
+
preserveRequestedRoute: true,
|
|
29
|
+
strictDiscoveryDocumentValidation: !discoveryUrl,
|
|
30
|
+
responseType: 'code',
|
|
31
|
+
showDebugInformation: environment === 'dev',
|
|
32
|
+
timeoutFactor,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function provideAuthErrorHandler(errorHandler) {
|
|
22
36
|
return {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
clientId,
|
|
26
|
-
redirectUri: buildUrl(origin, redirectPath),
|
|
27
|
-
scopes: Array.from(new Set(DEFAULT_AUTH_SCOPES.concat(scopes ?? []))),
|
|
28
|
-
pkce: true,
|
|
29
|
-
devMode: environment === 'dev',
|
|
30
|
-
postLogoutRedirectUri,
|
|
31
|
-
}),
|
|
37
|
+
provide: AuthErrorHandler,
|
|
38
|
+
useClass: errorHandler,
|
|
32
39
|
};
|
|
33
40
|
}
|
|
34
|
-
export
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
41
|
+
export function provideAuth(config) {
|
|
42
|
+
return makeEnvironmentProviders([
|
|
43
|
+
provideModuleConfig(AuthModuleConfig, config),
|
|
44
|
+
provideOAuthClient(),
|
|
45
|
+
provideAuthErrorHandler(NoopAuthErrorHandler),
|
|
46
|
+
{
|
|
47
|
+
provide: OAuthModuleConfig,
|
|
48
|
+
useFactory: configureInterceptor,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
provide: APP_INITIALIZER,
|
|
52
|
+
useFactory: initalizeAuthConfig,
|
|
53
|
+
multi: true,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
provide: OAuthStorage,
|
|
57
|
+
useFactory: () => inject(WindowRef).nativeWindow.localStorage,
|
|
58
|
+
},
|
|
59
|
+
]);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2F1dGgvc3JjL2xpYi9hdXRoLnByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUF1QyxNQUFNLEVBQUUsd0JBQXdCLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFrRCxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2pELE9BQU87UUFDTCxjQUFjLEVBQUU7WUFDZCxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkYsZUFBZSxFQUFFLElBQUk7U0FDdEI7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLHNCQUFzQixFQUFFLENBQUM7SUFDN0ksTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV0RixPQUFPLEdBQUcsRUFBRSxDQUNWLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDckIsUUFBUTtRQUNSLE1BQU0sRUFBRSxNQUFNLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxLQUFLO1FBQ0wsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO1FBQzNDLHFCQUFxQixFQUFFLHFCQUFxQjtRQUM1QyxzQkFBc0IsRUFBRSxJQUFJO1FBQzVCLGlDQUFpQyxFQUFFLENBQUMsWUFBWTtRQUNoRCxZQUFZLEVBQUUsTUFBTTtRQUNwQixvQkFBb0IsRUFBRSxXQUFXLEtBQUssS0FBSztRQUMzQyxhQUFhO0tBQ2QsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxZQUFvQztJQUMxRSxPQUFPO1FBQ0wsT0FBTyxFQUFFLGdCQUFnQjtRQUN6QixRQUFRLEVBQUUsWUFBWTtLQUN2QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQXFDLE1BQTBEO0lBQ3hILE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO1FBQzdDLGtCQUFrQixFQUFFO1FBQ3BCLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1FBQzdDO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixVQUFVLEVBQUUsb0JBQW9CO1NBQ2pDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsbUJBQW1CO1lBQy9CLEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRDtZQUNFLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLFlBQVk7U0FDOUQ7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBDbGFzc1Byb3ZpZGVyLCBFbnZpcm9ubWVudFByb3ZpZGVycywgaW5qZWN0LCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BvZHgvYW5ndWxhcic7XG5pbXBvcnQgeyBidWlsZFVybCwgTW9kdWxlQ29uZmlnRGVwZW5kZW5jaWVzLCBNb2R1bGVDb25maWdQcm92aWRlciwgcHJvdmlkZU1vZHVsZUNvbmZpZyB9IGZyb20gJ0BvZHgvYW5ndWxhci91dGlscyc7XG5pbXBvcnQgeyBPQXV0aE1vZHVsZUNvbmZpZywgT0F1dGhTdG9yYWdlLCBwcm92aWRlT0F1dGhDbGllbnQgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7IEF1dGhFcnJvckhhbmRsZXIsIE5vb3BBdXRoRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9hdXRoLWVycm9yLWhhbmRsZXInO1xuaW1wb3J0IHsgQXV0aE1vZHVsZUNvbmZpZywgREVGQVVMVF9BVVRIX1NDT1BFUywgREVGQVVMVF9JU1NVRVJTLCBpbmplY3RBdXRoTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZUludGVyY2VwdG9yKCk6IE9BdXRoTW9kdWxlQ29uZmlnIHtcbiAgY29uc3QgeyBhbGxvd2VkVXJscyB9ID0gaW5qZWN0QXV0aE1vZHVsZUNvbmZpZygpO1xuICByZXR1cm4ge1xuICAgIHJlc291cmNlU2VydmVyOiB7XG4gICAgICBjdXN0b21VcmxWYWxpZGF0aW9uOiAodXJsKSA9PiBhbGxvd2VkVXJscy5zb21lKChhbGxvd2VkVXJsKSA9PiAhIXVybC5tYXRjaChhbGxvd2VkVXJsKSksXG4gICAgICBzZW5kQWNjZXNzVG9rZW46IHRydWUsXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRhbGl6ZUF1dGhDb25maWcoKTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY2xpZW50SWQsIHNjb3BlcywgcmVkaXJlY3RQYXRoLCBlbnZpcm9ubWVudCwgcG9zdExvZ291dFJlZGlyZWN0VXJsLCBpc3N1ZXIsIHRpbWVvdXRGYWN0b3IsIGRpc2NvdmVyeVVybCB9ID0gaW5qZWN0QXV0aE1vZHVsZUNvbmZpZygpO1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIGNvbnN0IG9yaWdpbiA9IGluamVjdChXaW5kb3dSZWYpLmdldE9yaWdpbigpO1xuICBjb25zdCBzY29wZSA9IEFycmF5LmZyb20obmV3IFNldChERUZBVUxUX0FVVEhfU0NPUEVTLmNvbmNhdChzY29wZXMgPz8gW10pKSkuam9pbignICcpO1xuXG4gIHJldHVybiAoKSA9PlxuICAgIGF1dGhTZXJ2aWNlLmluaXRpYWxpemUoe1xuICAgICAgY2xpZW50SWQsXG4gICAgICBpc3N1ZXI6IGlzc3VlciA/PyBERUZBVUxUX0lTU1VFUlNbZW52aXJvbm1lbnRdLFxuICAgICAgc2NvcGUsXG4gICAgICByZWRpcmVjdFVyaTogYnVpbGRVcmwob3JpZ2luLCByZWRpcmVjdFBhdGgpLFxuICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBwb3N0TG9nb3V0UmVkaXJlY3RVcmwsXG4gICAgICBwcmVzZXJ2ZVJlcXVlc3RlZFJvdXRlOiB0cnVlLFxuICAgICAgc3RyaWN0RGlzY292ZXJ5RG9jdW1lbnRWYWxpZGF0aW9uOiAhZGlzY292ZXJ5VXJsLFxuICAgICAgcmVzcG9uc2VUeXBlOiAnY29kZScsXG4gICAgICBzaG93RGVidWdJbmZvcm1hdGlvbjogZW52aXJvbm1lbnQgPT09ICdkZXYnLFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBdXRoRXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcjogVHlwZTxBdXRoRXJyb3JIYW5kbGVyPik6IENsYXNzUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEF1dGhFcnJvckhhbmRsZXIsXG4gICAgdXNlQ2xhc3M6IGVycm9ySGFuZGxlcixcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBdXRoPEQgZXh0ZW5kcyBNb2R1bGVDb25maWdEZXBlbmRlbmNpZXM+KGNvbmZpZzogTW9kdWxlQ29uZmlnUHJvdmlkZXI8UGFydGlhbDxBdXRoTW9kdWxlQ29uZmlnPiwgRD4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHByb3ZpZGVNb2R1bGVDb25maWcoQXV0aE1vZHVsZUNvbmZpZywgY29uZmlnKSxcbiAgICBwcm92aWRlT0F1dGhDbGllbnQoKSxcbiAgICBwcm92aWRlQXV0aEVycm9ySGFuZGxlcihOb29wQXV0aEVycm9ySGFuZGxlciksXG4gICAge1xuICAgICAgcHJvdmlkZTogT0F1dGhNb2R1bGVDb25maWcsXG4gICAgICB1c2VGYWN0b3J5OiBjb25maWd1cmVJbnRlcmNlcHRvcixcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIHVzZUZhY3Rvcnk6IGluaXRhbGl6ZUF1dGhDb25maWcsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE9BdXRoU3RvcmFnZSxcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IGluamVjdChXaW5kb3dSZWYpLm5hdGl2ZVdpbmRvdy5sb2NhbFN0b3JhZ2UsXG4gICAgfSxcbiAgXSk7XG59XG4iXX0=
|
|
@@ -1,37 +1,103 @@
|
|
|
1
1
|
import { inject, Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { Router } from '@angular/router';
|
|
3
|
+
import { WindowRef } from '@odx/angular';
|
|
4
|
+
import { OAuthErrorEvent, OAuthService } from 'angular-oauth2-oidc';
|
|
5
|
+
import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, fromEvent, map, merge, share, shareReplay, startWith, switchMap, tap, } from 'rxjs';
|
|
6
|
+
import { AuthErrorHandler } from './auth-error-handler';
|
|
7
|
+
import { injectAuthModuleConfig } from './auth.config';
|
|
8
|
+
import { parseIdentityClaims } from './helpers/parse-identity-claims';
|
|
4
9
|
import * as i0 from "@angular/core";
|
|
5
10
|
export class AuthService {
|
|
6
11
|
constructor() {
|
|
7
|
-
this.
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
12
|
+
this.authConfig = injectAuthModuleConfig();
|
|
13
|
+
this.errorHandler = inject(AuthErrorHandler);
|
|
14
|
+
this.oauthService = inject(OAuthService);
|
|
15
|
+
this.router = inject(Router);
|
|
16
|
+
this.windowRef = inject(WindowRef);
|
|
17
|
+
this.isInitialized$$ = new BehaviorSubject(false);
|
|
18
|
+
this.onAccessTokenUpdate$ = fromEvent(this.windowRef.nativeWindow, 'storage').pipe(filter(({ key }) => key === 'access_token' || key === null), startWith(null), share());
|
|
19
|
+
this.onAuthStateChange$ = combineLatest([this.oauthService.events.pipe(startWith(null)), this.windowRef.isOnline$, this.onAccessTokenUpdate$]);
|
|
20
|
+
this.isAuthenticated$ = this.isInitialized$$.pipe(filter(Boolean), switchMap(() => this.onAuthStateChange$), map(() => this.isAuthenticated()), distinctUntilChanged(), shareReplay({ refCount: true }));
|
|
21
|
+
this.identityClaims$ = this.isAuthenticated$.pipe(map(() => this.getIdentityClaims()), shareReplay({ refCount: true }));
|
|
22
|
+
this.errors$ = this.oauthService.events.pipe(filter((event) => event instanceof OAuthErrorEvent), share());
|
|
23
|
+
this.subscription = merge(this.errors$.pipe(tap((error) => {
|
|
24
|
+
this.errorHandler.handleError(error);
|
|
25
|
+
})), this.windowRef.isOnline$.pipe(tap((isOnline) => {
|
|
26
|
+
if (isOnline) {
|
|
27
|
+
this.oauthService.setupAutomaticSilentRefresh();
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.oauthService.stopAutomaticRefresh();
|
|
31
|
+
}
|
|
32
|
+
}))).subscribe();
|
|
11
33
|
}
|
|
12
|
-
|
|
13
|
-
|
|
34
|
+
ngOnDestroy() {
|
|
35
|
+
this.subscription.unsubscribe();
|
|
14
36
|
}
|
|
15
|
-
async
|
|
16
|
-
|
|
37
|
+
async initialize(config) {
|
|
38
|
+
this.oauthService.configure(config);
|
|
39
|
+
try {
|
|
40
|
+
await this.oauthService.loadDiscoveryDocument(this.authConfig.discoveryUrl);
|
|
41
|
+
await this.oauthService.tryLoginCodeFlow();
|
|
42
|
+
if (this.getRefreshToken() && !this.isAuthenticated()) {
|
|
43
|
+
await this.oauthService.refreshToken();
|
|
44
|
+
}
|
|
45
|
+
this.isInitialized$$.next(true);
|
|
46
|
+
if (this.authConfig.loadUserProfile && this.oauthService.hasValidAccessToken()) {
|
|
47
|
+
await this.loadUserProfile();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// ignore errors
|
|
52
|
+
}
|
|
53
|
+
if (this.oauthService.hasValidAccessToken()) {
|
|
54
|
+
await this.routeToRequestedUrl();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
signIn(url) {
|
|
58
|
+
this.oauthService.initCodeFlow(url);
|
|
59
|
+
}
|
|
60
|
+
signOut() {
|
|
61
|
+
this.oauthService.logOut(!this.getAccessToken());
|
|
62
|
+
}
|
|
63
|
+
async loadUserProfile() {
|
|
64
|
+
await this.oauthService.loadUserProfile();
|
|
17
65
|
}
|
|
18
66
|
getAccessToken() {
|
|
19
|
-
return this.
|
|
67
|
+
return this.oauthService.getAccessToken() ?? null;
|
|
20
68
|
}
|
|
21
69
|
getRefreshToken() {
|
|
22
|
-
return this.
|
|
70
|
+
return this.oauthService.getRefreshToken() ?? null;
|
|
71
|
+
}
|
|
72
|
+
getIdToken() {
|
|
73
|
+
return this.oauthService.getIdToken() ?? null;
|
|
74
|
+
}
|
|
75
|
+
getIdentityClaims() {
|
|
76
|
+
return this.getIdToken() ? parseIdentityClaims(this.oauthService.getIdentityClaims()) : null;
|
|
77
|
+
}
|
|
78
|
+
isAuthenticated() {
|
|
79
|
+
if (this.windowRef.isOnline()) {
|
|
80
|
+
return this.oauthService.hasValidAccessToken() && this.oauthService.hasValidIdToken();
|
|
81
|
+
}
|
|
82
|
+
return this.hasValidOfflineToken();
|
|
83
|
+
}
|
|
84
|
+
isAuthorized(authorizedHandler) {
|
|
85
|
+
return this.isAuthenticated() && (authorizedHandler?.(this.getIdentityClaims(), this) ?? true);
|
|
23
86
|
}
|
|
24
|
-
|
|
25
|
-
|
|
87
|
+
async routeToRequestedUrl() {
|
|
88
|
+
if (this.oauthService.state) {
|
|
89
|
+
await this.router.navigateByUrl(decodeURIComponent(this.oauthService.state));
|
|
90
|
+
}
|
|
26
91
|
}
|
|
27
|
-
|
|
28
|
-
|
|
92
|
+
hasValidOfflineToken() {
|
|
93
|
+
const issuedAt = this.getIdentityClaims()?.iat ?? 0;
|
|
94
|
+
return Date.now() - issuedAt * 1000 <= this.authConfig.maxOfflineTime * 1000;
|
|
29
95
|
}
|
|
30
96
|
}
|
|
31
|
-
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
32
|
-
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
97
|
+
AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
98
|
+
AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
99
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: AuthService, decorators: [{
|
|
34
100
|
type: Injectable,
|
|
35
101
|
args: [{ providedIn: 'root' }]
|
|
36
|
-
}] });
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsR0FBRyxFQUFjLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFJcEQsTUFBTSxPQUFPLFdBQVc7SUFEeEI7UUFFbUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixjQUFTLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFMUMscUJBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMvRCxHQUFHLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQy9DLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNoQyxDQUFDO1FBQ2MsVUFBSyxHQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQzdFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQzdDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUNoQyxDQUFDO0tBeUJIO0lBdkJRLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBRU0sZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFTSxhQUFhO1FBQ2xCLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFTSxhQUFhLENBQUMsTUFBb0Q7UUFDdkUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDOzt3R0FuQ1UsV0FBVzs0R0FBWCxXQUFXLGNBREUsTUFBTTsyRkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9rdGFBdXRoU3RhdGVTZXJ2aWNlLCBPS1RBX0FVVEggfSBmcm9tICdAb2t0YS9va3RhLWFuZ3VsYXInO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vbW9kZWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0aCA9IGluamVjdChPS1RBX0FVVEgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTdGF0ZSA9IGluamVjdChPa3RhQXV0aFN0YXRlU2VydmljZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzQXV0aGVudGljYXRlZCQgPSB0aGlzLmF1dGhTdGF0ZS5hdXRoU3RhdGUkLnBpcGUoXG4gICAgbWFwKCh7IGlzQXV0aGVudGljYXRlZCB9KSA9PiAhIWlzQXV0aGVudGljYXRlZCksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSB9KVxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlciQ6IE9ic2VydmFibGU8VXNlciB8IG51bGw+ID0gdGhpcy5hdXRoU3RhdGUuYXV0aFN0YXRlJC5waXBlKFxuICAgIG1hcCgoeyBpZFRva2VuIH0pID0+IGlkVG9rZW4/LmNsYWltcyA/PyBudWxsKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlIH0pXG4gICk7XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmF1dGguc2lnbkluV2l0aFJlZGlyZWN0KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbk91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmF1dGguc2lnbk91dCgpO1xuICB9XG5cbiAgcHVibGljIGdldEFjY2Vzc1Rva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmF1dGguZ2V0QWNjZXNzVG9rZW4oKSA/PyBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoLmdldFJlZnJlc2hUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXV0aEhlYWRlcigpOiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtzdHJpbmd9YCB9IHtcbiAgICByZXR1cm4geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5nZXRBY2Nlc3NUb2tlbigpfWAgfTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNBbnlHcm91cHMkKGdyb3Vwczogc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU3RhdGUuaGFzQW55R3JvdXBzKGdyb3Vwcyk7XG4gIH1cbn1cbiJdfQ==
|
|
102
|
+
}], ctorParameters: function () { return []; } });
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBYyxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixTQUFTLEVBQ1QsR0FBRyxFQUNILEtBQUssRUFFTCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFFVCxTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUl0RSxNQUFNLE9BQU8sV0FBVztJQWdDdEI7UUE5QmlCLGVBQVUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlCLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEQseUJB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Q0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN2RjtRQUNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLFlBQVksQ0FBQyxpQkFBNEM7UUFDOUQsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CO1FBQy9CLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDM0IsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDOUU7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFcEQsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDL0UsQ0FBQzs7d0dBNUhVLFdBQVc7NEdBQVgsV0FBVyxjQURFLE1BQU07MkZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAb2R4L2FuZ3VsYXInO1xuaW1wb3J0IHsgQXV0aENvbmZpZywgT0F1dGhFcnJvckV2ZW50LCBPQXV0aFNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBzaGFyZSxcbiAgc2hhcmVSZXBsYXksXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9hdXRoLWVycm9yLWhhbmRsZXInO1xuaW1wb3J0IHsgaW5qZWN0QXV0aE1vZHVsZUNvbmZpZyB9IGZyb20gJy4vYXV0aC5jb25maWcnO1xuaW1wb3J0IHsgcGFyc2VJZGVudGl0eUNsYWltcyB9IGZyb20gJy4vaGVscGVycy9wYXJzZS1pZGVudGl0eS1jbGFpbXMnO1xuaW1wb3J0IHsgQXV0aG9yaXplZEhhbmRsZXIgfSBmcm9tICcuL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhDb25maWcgPSBpbmplY3RBdXRoTW9kdWxlQ29uZmlnKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JIYW5kbGVyID0gaW5qZWN0KEF1dGhFcnJvckhhbmRsZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9hdXRoU2VydmljZSA9IGluamVjdChPQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd1JlZiA9IGluamVjdChXaW5kb3dSZWYpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNJbml0aWFsaXplZCQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb25BY2Nlc3NUb2tlblVwZGF0ZSQgPSBmcm9tRXZlbnQ8U3RvcmFnZUV2ZW50Pih0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3csICdzdG9yYWdlJykucGlwZShcbiAgICBmaWx0ZXIoKHsga2V5IH0pID0+IGtleSA9PT0gJ2FjY2Vzc190b2tlbicgfHwga2V5ID09PSBudWxsKSxcbiAgICBzdGFydFdpdGgobnVsbCksXG4gICAgc2hhcmUoKVxuICApO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uQXV0aFN0YXRlQ2hhbmdlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKHN0YXJ0V2l0aChudWxsKSksIHRoaXMud2luZG93UmVmLmlzT25saW5lJCwgdGhpcy5vbkFjY2Vzc1Rva2VuVXBkYXRlJF0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0F1dGhlbnRpY2F0ZWQkID0gdGhpcy5pc0luaXRpYWxpemVkJCQucGlwZShcbiAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMub25BdXRoU3RhdGVDaGFuZ2UkKSxcbiAgICBtYXAoKCkgPT4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlIH0pXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBpZGVudGl0eUNsYWltcyQ6IE9ic2VydmFibGU8T2R4QXV0aC5JZGVudGl5Q2xhaW1zIHwgbnVsbD4gPSB0aGlzLmlzQXV0aGVudGljYXRlZCQucGlwZShcbiAgICBtYXAoKCkgPT4gdGhpcy5nZXRJZGVudGl0eUNsYWltcygpKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlIH0pXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBlcnJvcnMkID0gdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE9BdXRoRXJyb3JFdmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE9BdXRoRXJyb3JFdmVudCksXG4gICAgc2hhcmUoKVxuICApO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbWVyZ2UoXG4gICAgICB0aGlzLmVycm9ycyQucGlwZShcbiAgICAgICAgdGFwKChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICB0aGlzLndpbmRvd1JlZi5pc09ubGluZSQucGlwZShcbiAgICAgICAgdGFwKChpc09ubGluZSkgPT4ge1xuICAgICAgICAgIGlmIChpc09ubGluZSkge1xuICAgICAgICAgICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLnN0b3BBdXRvbWF0aWNSZWZyZXNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKGNvbmZpZzogQXV0aENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmNvbmZpZ3VyZShjb25maWcpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnQodGhpcy5hdXRoQ29uZmlnLmRpc2NvdmVyeVVybCk7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS50cnlMb2dpbkNvZGVGbG93KCk7XG4gICAgICBpZiAodGhpcy5nZXRSZWZyZXNoVG9rZW4oKSAmJiAhdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLm9hdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNJbml0aWFsaXplZCQkLm5leHQodHJ1ZSk7XG4gICAgICBpZiAodGhpcy5hdXRoQ29uZmlnLmxvYWRVc2VyUHJvZmlsZSAmJiB0aGlzLm9hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVXNlclByb2ZpbGUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZSBlcnJvcnNcbiAgICB9XG4gICAgaWYgKHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZVRvUmVxdWVzdGVkVXJsKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNpZ25Jbih1cmw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm9hdXRoU2VydmljZS5pbml0Q29kZUZsb3codXJsKTtcbiAgfVxuXG4gIHB1YmxpYyBzaWduT3V0KCk6IHZvaWQge1xuICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ091dCghdGhpcy5nZXRBY2Nlc3NUb2tlbigpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkVXNlclByb2ZpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aFNlcnZpY2UubG9hZFVzZXJQcm9maWxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjZXNzVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCkgPz8gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmdldFJlZnJlc2hUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWRUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRUb2tlbigpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SWRlbnRpdHlDbGFpbXMoKTogT2R4QXV0aC5JZGVudGl5Q2xhaW1zIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRUb2tlbigpID8gcGFyc2VJZGVudGl0eUNsYWltcyh0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLndpbmRvd1JlZi5pc09ubGluZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpICYmIHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkSWRUb2tlbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYXNWYWxpZE9mZmxpbmVUb2tlbigpO1xuICB9XG5cbiAgcHVibGljIGlzQXV0aG9yaXplZChhdXRob3JpemVkSGFuZGxlcj86IEF1dGhvcml6ZWRIYW5kbGVyIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIChhdXRob3JpemVkSGFuZGxlcj8uKHRoaXMuZ2V0SWRlbnRpdHlDbGFpbXMoKSwgdGhpcykgPz8gdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJvdXRlVG9SZXF1ZXN0ZWRVcmwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMub2F1dGhTZXJ2aWNlLnN0YXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLm9hdXRoU2VydmljZS5zdGF0ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzVmFsaWRPZmZsaW5lVG9rZW4oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNzdWVkQXQgPSB0aGlzLmdldElkZW50aXR5Q2xhaW1zKCk/LmlhdCA/PyAwO1xuXG4gICAgcmV0dXJuIERhdGUubm93KCkgLSBpc3N1ZWRBdCAqIDEwMDAgPD0gdGhpcy5hdXRoQ29uZmlnLm1heE9mZmxpbmVUaW1lICogMTAwMDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC50eXBpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hdXRoL3NyYy9saWIvYXV0aC50eXBpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGdsb2JhbCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gIG5hbWVzcGFjZSBPZHhBdXRoIHtcbiAgICBpbnRlcmZhY2UgSWRlbnRpeUNsYWltcyB7XG4gICAgICBzdWI6IHN0cmluZztcbiAgICAgIG9rdGFpZDogc3RyaW5nO1xuICAgICAgaWF0OiBudW1iZXI7XG5cbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGZpcnN0bmFtZTogc3RyaW5nO1xuICAgICAgbGFzdG5hbWU6IHN0cmluZztcbiAgICAgIGRpc3BsYXluYW1lOiBzdHJpbmc7XG4gICAgICBwcmVmZXJyZWRfdXNlcm5hbWU6IHN0cmluZztcbiAgICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgICBpbml0aWFsczogc3RyaW5nO1xuXG4gICAgICBsb2NhbGU/OiBzdHJpbmc7XG4gICAgICB6b25laW5mbz86IHN0cmluZztcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHt9O1xuIl19
|