@bravobit/bb-foundation 0.42.0 → 0.42.2
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/auth/lib/auth.interceptor.d.ts +3 -6
- package/auth/lib/auth.service.d.ts +11 -16
- package/dialog/lib/dialog-confirm/dialog-confirm.component.d.ts +2 -5
- package/dialog/lib/dialog-container/dialog-container.component.d.ts +4 -6
- package/dialog/lib/dialog-overlay/dialog-overlay.component.d.ts +5 -7
- package/esm2022/auth/lib/auth.interceptor.mjs +36 -42
- package/esm2022/auth/lib/auth.module.mjs +4 -4
- package/esm2022/auth/lib/auth.service.mjs +25 -41
- package/esm2022/auth/lib/auth.session.mjs +26 -22
- package/esm2022/auth/lib/directives/authenticated.directive.mjs +16 -12
- package/esm2022/auth/lib/helpers/jwt.helper.mjs +29 -31
- package/esm2022/auth/lib/providers/email.provider.mjs +4 -1
- package/esm2022/auth/lib/providers/verify.provider.mjs +4 -1
- package/esm2022/collections/lib/collection.mjs +17 -7
- package/esm2022/collections/lib/collections.module.mjs +6 -6
- package/esm2022/collections/lib/components/collections-actions/collections-actions.component.mjs +7 -9
- package/esm2022/collections/lib/components/collections-grid/collections-grid.component.mjs +11 -11
- package/esm2022/collections/lib/components/collections-pager/collections-pager.component.mjs +10 -10
- package/esm2022/collections/lib/components/collections-table/collections-table.component.mjs +16 -16
- package/esm2022/collections/lib/components/collections-table-label/collections-table-label.component.mjs +9 -11
- package/esm2022/collections/lib/components/collections-table-sorting/collections-table-sorting.component.mjs +12 -9
- package/esm2022/collections/lib/components/collections-viewer/collections-viewer.component.mjs +10 -7
- package/esm2022/collections/lib/directives/collections-data-row.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-data.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-empty.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-error.directive.mjs +6 -3
- package/esm2022/collections/lib/directives/collections-initial.directive.mjs +4 -3
- package/esm2022/collections/lib/directives/collections-item.directive.mjs +6 -3
- package/esm2022/collections/lib/providers/api-collection.provider.mjs +6 -4
- package/esm2022/collections/lib/providers/local-collection.provider.mjs +2 -2
- package/esm2022/combobox/combobox/combobox-container.directive.mjs +12 -7
- package/esm2022/combobox/combobox/combobox.component.mjs +23 -20
- package/esm2022/combobox/combobox-label.directive.mjs +3 -3
- package/esm2022/combobox/combobox-option.directive.mjs +3 -3
- package/esm2022/combobox/combobox-panel/combobox-panel.component.mjs +10 -6
- package/esm2022/dashboard/lib/dashboard/dashboard.component.mjs +13 -13
- package/esm2022/dashboard/lib/dashboard-header/dashboard-header.component.mjs +5 -7
- package/esm2022/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +8 -10
- package/esm2022/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +5 -7
- package/esm2022/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +12 -13
- package/esm2022/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +13 -12
- package/esm2022/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +7 -5
- package/esm2022/dashboard/lib/dashboard.module.mjs +5 -5
- package/esm2022/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
- package/esm2022/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +21 -20
- package/esm2022/dialog/lib/dialog-container/dialog-container.component.mjs +19 -24
- package/esm2022/dialog/lib/dialog-header/dialog-header.component.mjs +5 -7
- package/esm2022/dialog/lib/dialog-link/dialog-link.component.mjs +3 -3
- package/esm2022/dialog/lib/dialog-modal/dialog-modal.component.mjs +9 -6
- package/esm2022/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +19 -26
- package/esm2022/dialog/lib/dialog.insertion.mjs +4 -3
- package/esm2022/dialog/lib/dialog.interfaces.mjs +4 -1
- package/esm2022/dialog/lib/dialog.module.mjs +6 -6
- package/esm2022/dialog/lib/dialog.ref.mjs +4 -6
- package/esm2022/dialog/lib/dialog.service.mjs +5 -3
- package/esm2022/dialog/lib/directives/confirm.directive.mjs +12 -14
- package/esm2022/elements/lib/avatar/avatar.component.mjs +75 -77
- package/esm2022/elements/lib/button/button.component.mjs +12 -10
- package/esm2022/elements/lib/checkbox/checkbox.component.mjs +21 -17
- package/esm2022/elements/lib/checkbox-group/checkbox-group.component.mjs +8 -10
- package/esm2022/elements/lib/date-picker/date-picker.component.mjs +82 -76
- package/esm2022/elements/lib/directives/addon.directive.mjs +5 -5
- package/esm2022/elements/lib/directives/extra-error-controls.directive.mjs +7 -9
- package/esm2022/elements/lib/directives/form-submit.directive.mjs +6 -3
- package/esm2022/elements/lib/directives/form-submitter.directive.mjs +5 -7
- package/esm2022/elements/lib/directives/image-upload.directive.mjs +14 -11
- package/esm2022/elements/lib/directives/input.directive.mjs +6 -4
- package/esm2022/elements/lib/elements.module.mjs +6 -6
- package/esm2022/elements/lib/file-picker/file-picker.component.mjs +52 -51
- package/esm2022/elements/lib/form-control/form-control.component.mjs +14 -14
- package/esm2022/elements/lib/form-error/form-error.component.mjs +16 -8
- package/esm2022/elements/lib/form-group/form-group.component.mjs +5 -7
- package/esm2022/elements/lib/icon/icon.component.mjs +14 -13
- package/esm2022/elements/lib/image-picker/image-picker.component.mjs +20 -17
- package/esm2022/elements/lib/multi-file-control/multi-file-control.component.mjs +28 -24
- package/esm2022/elements/lib/pipes/date.pipe.mjs +6 -8
- package/esm2022/elements/lib/pipes/file-image.pipe.mjs +6 -3
- package/esm2022/elements/lib/pipes/file-size.pipe.mjs +13 -15
- package/esm2022/elements/lib/pipes/relative-time.pipe.mjs +37 -35
- package/esm2022/elements/lib/radio-button/radio-button.component.mjs +8 -7
- package/esm2022/elements/lib/radio-group/radio-group.component.mjs +21 -20
- package/esm2022/elements/lib/spinner/spinner.component.mjs +7 -9
- package/esm2022/http/lib/classes/http.config.mjs +19 -15
- package/esm2022/http/lib/http.interfaces.mjs +1 -1
- package/esm2022/http/lib/http.module.mjs +5 -4
- package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +12 -20
- package/esm2022/http/lib/interceptors/error.interceptor.mjs +9 -14
- package/esm2022/lib/core/services/exif.service.mjs +102 -100
- package/esm2022/lib/core/services/file-loader.service.mjs +15 -17
- package/esm2022/lib/core/services/files.service.mjs +9 -17
- package/esm2022/lib/core/services/image-converter.service.mjs +33 -30
- package/esm2022/lib/core/services/languages.service.mjs +25 -24
- package/esm2022/lib/core/services/network.service.mjs +8 -5
- package/esm2022/lib/core/services/patch.service.mjs +9 -6
- package/esm2022/localize/lib/dictionary/dictionary.class.mjs +7 -1
- package/esm2022/localize/lib/dictionary/dictionary.context.mjs +2 -4
- package/esm2022/localize/lib/dictionary/dictionary.data.mjs +2 -1
- package/esm2022/localize/lib/handlers/missing.handler.mjs +2 -4
- package/esm2022/localize/lib/localize.module.mjs +5 -5
- package/esm2022/localize/lib/localize.pipe.mjs +4 -3
- package/esm2022/localize/lib/localize.service.mjs +36 -62
- package/esm2022/localize/lib/transforms/interpolate.transform.mjs +12 -22
- package/esm2022/localize/lib/transforms/plural.transform.mjs +9 -18
- package/esm2022/localize/lib/transforms/reference.transform.mjs +7 -15
- package/esm2022/localize/lib/views/localize-string/localize-string.component.mjs +14 -11
- package/esm2022/localize/lib/views/localize-template.directive.mjs +6 -5
- package/esm2022/masking/lib/directives/currency-mask.directive.mjs +11 -6
- package/esm2022/masking/lib/directives/date-mask.directive.mjs +11 -6
- package/esm2022/masking/lib/directives/input-mask.directive.mjs +21 -14
- package/esm2022/masking/lib/masking.module.mjs +5 -5
- package/esm2022/masking/lib/masking.service.mjs +4 -3
- package/esm2022/notifications/lib/notifications-item/notifications-item.component.mjs +50 -36
- package/esm2022/notifications/lib/notifications-list/notifications-list.component.mjs +8 -7
- package/esm2022/notifications/lib/notifications.interfaces.mjs +10 -1
- package/esm2022/notifications/lib/notifications.module.mjs +4 -4
- package/esm2022/notifications/lib/notifications.service.mjs +24 -10
- package/esm2022/permissions/lib/directives/permission.directive.mjs +20 -14
- package/esm2022/permissions/lib/handlers/local.handler.mjs +3 -1
- package/esm2022/permissions/lib/permissions.interface.mjs +4 -1
- package/esm2022/permissions/lib/permissions.module.mjs +4 -4
- package/esm2022/permissions/lib/permissions.service.mjs +8 -7
- package/esm2022/recaptcha/lib/recaptcha/recaptcha.component.mjs +35 -28
- package/esm2022/recaptcha/lib/recaptcha-loader.service.mjs +15 -15
- package/esm2022/recaptcha/lib/recaptcha.module.mjs +4 -4
- package/esm2022/select/lib/select/select.component.mjs +52 -47
- package/esm2022/select/lib/select-label.directive.mjs +4 -3
- package/esm2022/select/lib/select-multi-label.directive.mjs +4 -3
- package/esm2022/select/lib/select-option-group.directive.mjs +4 -3
- package/esm2022/select/lib/select-option.directive.mjs +4 -3
- package/esm2022/select/lib/select.module.mjs +5 -5
- package/esm2022/storage/lib/storage.service.mjs +25 -21
- package/esm2022/storage/lib/strategies/cookie-storage.strategy.mjs +66 -64
- package/esm2022/storage/lib/strategies/memory-storage.strategy.mjs +16 -18
- package/esm2022/storage/lib/strategies/polyfill-storage.strategy.mjs +31 -30
- package/esm2022/table/lib/components/table/table.component.mjs +30 -20
- package/esm2022/table/lib/components/table-cell/table-cell.component.mjs +3 -3
- package/esm2022/table/lib/components/table-header-cell/table-header-cell.component.mjs +15 -11
- package/esm2022/table/lib/components/table-pager/table-pager.component.mjs +18 -16
- package/esm2022/table/lib/data/datasource.data.mjs +4 -6
- package/esm2022/table/lib/data/generic.data.mjs +38 -36
- package/esm2022/table/lib/table.module.mjs +6 -6
- package/esm2022/tooltip/lib/tooltip-container/tooltip-container.component.mjs +5 -7
- package/esm2022/tooltip/lib/tooltip.directive.mjs +15 -15
- package/esm2022/tooltip/lib/tooltip.module.mjs +4 -4
- package/esm2022/utils/lib/directives/autosize.directive.mjs +9 -7
- package/esm2022/utils/lib/directives/focus-trap.directive.mjs +24 -22
- package/esm2022/utils/lib/directives/focus.directive.mjs +8 -5
- package/esm2022/utils/lib/directives/template.directive.mjs +7 -3
- package/esm2022/utils/lib/utils.module.mjs +5 -5
- package/fesm2022/bravobit-bb-foundation-auth.mjs +134 -144
- package/fesm2022/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-collections.mjs +123 -93
- package/fesm2022/bravobit-bb-foundation-collections.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-combobox.mjs +46 -34
- package/fesm2022/bravobit-bb-foundation-combobox.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-dashboard.mjs +60 -64
- package/fesm2022/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-dialog.mjs +97 -103
- package/fesm2022/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-elements.mjs +468 -440
- package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-http.mjs +40 -46
- package/fesm2022/bravobit-bb-foundation-http.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-localize.mjs +91 -130
- package/fesm2022/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-masking.mjs +47 -29
- package/fesm2022/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-notifications.mjs +91 -53
- package/fesm2022/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-permissions.mjs +34 -22
- package/fesm2022/bravobit-bb-foundation-permissions.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-recaptcha.mjs +51 -44
- package/fesm2022/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-select.mjs +67 -58
- package/fesm2022/bravobit-bb-foundation-select.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-storage.mjs +134 -129
- package/fesm2022/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-table.mjs +107 -91
- package/fesm2022/bravobit-bb-foundation-table.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-tooltip.mjs +21 -23
- package/fesm2022/bravobit-bb-foundation-tooltip.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-utils.mjs +48 -37
- package/fesm2022/bravobit-bb-foundation-utils.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation.mjs +194 -191
- package/fesm2022/bravobit-bb-foundation.mjs.map +1 -1
- package/http/lib/http.interfaces.d.ts +2 -1
- package/http/lib/interceptors/base-url.interceptor.d.ts +2 -4
- package/http/lib/interceptors/error.interceptor.d.ts +1 -3
- package/lib/core/services/files.service.d.ts +3 -7
- package/localize/lib/localize.service.d.ts +10 -14
- package/localize/lib/transforms/interpolate.transform.d.ts +4 -5
- package/localize/lib/transforms/plural.transform.d.ts +5 -6
- package/localize/lib/transforms/reference.transform.d.ts +2 -3
- package/package.json +39 -39
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
|
|
2
|
-
import { AuthConfig } from './interfaces/config.interface';
|
|
3
2
|
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import { Auth } from './auth.service';
|
|
5
3
|
import * as i0 from "@angular/core";
|
|
6
4
|
export declare class AuthInterceptor implements HttpInterceptor {
|
|
7
|
-
private _auth;
|
|
8
|
-
private _config?;
|
|
5
|
+
private readonly _auth;
|
|
6
|
+
private readonly _config?;
|
|
9
7
|
private readonly _authHeaderString;
|
|
10
8
|
private readonly _authScheme;
|
|
11
9
|
isRefreshing: boolean;
|
|
12
10
|
refreshingAccessToken$: BehaviorSubject<string>;
|
|
13
|
-
constructor(_auth: Auth, _config?: AuthConfig);
|
|
14
11
|
intercept(request: HttpRequest<unknown>, next: HttpHandler): import("rxjs").Observable<import("@angular/common/http").HttpEvent<any>>;
|
|
15
12
|
private handle401Error;
|
|
16
13
|
private logoutUser;
|
|
17
14
|
private getAccessToken;
|
|
18
15
|
private addAuthorizationHeader;
|
|
19
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AuthInterceptor,
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AuthInterceptor, never>;
|
|
20
17
|
static ɵprov: i0.ɵɵInjectableDeclaration<AuthInterceptor>;
|
|
21
18
|
}
|
|
@@ -1,28 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AuthConfig, AuthRedirectHandler } from './interfaces/config.interface';
|
|
3
|
-
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
|
1
|
+
import { HttpHeaders, HttpParams } from '@angular/common/http';
|
|
4
2
|
import { AuthProvider, AuthSignInResponse } from './interfaces/provider.interface';
|
|
5
|
-
import { Storage } from '@bravobit/bb-foundation/storage';
|
|
6
|
-
import { HttpConfig } from '@bravobit/bb-foundation/http';
|
|
7
3
|
import { Observable } from 'rxjs';
|
|
8
|
-
import { Platform } from '@angular/cdk/platform';
|
|
9
4
|
import { AuthSession } from './auth.session';
|
|
10
5
|
import * as i0 from "@angular/core";
|
|
11
6
|
export declare class Auth {
|
|
12
|
-
private _storage;
|
|
13
|
-
private _injector;
|
|
14
|
-
private _platform;
|
|
15
|
-
private _httpClient;
|
|
16
|
-
private _state?;
|
|
17
|
-
private _config?;
|
|
18
|
-
private _httpConfig?;
|
|
19
|
-
private _handler?;
|
|
7
|
+
private readonly _storage;
|
|
8
|
+
private readonly _injector;
|
|
9
|
+
private readonly _platform;
|
|
10
|
+
private readonly _httpClient;
|
|
11
|
+
private readonly _state?;
|
|
12
|
+
private readonly _config?;
|
|
13
|
+
private readonly _httpConfig?;
|
|
14
|
+
private readonly _handler?;
|
|
20
15
|
private readonly _authStateKey;
|
|
21
16
|
private readonly _httpAlias;
|
|
22
17
|
readonly session: AuthSession;
|
|
23
18
|
readonly user: Observable<any | null>;
|
|
24
19
|
private _refreshHandler;
|
|
25
|
-
constructor(
|
|
20
|
+
constructor();
|
|
26
21
|
initialize(): () => Promise<void>;
|
|
27
22
|
me<T = any>(): Observable<T>;
|
|
28
23
|
signIn(provider: AuthProvider, as?: string[]): Promise<AuthSignInResponse>;
|
|
@@ -51,6 +46,6 @@ export declare class Auth {
|
|
|
51
46
|
private autoRefresh;
|
|
52
47
|
private get router();
|
|
53
48
|
private getUrl;
|
|
54
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<Auth,
|
|
49
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Auth, never>;
|
|
55
50
|
static ɵprov: i0.ɵɵInjectableDeclaration<Auth>;
|
|
56
51
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { AfterViewInit, TemplateRef } from '@angular/core';
|
|
2
2
|
import { BbButton } from '@bravobit/bb-foundation/elements';
|
|
3
|
-
import { BbDialogConfig } from '../dialog.interfaces';
|
|
4
|
-
import { BbDialogRef } from '../dialog.ref';
|
|
5
3
|
import * as i0 from "@angular/core";
|
|
6
4
|
export declare class BbDialogConfirm implements AfterViewInit {
|
|
7
|
-
private _config;
|
|
8
|
-
private _dialogRef;
|
|
5
|
+
private readonly _config;
|
|
6
|
+
private readonly _dialogRef;
|
|
9
7
|
readonly dialogId: string;
|
|
10
8
|
readonly title: string | TemplateRef<any>;
|
|
11
9
|
readonly description: string | TemplateRef<any>;
|
|
@@ -15,7 +13,6 @@ export declare class BbDialogConfirm implements AfterViewInit {
|
|
|
15
13
|
readonly cancelButtonClass: string;
|
|
16
14
|
readonly width: string;
|
|
17
15
|
confirmButton?: BbButton;
|
|
18
|
-
constructor(_config: BbDialogConfig, _dialogRef: BbDialogRef<boolean>);
|
|
19
16
|
ngAfterViewInit(): void;
|
|
20
17
|
onClose(result: boolean): void;
|
|
21
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<BbDialogConfirm, never>;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { ComponentRef,
|
|
2
|
-
import { DialogConfig } from '../dialog.interfaces';
|
|
1
|
+
import { ComponentRef, OnDestroy, OnInit, Type } from '@angular/core';
|
|
3
2
|
import { Subject } from 'rxjs';
|
|
4
3
|
import { BbDialogInsertion } from '../dialog.insertion';
|
|
5
4
|
import { AnimationEvent } from '@angular/animations';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
export declare class BbDialogContainer implements OnInit, OnDestroy {
|
|
8
|
-
private
|
|
9
|
-
private
|
|
7
|
+
private readonly _config?;
|
|
8
|
+
private readonly _elementRef;
|
|
10
9
|
readonly disableContainerAnimations: boolean;
|
|
11
10
|
insertion: BbDialogInsertion;
|
|
12
11
|
componentRef: ComponentRef<any> | null;
|
|
@@ -14,12 +13,11 @@ export declare class BbDialogContainer implements OnInit, OnDestroy {
|
|
|
14
13
|
overlayClicked$: Subject<void>;
|
|
15
14
|
private _subscription;
|
|
16
15
|
get onOverlayClicked(): import("rxjs").Observable<void>;
|
|
17
|
-
constructor(_elementRef: ElementRef, _config?: DialogConfig);
|
|
18
16
|
ngOnInit(): void;
|
|
19
17
|
ngOnDestroy(): void;
|
|
20
18
|
onAnimationDone(event: AnimationEvent): void;
|
|
21
19
|
private listenForClicks;
|
|
22
20
|
private loadChildComponent;
|
|
23
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<BbDialogContainer,
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BbDialogContainer, never>;
|
|
24
22
|
static ɵcmp: i0.ɵɵComponentDeclaration<BbDialogContainer, "bb-dialog-container", never, {}, {}, never, never, true, never>;
|
|
25
23
|
}
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DialogConfig } from '../dialog.interfaces';
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
3
2
|
import { AnimationEvent } from '@angular/animations';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
export declare class BbDialogOverlay implements OnInit, OnDestroy {
|
|
6
|
-
private
|
|
7
|
-
private
|
|
8
|
-
private
|
|
5
|
+
private readonly _config?;
|
|
6
|
+
private readonly _elementRef;
|
|
7
|
+
private readonly _changeDetectorRef;
|
|
9
8
|
readonly disableOverlayAnimations: boolean;
|
|
10
9
|
closeRequested: EventEmitter<void>;
|
|
11
10
|
state: 'open' | 'close';
|
|
12
11
|
private _closed$;
|
|
13
12
|
private _subscription;
|
|
14
|
-
constructor(_elementRef: ElementRef, _changeDetection: ChangeDetectorRef, _config?: DialogConfig);
|
|
15
13
|
ngOnInit(): void;
|
|
16
14
|
ngOnDestroy(): void;
|
|
17
15
|
onKeyEvent(event: KeyboardEvent): void;
|
|
18
16
|
onAnimationDone(event: AnimationEvent): void;
|
|
19
17
|
close(): Promise<void>;
|
|
20
18
|
private listenForClicks;
|
|
21
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<BbDialogOverlay,
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BbDialogOverlay, never>;
|
|
22
20
|
static ɵcmp: i0.ɵɵComponentDeclaration<BbDialogOverlay, "bb-dialog-overlay", never, {}, { "closeRequested": "closeRequested"; }, never, ["[bb-dialog-modal]"], true, never>;
|
|
23
21
|
}
|
|
@@ -2,43 +2,21 @@ import { HttpErrorResponse } from '@angular/common/http';
|
|
|
2
2
|
import { catchError, filter, finalize, switchMap, take } from 'rxjs/operators';
|
|
3
3
|
import { AUTH_CONFIG } from './interfaces/config.interface';
|
|
4
4
|
import { USE_AUTHORIZATION } from './tokens/use-authorization.token';
|
|
5
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
6
5
|
import { HttpError } from '@bravobit/bb-foundation/http';
|
|
7
6
|
import { BehaviorSubject, of, throwError } from 'rxjs';
|
|
7
|
+
import { inject, Injectable } from '@angular/core';
|
|
8
|
+
import { Auth } from './auth.service';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./auth.service";
|
|
10
10
|
export class AuthInterceptor {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.getAccessToken = (request) => {
|
|
21
|
-
// Get the token based on header.
|
|
22
|
-
if (request.headers.has(this._authHeaderString)) {
|
|
23
|
-
return request.headers.get(this._authHeaderString);
|
|
24
|
-
}
|
|
25
|
-
// Return the default access token.
|
|
26
|
-
return this._auth.session.accessToken;
|
|
27
|
-
};
|
|
28
|
-
this.addAuthorizationHeader = (request, accessToken = null) => {
|
|
29
|
-
// Remove auth header when we do not have
|
|
30
|
-
// an access token.
|
|
31
|
-
if (!accessToken) {
|
|
32
|
-
return request.clone({
|
|
33
|
-
headers: request.headers.delete(this._authHeaderString)
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
// Add the auth header to the request.
|
|
37
|
-
return request.clone({
|
|
38
|
-
setHeaders: { [this._authHeaderString]: `${this._authScheme} ${accessToken}` }
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
}
|
|
11
|
+
// Dependencies.
|
|
12
|
+
_auth = inject(Auth);
|
|
13
|
+
_config = inject(AUTH_CONFIG, { optional: true });
|
|
14
|
+
// Readonly data.
|
|
15
|
+
_authHeaderString = this._config?.http?.header ?? 'Authorization';
|
|
16
|
+
_authScheme = this._config?.http?.scheme ?? 'Bearer';
|
|
17
|
+
// Data.
|
|
18
|
+
isRefreshing = false;
|
|
19
|
+
refreshingAccessToken$ = new BehaviorSubject(null);
|
|
42
20
|
intercept(request, next) {
|
|
43
21
|
// 1. Check if the user wants to use the authorization for this request.
|
|
44
22
|
if (!request.context.get(USE_AUTHORIZATION)) {
|
|
@@ -79,15 +57,31 @@ export class AuthInterceptor {
|
|
|
79
57
|
// Return null as data.
|
|
80
58
|
return of(null);
|
|
81
59
|
}
|
|
82
|
-
|
|
83
|
-
|
|
60
|
+
getAccessToken = (request) => {
|
|
61
|
+
// Get the token based on header.
|
|
62
|
+
if (request.headers.has(this._authHeaderString)) {
|
|
63
|
+
return request.headers.get(this._authHeaderString);
|
|
64
|
+
}
|
|
65
|
+
// Return the default access token.
|
|
66
|
+
return this._auth.session.accessToken;
|
|
67
|
+
};
|
|
68
|
+
addAuthorizationHeader = (request, accessToken = null) => {
|
|
69
|
+
// Remove auth header when we do not have
|
|
70
|
+
// an access token.
|
|
71
|
+
if (!accessToken) {
|
|
72
|
+
return request.clone({
|
|
73
|
+
headers: request.headers.delete(this._authHeaderString)
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Add the auth header to the request.
|
|
77
|
+
return request.clone({
|
|
78
|
+
setHeaders: { [this._authHeaderString]: `${this._authScheme} ${accessToken}` }
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
82
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AuthInterceptor });
|
|
84
83
|
}
|
|
85
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AuthInterceptor, decorators: [{
|
|
86
85
|
type: Injectable
|
|
87
|
-
}]
|
|
88
|
-
type: Optional
|
|
89
|
-
}, {
|
|
90
|
-
type: Inject,
|
|
91
|
-
args: [AUTH_CONFIG]
|
|
92
|
-
}] }] });
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUE0QyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFJckQsTUFBTSxPQUFPLGVBQWU7SUFVeEIsWUFBb0IsS0FBVyxFQUNzQixPQUFvQjtRQURyRCxVQUFLLEdBQUwsS0FBSyxDQUFNO1FBQ3NCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFUekUsaUJBQWlCO1FBQ0Esc0JBQWlCLEdBQVcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLGVBQWUsQ0FBQztRQUMxRSxnQkFBVyxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUM7UUFFOUUsUUFBUTtRQUNSLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQWtFMUQsbUJBQWMsR0FB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QUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUM1QixTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQztZQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQ25DLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUM1QyxDQUFDO0lBQ04sQ0FBQztJQUVPLFVBQVU7UUFDZCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTlCLHVCQUF1QjtRQUN2QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDOzhHQXhFUSxlQUFlLHNDQVdRLFdBQVc7a0hBWGxDLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQVlNLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBVVRIX0NPTkZJRywgQXV0aENvbmZpZ30gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtVU0VfQVVUSE9SSVpBVElPTn0gZnJvbSAnLi90b2tlbnMvdXNlLWF1dGhvcml6YXRpb24udG9rZW4nO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cEVycm9yfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0F1dGh9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2F1dGhIZWFkZXJTdHJpbmc6IHN0cmluZyA9IHRoaXMuX2NvbmZpZz8uaHR0cD8uaGVhZGVyID8/ICdBdXRob3JpemF0aW9uJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hdXRoU2NoZW1lOiBzdHJpbmcgPSB0aGlzLl9jb25maWc/Lmh0dHA/LnNjaGVtZSA/PyAnQmVhcmVyJztcblxuICAgIC8vIERhdGEuXG4gICAgaXNSZWZyZXNoaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgcmVmcmVzaGluZ0FjY2Vzc1Rva2VuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoOiBBdXRoLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSF9DT05GSUcpIHByaXZhdGUgX2NvbmZpZz86IEF1dGhDb25maWcpIHtcbiAgICB9XG5cbiAgICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgICAgIC8vIDEuIENoZWNrIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHVzZSB0aGUgYXV0aG9yaXphdGlvbiBmb3IgdGhpcyByZXF1ZXN0LlxuICAgICAgICBpZiAoIXJlcXVlc3QuY29udGV4dC5nZXQoVVNFX0FVVEhPUklaQVRJT04pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBDb21wb3NlIHRoZSBuZXcgcmVxdWVzdC5cbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLmdldEFjY2Vzc1Rva2VuKHJlcXVlc3QpO1xuICAgICAgICBjb25zdCBuZXdSZXF1ZXN0ID0gdGhpcy5hZGRBdXRob3JpemF0aW9uSGVhZGVyKHJlcXVlc3QsIGFjY2Vzc1Rva2VuKTtcblxuICAgICAgICAvLyAzLiBIYW5kbGUgYWxsIGVycm9ycy5cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKG5ld1JlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIEhUVFA0MDEgZXJyb3IuXG4gICAgICAgICAgICAgICAgaWYgKChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlIHx8IGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yKSAmJiBlcnJvcj8uc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlNDAxRXJyb3IocmVxdWVzdCwgbmV4dCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSnVzdCByZS10aHJvdyB0aGUgcGFyc2VkIGVycm9yLlxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGU0MDFFcnJvcihyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICAgICAgLy8gSWYgYWxyZWFkeSByZWZyZXNoaW5nIHdhaXQgZm9yIHRoZSByZWZyZXNoIHRva2VuIHRvIGNvbXBsZXRlLlxuICAgICAgICBpZiAodGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hpbmdBY2Nlc3NUb2tlbiQucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoYWNjZXNzVG9rZW4gPT4gYWNjZXNzVG9rZW4gIT09IG51bGwpLFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGFjY2Vzc1Rva2VuID0+IG5leHQuaGFuZGxlKHRoaXMuYWRkQXV0aG9yaXphdGlvbkhlYWRlcihyZXF1ZXN0LCBhY2Nlc3NUb2tlbikpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgcmVmcmVzaGluZyB0byB0cnVlLlxuICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVmcmVzaGluZ0FjY2Vzc1Rva2VuJC5uZXh0KG51bGwpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoLnJlZnJlc2goKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKG5ld0FjY2Vzc1Rva2VuID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW5ld0FjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTm8gcmVmcmVzaCB0b2tlbiB3YXMgYXZhaWxhYmxlLicpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hpbmdBY2Nlc3NUb2tlbiQubmV4dChuZXdBY2Nlc3NUb2tlbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHRoaXMuYWRkQXV0aG9yaXphdGlvbkhlYWRlcihyZXF1ZXN0LCBuZXdBY2Nlc3NUb2tlbikpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHRoaXMubG9nb3V0VXNlcigpKSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2UpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2dvdXRVc2VyKCkge1xuICAgICAgICAvLyBIYW5kbGUgdGhlIHJlZnJlc2ggZXJyb3IuXG4gICAgICAgIHRoaXMuX2F1dGguY2xlYXJBbmRSZWRpcmVjdCgpO1xuXG4gICAgICAgIC8vIFJldHVybiBudWxsIGFzIGRhdGEuXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjY2Vzc1Rva2VuID0gKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+KSA9PiB7XG4gICAgICAgIC8vIEdldCB0aGUgdG9rZW4gYmFzZWQgb24gaGVhZGVyLlxuICAgICAgICBpZiAocmVxdWVzdC5oZWFkZXJzLmhhcyh0aGlzLl9hdXRoSGVhZGVyU3RyaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuaGVhZGVycy5nZXQodGhpcy5fYXV0aEhlYWRlclN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGRlZmF1bHQgYWNjZXNzIHRva2VuLlxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aC5zZXNzaW9uLmFjY2Vzc1Rva2VuO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGFkZEF1dGhvcml6YXRpb25IZWFkZXIgPSAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xuICAgICAgICAvLyBSZW1vdmUgYXV0aCBoZWFkZXIgd2hlbiB3ZSBkbyBub3QgaGF2ZVxuICAgICAgICAvLyBhbiBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKHRoaXMuX2F1dGhIZWFkZXJTdHJpbmcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCB0aGUgYXV0aCBoZWFkZXIgdG8gdGhlIHJlcXVlc3QuXG4gICAgICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHtcbiAgICAgICAgICAgIHNldEhlYWRlcnM6IHtbdGhpcy5fYXV0aEhlYWRlclN0cmluZ106IGAke3RoaXMuX2F1dGhTY2hlbWV9ICR7YWNjZXNzVG9rZW59YH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxufVxuIl19
|
|
86
|
+
}] });
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUE0QyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUdwQyxNQUFNLE9BQU8sZUFBZTtJQUV4QixnQkFBZ0I7SUFDQyxLQUFLLEdBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU8sR0FBZ0IsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRTlFLGlCQUFpQjtJQUNBLGlCQUFpQixHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxlQUFlLENBQUM7SUFDMUUsV0FBVyxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUM7SUFFOUUsUUFBUTtJQUNSLFlBQVksR0FBWSxL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QTZCLEVBQUUsRUFBRTtRQUN2RCxpQ0FBaUM7UUFDakMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUMxQyxDQUFDLENBQUM7SUFFTSxzQkFBc0IsR0FBRyxDQUFDLE9BQTZCLEVBQUUsY0FBNkIsSUFBSSxFQUFFLEVBQUU7UUFDbEcseUNBQXlDO1FBQ3pDLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDZixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ2pCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDMUQsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDakIsVUFBVSxFQUFFLEVBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxFQUFFLEVBQUM7U0FDL0UsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO3VHQWpHTyxlQUFlOzJHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaWx0ZXIsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QVVUSF9DT05GSUcsIEF1dGhDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7VVNFX0FVVEhPUklaQVRJT059IGZyb20gJy4vdG9rZW5zL3VzZS1hdXRob3JpemF0aW9uLnRva2VuJztcbmltcG9ydCB7SHR0cEVycm9yfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0F1dGh9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgICAvLyBEZXBlbmRlbmNpZXMuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aDogQXV0aCA9IGluamVjdChBdXRoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc/OiBBdXRoQ29uZmlnID0gaW5qZWN0KEFVVEhfQ09ORklHLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aEhlYWRlclN0cmluZzogc3RyaW5nID0gdGhpcy5fY29uZmlnPy5odHRwPy5oZWFkZXIgPz8gJ0F1dGhvcml6YXRpb24nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2F1dGhTY2hlbWU6IHN0cmluZyA9IHRoaXMuX2NvbmZpZz8uaHR0cD8uc2NoZW1lID8/ICdCZWFyZXInO1xuXG4gICAgLy8gRGF0YS5cbiAgICBpc1JlZnJlc2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICByZWZyZXNoaW5nQWNjZXNzVG9rZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICAgICAgLy8gMS4gQ2hlY2sgaWYgdGhlIHVzZXIgd2FudHMgdG8gdXNlIHRoZSBhdXRob3JpemF0aW9uIGZvciB0aGlzIHJlcXVlc3QuXG4gICAgICAgIGlmICghcmVxdWVzdC5jb250ZXh0LmdldChVU0VfQVVUSE9SSVpBVElPTikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIENvbXBvc2UgdGhlIG5ldyByZXF1ZXN0LlxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuZ2V0QWNjZXNzVG9rZW4ocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IG5ld1JlcXVlc3QgPSB0aGlzLmFkZEF1dGhvcml6YXRpb25IZWFkZXIocmVxdWVzdCwgYWNjZXNzVG9rZW4pO1xuXG4gICAgICAgIC8vIDMuIEhhbmRsZSBhbGwgZXJyb3JzLlxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUobmV3UmVxdWVzdCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgSFRUUDQwMSBlcnJvci5cbiAgICAgICAgICAgICAgICBpZiAoKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgfHwgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3IpICYmIGVycm9yPy5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGU0MDFFcnJvcihyZXF1ZXN0LCBuZXh0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBKdXN0IHJlLXRocm93IHRoZSBwYXJzZWQgZXJyb3IuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZTQwMUVycm9yKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgICAgICAvLyBJZiBhbHJlYWR5IHJlZnJlc2hpbmcgd2FpdCBmb3IgdGhlIHJlZnJlc2ggdG9rZW4gdG8gY29tcGxldGUuXG4gICAgICAgIGlmICh0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaGluZ0FjY2Vzc1Rva2VuJC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihhY2Nlc3NUb2tlbiA9PiBhY2Nlc3NUb2tlbiAhPT0gbnVsbCksXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoYWNjZXNzVG9rZW4gPT4gbmV4dC5oYW5kbGUodGhpcy5hZGRBdXRob3JpemF0aW9uSGVhZGVyKHJlcXVlc3QsIGFjY2Vzc1Rva2VuKSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSByZWZyZXNoaW5nIHRvIHRydWUuXG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoaW5nQWNjZXNzVG9rZW4kLm5leHQobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGgucmVmcmVzaCgpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAobmV3QWNjZXNzVG9rZW4gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbmV3QWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyByZWZyZXNoIHRva2VuIHdhcyBhdmFpbGFibGUuJykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaGluZ0FjY2Vzc1Rva2VuJC5uZXh0KG5ld0FjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRBdXRob3JpemF0aW9uSGVhZGVyKHJlcXVlc3QsIG5ld0FjY2Vzc1Rva2VuKSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gdGhpcy5sb2dvdXRVc2VyKCkpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ291dFVzZXIoKSB7XG4gICAgICAgIC8vIEhhbmRsZSB0aGUgcmVmcmVzaCBlcnJvci5cbiAgICAgICAgdGhpcy5fYXV0aC5jbGVhckFuZFJlZGlyZWN0KCk7XG5cbiAgICAgICAgLy8gUmV0dXJuIG51bGwgYXMgZGF0YS5cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWNjZXNzVG9rZW4gPSAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IHtcbiAgICAgICAgLy8gR2V0IHRoZSB0b2tlbiBiYXNlZCBvbiBoZWFkZXIuXG4gICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcnMuaGFzKHRoaXMuX2F1dGhIZWFkZXJTdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5oZWFkZXJzLmdldCh0aGlzLl9hdXRoSGVhZGVyU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgZGVmYXVsdCBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoLnNlc3Npb24uYWNjZXNzVG9rZW47XG4gICAgfTtcblxuICAgIHByaXZhdGUgYWRkQXV0aG9yaXphdGlvbkhlYWRlciA9IChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBhdXRoIGhlYWRlciB3aGVuIHdlIGRvIG5vdCBoYXZlXG4gICAgICAgIC8vIGFuIGFjY2VzcyB0b2tlbi5cbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy5kZWxldGUodGhpcy5fYXV0aEhlYWRlclN0cmluZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHRoZSBhdXRoIGhlYWRlciB0byB0aGUgcmVxdWVzdC5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgc2V0SGVhZGVyczoge1t0aGlzLl9hdXRoSGVhZGVyU3RyaW5nXTogYCR7dGhpcy5fYXV0aFNjaGVtZX0gJHthY2Nlc3NUb2tlbn1gfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG59XG4iXX0=
|
|
@@ -11,9 +11,9 @@ export class AuthModule {
|
|
|
11
11
|
]
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
static
|
|
15
|
-
static
|
|
16
|
-
static
|
|
14
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: AuthModule, imports: [BbAuthenticated], exports: [BbAuthenticated] });
|
|
16
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AuthModule });
|
|
17
17
|
}
|
|
18
18
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: AuthModule, decorators: [{
|
|
19
19
|
type: NgModule,
|
|
@@ -22,4 +22,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
22
22
|
exports: [BbAuthenticated]
|
|
23
23
|
}]
|
|
24
24
|
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFzQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDOztBQU1oRCxNQUFNLE9BQU8sVUFBVTtJQUVuQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWtCO1FBQzdCLE9BQU87WUFDSCxRQUFRLEVBQUUsVUFBVTtZQUNwQixTQUFTLEVBQUU7Z0JBQ1AsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2FBQzVCO1NBQ0osQ0FBQztJQUNOLENBQUM7dUdBVFEsVUFBVTt3R0FBVixVQUFVLFlBSFQsZUFBZSxhQUNmLGVBQWU7d0dBRWhCLFVBQVU7OzJGQUFWLFVBQVU7a0JBSnRCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYkF1dGhlbnRpY2F0ZWR9IGZyb20gJy4vZGlyZWN0aXZlcy9hdXRoZW50aWNhdGVkLmRpcmVjdGl2ZSc7XG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXV0aENvbmZpZ30gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtwcm92aWRlQXV0aENvbmZpZ30gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0JiQXV0aGVudGljYXRlZF0sXG4gICAgZXhwb3J0czogW0JiQXV0aGVudGljYXRlZF1cbn0pXG5leHBvcnQgY2xhc3MgQXV0aE1vZHVsZSB7XG5cbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEF1dGhDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEF1dGhNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBBdXRoTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgcHJvdmlkZUF1dGhDb25maWcoY29uZmlnKVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxufVxuIl19
|
|
@@ -1,33 +1,34 @@
|
|
|
1
|
-
import { Inject, Injectable, makeStateKey, Optional } from '@angular/core';
|
|
2
1
|
import { AUTH_CONFIG, AUTH_REDIRECT_HANDLER } from './interfaces/config.interface';
|
|
3
|
-
import {
|
|
2
|
+
import { inject, Injectable, Injector, makeStateKey, TransferState } from '@angular/core';
|
|
3
|
+
import { HttpClient, HttpContext } from '@angular/common/http';
|
|
4
|
+
import { Storage } from '@bravobit/bb-foundation/storage';
|
|
4
5
|
import { HTTP_CONFIG } from '@bravobit/bb-foundation/http';
|
|
5
6
|
import { USE_AUTHORIZATION } from './tokens/use-authorization.token';
|
|
6
7
|
import { AuthVerifyProvider } from './providers/verify.provider';
|
|
7
8
|
import { AuthEmailProvider } from './providers/email.provider';
|
|
8
9
|
import { firstValueFrom, of } from 'rxjs';
|
|
10
|
+
import { Platform } from '@angular/cdk/platform';
|
|
9
11
|
import { AuthSession } from './auth.session';
|
|
10
12
|
import { map, tap } from 'rxjs/operators';
|
|
11
13
|
import { Router } from '@angular/router';
|
|
12
14
|
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@bravobit/bb-foundation/storage";
|
|
14
|
-
import * as i2 from "@angular/cdk/platform";
|
|
15
|
-
import * as i3 from "@angular/common/http";
|
|
16
|
-
import * as i4 from "@bravobit/bb-foundation/http";
|
|
17
15
|
export class Auth {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
// Dependencies.
|
|
17
|
+
_storage = inject(Storage);
|
|
18
|
+
_injector = inject(Injector);
|
|
19
|
+
_platform = inject(Platform);
|
|
20
|
+
_httpClient = inject(HttpClient);
|
|
21
|
+
_state = inject(TransferState, { optional: true });
|
|
22
|
+
_config = inject(AUTH_CONFIG, { optional: true });
|
|
23
|
+
_httpConfig = inject(HTTP_CONFIG, { optional: true });
|
|
24
|
+
_handler = inject(AUTH_REDIRECT_HANDLER, { optional: true });
|
|
25
|
+
// Readonly data.
|
|
26
|
+
_authStateKey = makeStateKey(`bbAuthStateKey`);
|
|
27
|
+
_httpAlias = this._httpConfig?.defaultAlias ?? null;
|
|
28
|
+
session;
|
|
29
|
+
user;
|
|
30
|
+
_refreshHandler = null;
|
|
31
|
+
constructor() {
|
|
31
32
|
// We select a storage strategy based on the server/browser.
|
|
32
33
|
// Only cookies CAN work on the server.
|
|
33
34
|
const storageStrategy = this._platform.isBrowser
|
|
@@ -178,7 +179,7 @@ export class Auth {
|
|
|
178
179
|
this.session.clear();
|
|
179
180
|
if (this._handler) {
|
|
180
181
|
const urlTree = this._handler.onFailedAuthenticated();
|
|
181
|
-
if (
|
|
182
|
+
if (typeof urlTree === 'boolean' || urlTree === null || urlTree === undefined) {
|
|
182
183
|
return;
|
|
183
184
|
}
|
|
184
185
|
this.router.navigateByUrl(urlTree).then(_ => _);
|
|
@@ -248,30 +249,13 @@ export class Auth {
|
|
|
248
249
|
.filter(item => !!item)
|
|
249
250
|
.join('/');
|
|
250
251
|
}
|
|
251
|
-
static
|
|
252
|
-
static
|
|
252
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: Auth, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
253
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: Auth, providedIn: 'root' });
|
|
253
254
|
}
|
|
254
255
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: Auth, decorators: [{
|
|
255
256
|
type: Injectable,
|
|
256
257
|
args: [{
|
|
257
258
|
providedIn: 'root'
|
|
258
259
|
}]
|
|
259
|
-
}], ctorParameters: () => [
|
|
260
|
-
type: Optional
|
|
261
|
-
}] }, { type: undefined, decorators: [{
|
|
262
|
-
type: Optional
|
|
263
|
-
}, {
|
|
264
|
-
type: Inject,
|
|
265
|
-
args: [AUTH_CONFIG]
|
|
266
|
-
}] }, { type: i4.HttpConfig, decorators: [{
|
|
267
|
-
type: Optional
|
|
268
|
-
}, {
|
|
269
|
-
type: Inject,
|
|
270
|
-
args: [HTTP_CONFIG]
|
|
271
|
-
}] }, { type: undefined, decorators: [{
|
|
272
|
-
type: Optional
|
|
273
|
-
}, {
|
|
274
|
-
type: Inject,
|
|
275
|
-
args: [AUTH_REDIRECT_HANDLER]
|
|
276
|
-
}] }] });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFZLFlBQVksRUFBRSxRQUFRLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBQyxXQUFXLEVBQUUscUJBQXFCLEVBQWtDLE1BQU0sK0JBQStCLENBQUM7QUFDbEgsT0FBTyxFQUFhLFdBQVcsRUFBMEIsTUFBTSxzQkFBc0IsQ0FBQztBQUd0RixPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFLdkMsTUFBTSxPQUFPLElBQUk7SUFXYixZQUFvQixRQUFpQixFQUNqQixTQUFtQixFQUNuQixTQUFtQixFQUNuQixXQUF1QixFQUNYLE1BQXNCLEVBQ0QsT0FBb0IsRUFDcEIsV0FBd0IsRUFDZCxRQUE4QjtRQVB6RSxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBVTtR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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDOzhHQW5TUSxJQUFJLGdLQWdCbUIsV0FBVyw2QkFDWCxXQUFXLDZCQUNYLHFCQUFxQjtrSEFsQjVDLElBQUksY0FGRCxNQUFNOzsyRkFFVCxJQUFJO2tCQUhoQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBZ0JnQixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUM5QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUM5QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgbWFrZVN0YXRlS2V5LCBPcHRpb25hbCwgU3RhdGVLZXksIFRyYW5zZmVyU3RhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBVVRIX0NPTkZJRywgQVVUSF9SRURJUkVDVF9IQU5ETEVSLCBBdXRoQ29uZmlnLCBBdXRoUmVkaXJlY3RIYW5kbGVyfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBDb250ZXh0LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtBdXRoUHJvdmlkZXIsIEF1dGhTaWduSW5SZXNwb25zZX0gZnJvbSAnLi9pbnRlcmZhY2VzL3Byb3ZpZGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1N0b3JhZ2UsIFN0b3JhZ2VPcHRpb259IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtIdHRwQ29uZmlnLCBIVFRQX0NPTkZJR30gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vaHR0cCc7XG5pbXBvcnQge1VTRV9BVVRIT1JJWkFUSU9OfSBmcm9tICcuL3Rva2Vucy91c2UtYXV0aG9yaXphdGlvbi50b2tlbic7XG5pbXBvcnQge0F1dGhWZXJpZnlQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvdmVyaWZ5LnByb3ZpZGVyJztcbmltcG9ydCB7QXV0aEVtYWlsUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2VtYWlsLnByb3ZpZGVyJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0F1dGhTZXNzaW9ufSBmcm9tICcuL2F1dGguc2Vzc2lvbic7XG5pbXBvcnQge21hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoIHtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aFN0YXRlS2V5OiBTdGF0ZUtleTxhbnkgfCBudWxsPiA9IG1ha2VTdGF0ZUtleShgYmJBdXRoU3RhdGVLZXlgKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQWxpYXM6IHN0cmluZyB8IG51bGwgPSB0aGlzLl9odHRwQ29uZmlnPy5kZWZhdWx0QWxpYXMgPz8gbnVsbDtcblxuICAgIHJlYWRvbmx5IHNlc3Npb246IEF1dGhTZXNzaW9uO1xuICAgIHJlYWRvbmx5IHVzZXI6IE9ic2VydmFibGU8YW55IHwgbnVsbD47XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoSGFuZGxlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9zdGF0ZT86IFRyYW5zZmVyU3RhdGUsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChBVVRIX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnPzogQXV0aENvbmZpZyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEhUVFBfQ09ORklHKSBwcml2YXRlIF9odHRwQ29uZmlnPzogSHR0cENvbmZpZyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFVVEhfUkVESVJFQ1RfSEFORExFUikgcHJpdmF0ZSBfaGFuZGxlcj86IEF1dGhSZWRpcmVjdEhhbmRsZXIpIHtcbiAgICAgICAgLy8gV2Ugc2VsZWN0IGEgc3RvcmFnZSBzdHJhdGVneSBiYXNlZCBvbiB0aGUgc2VydmVyL2Jyb3dzZXIuXG4gICAgICAgIC8vIE9ubHkgY29va2llcyBDQU4gd29yayBvbiB0aGUgc2VydmVyLlxuICAgICAgICBjb25zdCBzdG9yYWdlU3RyYXRlZ3kgPSB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJcbiAgICAgICAgICAgID8gdGhpcy5fc3RvcmFnZS5zZWxlY3QoW1N0b3JhZ2VPcHRpb24uQ29va2llLCBTdG9yYWdlT3B0aW9uLkxvY2FsXSlcbiAgICAgICAgICAgIDogdGhpcy5fc3RvcmFnZS5jb29raWU7XG5cbiAgICAgICAgLy8gU3RhcnRpbmcgdGhlIG5ldyBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24gPSBuZXcgQXV0aFNlc3Npb24oe1xuICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbmZpZz8uYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIHN0b3JhZ2U6IHN0b3JhZ2VTdHJhdGVneVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51c2VyID0gdGhpcy5zZXNzaW9uLnVzZXI7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcHAgc2hvdWxkIGJvb3RzdHJhcCB0aGUgYXV0aGVudGljYXRpb24uXG4gICAgICAgICAgICBjb25zdCBzaG91bGRCb290c3RyYXAgPSB0aGlzLl9jb25maWc/LmJvb3RzdHJhcCA/PyB0cnVlO1xuICAgICAgICAgICAgaWYgKCFzaG91bGRCb290c3RyYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPbmx5IHJldHJpZXZlIGZyb20gdGhlIHNlcnZlciB3aGVuIHdlIGFyZSBhY3R1YWxseSBhdXRoZW50aWNhdGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24uYXV0aGVudGljYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGtleSBmcm9tIHRoZSBzZXJ2ZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiYgdGhpcy5fc3RhdGU/Lmhhc0tleSh0aGlzLl9hdXRoU3RhdGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3N0YXRlPy5nZXQodGhpcy5fYXV0aFN0YXRlS2V5LCBudWxsKSA/PyBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVHJ5IHRvIGZldGNoIHRoZSB1c2VyIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICAgIGNvbnN0IHVzZXIkID0gdGhpcy5tZSgpO1xuICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHVzZXIkLCB7ZGVmYXVsdFZhbHVlOiBudWxsfSk7XG5cbiAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhdGUgaWYgZXhpc3RzLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGU/LnNldDxhbnk+KHRoaXMuX2F1dGhTdGF0ZUtleSwgdXNlciA/PyBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbiB0aGUgc3RvcmFnZSBhbmQgaGFuZGxlIGF1dG8gcmVmcmVzaGluZy5cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1lPFQgPSBhbnk+KCkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9tZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8VD4odXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW4ocHJvdmlkZXI6IEF1dGhQcm92aWRlciwgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB7YWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbiwgdXNlciwgLi4ucmVzdWx0fSA9IGF3YWl0IHByb3ZpZGVyLmF1dGhlbnRpY2F0ZSh0aGlzLl9odHRwQ2xpZW50KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcm9sZSBtYXRjaGVzLlxuICAgICAgICBjb25zdCByb2xlID0gdXNlcj8ucm9sZSA/PyBudWxsO1xuICAgICAgICBpZiAoYXMgJiYgIWFzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm9sZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGlmIHRoZSBwcm92aWRlciBpcyBvbmUgb2YgdGhlIGF2YWlsYWJsZVxuICAgICAgICAvLyBwcm92aWRlcnMgdGhlbiByZXR1cm4gdGhlIHVzZXIgb2JqZWN0IGFuZCB0aGUgcHJvdmlkZXIuXG4gICAgICAgIGNvbnN0IGFwaVByb3ZpZGVyID0gcmVzdWx0Py5wcm92aWRlciA/PyBudWxsO1xuICAgICAgICBjb25zdCBhcGlWZXJpZnlUb2tlbiA9IHJlc3VsdD8udmVyaWZ5VG9rZW4gPz8gbnVsbDtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUHJvdmlkZXJzID0gdGhpcy5fY29uZmlnPy5wcm92aWRlcnMgPz8gWydlbWFpbCcsICdzbXMnLCAndG90cCddO1xuICAgICAgICBpZiAoYXZhaWxhYmxlUHJvdmlkZXJzLmluY2x1ZGVzKGFwaVByb3ZpZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXIsIHByb3ZpZGVyOiBhcGlQcm92aWRlciwgdmVyaWZ5VG9rZW46IGFwaVZlcmlmeVRva2VufTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdXNlciBpbiBzdG9yYWdlLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHVzZXIuXG4gICAgICAgIHJldHVybiA8QXV0aFNpZ25JblJlc3BvbnNlPnt1c2VyfTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW5XaXRoRW1haWwoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dpbicpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhFbWFpbFByb3ZpZGVyKGVtYWlsLCBwYXNzd29yZCwgdXJsKSwgYXMpO1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhWZXJpZnlDb2RlKGNvZGU6IHN0cmluZywgdmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC92ZXJpZnknKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lnbkluKG5ldyBBdXRoVmVyaWZ5UHJvdmlkZXIoY29kZSwgdmVyaWZ5VG9rZW4sIHVybCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2VuZFZlcmlmeUNvZGUodmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNlbmQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHtcbiAgICAgICAgICAgIHZlcmlmeV90b2tlbjogdmVyaWZ5VG9rZW5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZ2lzdGVyPFQgPSBhbnk+KGRhdGE6IGFueSwgb3B0aW9ucz86IHtcbiAgICAgICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIHBhcmFtcz86IEh0dHBQYXJhbXMgfCB7XG4gICAgICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuICAgICAgICB9O1xuICAgIH0pIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBBUEkgY2FsbC5cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVnaXN0ZXInKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdDx7IHRva2VuOiBzdHJpbmcsIHJlZnJlc2hfdG9rZW46IHN0cmluZywgdXNlcjogYW55IH0+KHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKHJlc3VsdD8udG9rZW4sIHJlc3VsdD8ucmVmcmVzaF90b2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIGNvbnN0IHVzZXIgPSByZXN1bHQ/LnVzZXI7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxUPnVzZXI7XG4gICAgfVxuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVmcmVzaCB0b2tlbiBqdXN0IGNsZWFyIHRoZSBzZXNzaW9uLlxuICAgICAgICAvLyBOb3RlOiBXZSBkbyB0aGlzIGJlY2F1c2UgZWxzZSB3ZSB0cnkgdG8gaW52YWxpZGF0ZVxuICAgICAgICAvLyBhbiBcInVuZGVmaW5lZFwiIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW47XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBkbyBoYXZlIGEgcmVmcmVzaCB0b2tlbiwgc28gdHJ5IHRvXG4gICAgICAgIC8vIGludmFsaWRhdGUgaXQgaW4gdGhlIGJhY2tlbmQuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dvdXQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlck5hbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LmhlYWRlciA/PyAnQXV0aG9yaXphdGlvbic7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQuZ2V0KHVybCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtbaGVhZGVyTmFtZV06IHJlZnJlc2hUb2tlbn1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpLnRoZW4oXyA9PiBfKS5jYXRjaChfID0+IF8pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSB0aGUgdG9rZW5zIHdpbGwgYmUgZGVsZXRlZCBhbnl3YXlzIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHJlZnJlc2ggdG9rZW4gZG9lc1xuICAgICAgICAvLyBub3QgZXhpc3QganVzdCByZXR1cm4gYW4gb2JzZXJ2YWJsZSBvZiBudWxsLlxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnNlc3Npb24ucmVmcmVzaFRva2VuO1xuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgcmVmcmVzaCBjYWxsLlxuICAgICAgICBjb25zdCBoZWFkZXJOYW1lID0gdGhpcy5fY29uZmlnPy5odHRwPy5oZWFkZXIgPz8gJ0F1dGhvcml6YXRpb24nO1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LnNjaGVtZSA/PyAnQmVhcmVyJztcblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWZyZXNoJyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKS5zZXQoVVNFX0FVVEhPUklaQVRJT04sIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8eyB0b2tlbjogc3RyaW5nLCByZWZyZXNoX3Rva2VuOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7W2hlYWRlck5hbWVdOiBgJHtzY2hlbWV9ICR7cmVmcmVzaFRva2VufWB9LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgdGFwKCh7dG9rZW4sIHJlZnJlc2hfdG9rZW59KSA9PiB0aGlzLnNldFRva2Vucyh0b2tlbiwgcmVmcmVzaF90b2tlbikpLFxuICAgICAgICAgICAgbWFwKCh7dG9rZW59KSA9PiB0b2tlbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXF1ZXN0UGFzc3dvcmQoZW1haWw6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgZW1haWx9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldFBhc3N3b3JkKHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGV4dHJhUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVzZXQtcGFzc3dvcmQnKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLl9odHRwQ2xpZW50LnBvc3QodXJsLCB7Li4uZXh0cmFQYXJhbXMsIHRva2VuLCBwYXNzd29yZDogbmV3UGFzc3dvcmR9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBjbGVhckFuZFJlZGlyZWN0KCkge1xuICAgICAgICAvLyAxLiBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoKTtcblxuICAgICAgICBpZiAodGhpcy5faGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuX2hhbmRsZXIub25GYWlsZWRBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgICAgICBpZiAoIXVybFRyZWUgfHwgdXJsVHJlZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxUcmVlKS50aGVuKF8gPT4gXyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBDb21wb3NlIHRoZSByb3V0ZSB1cmwuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5fY29uZmlnPy5yZWRpcmVjdHMudW5hdXRoZW50aWNhdGVkID8/IG51bGw7XG5cbiAgICAgICAgLy8gMy4gUm91dGUgYmFjayBpZiB0aGUgdXNlciBwcm92aWRlZCBhIHJlZGlyZWN0IHVybC5cbiAgICAgICAgaWYgKHRoaXMucm91dGVyICYmIHJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmlzQXJyYXkocmVkaXJlY3RVcmwpID8gcmVkaXJlY3RVcmwgOiBbcmVkaXJlY3RVcmxdO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpLnRoZW4oXyA9PiBfKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9rZW5zKGFjY2Vzc1Rva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIG91ciBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBhdXRvIHJlZnJlc2ggb2YgdGhlIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUF1dG9SZWZyZXNoaW5nKCkge1xuICAgICAgICBjb25zdCBzaG91bGRBdXRvUmVmcmVzaCA9IHRoaXMuX2NvbmZpZz8uYXV0b1JlZnJlc2ggPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2hvdWxkQXV0b1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW5QYXlsb2FkPy5leHBpcmVzQXQgPz8gbnVsbDtcbiAgICAgICAgaWYgKGV4cGlyZXNBdCA9PT0gbnVsbCB8fCAhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgPSBleHBpcmVzQXQuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0SW5NaWxsaXNlY29uZHMgPSAxMF8wMDA7IC8vIDEwIHNlY29uZHMuXG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byBzdGFydCB0aGUgcmVmcmVzaCAxMCBzZWNvbmRzIGJlZm9yZSBpdCBleHBpcmVzLlxuICAgICAgICBjb25zdCBhY3R1YWxUaW1pbmcgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgLSBvZmZzZXRJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgaWYgKGFjdHVhbFRpbWluZyA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhcCB0aGUgdGltaW5ncyBiZWNhdXNlIGlmXG4gICAgICAgIC8vIHdlIGdldCBsYXJnZSBudW1iZXJzIGl0IG1pZ2h0IGNhdXNlIHVud2FudGVkIHJlc3VsdHMuXG4gICAgICAgIGNvbnN0IG1heFRpbWluZyA9IDEwMDAgKiA2MCAqIDYwICogMjQ7IC8vIDI0IGhvdXJzLlxuICAgICAgICBjb25zdCBjYXBwZWRUaW1pbmcgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihhY3R1YWxUaW1pbmcsIG1heFRpbWluZykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZnJlc2hIYW5kbGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0Py4odGhpcy5fcmVmcmVzaEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gd2luZG93Py5zZXRUaW1lb3V0Py4oKCkgPT4gdGhpcy5hdXRvUmVmcmVzaCgpLCBjYXBwZWRUaW1pbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0LlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvUmVmcmVzaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciBpdCB0byByZWZyZXNoLlxuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCQgPSB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlZnJlc2gkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyByZWZyZXNoaW5nLCB3ZSBuZWVkIHRvIGNsZWFyLlxuICAgICAgICAgICAgdGhpcy5jbGVhckFuZFJlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybChlbmRwb2ludDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5faHR0cEFsaWFzLCBlbmRwb2ludF1cbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgIH1cblxufVxuIl19
|
|
260
|
+
}], ctorParameters: () => [] });
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUUscUJBQXFCLEVBQWtDLE1BQU0sK0JBQStCLENBQUM7QUFDbEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBWSxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFFdEYsT0FBTyxFQUFDLE9BQU8sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLdkMsTUFBTSxPQUFPLElBQUk7SUFFYixnQkFBZ0I7SUFDQyxRQUFRLEdBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLFNBQVMsR0FBYSxNQUFNLENB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RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFBTSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNMLHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVksTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxRQUFnQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQzt1R0F0U1EsSUFBSTsyR0FBSixJQUFJLGNBRkQsTUFBTTs7MkZBRVQsSUFBSTtrQkFIaEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FVVEhfQ09ORklHLCBBVVRIX1JFRElSRUNUX0hBTkRMRVIsIEF1dGhDb25maWcsIEF1dGhSZWRpcmVjdEhhbmRsZXJ9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgbWFrZVN0YXRlS2V5LCBTdGF0ZUtleSwgVHJhbnNmZXJTdGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBDb250ZXh0LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtBdXRoUHJvdmlkZXIsIEF1dGhTaWduSW5SZXNwb25zZX0gZnJvbSAnLi9pbnRlcmZhY2VzL3Byb3ZpZGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1N0b3JhZ2UsIFN0b3JhZ2VPcHRpb259IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtIdHRwQ29uZmlnLCBIVFRQX0NPTkZJR30gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vaHR0cCc7XG5pbXBvcnQge1VTRV9BVVRIT1JJWkFUSU9OfSBmcm9tICcuL3Rva2Vucy91c2UtYXV0aG9yaXphdGlvbi50b2tlbic7XG5pbXBvcnQge0F1dGhWZXJpZnlQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvdmVyaWZ5LnByb3ZpZGVyJztcbmltcG9ydCB7QXV0aEVtYWlsUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2VtYWlsLnByb3ZpZGVyJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0F1dGhTZXNzaW9ufSBmcm9tICcuL2F1dGguc2Vzc2lvbic7XG5pbXBvcnQge21hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoIHtcblxuICAgIC8vIERlcGVuZGVuY2llcy5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yYWdlOiBTdG9yYWdlID0gaW5qZWN0KFN0b3JhZ2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm06IFBsYXRmb3JtID0gaW5qZWN0KFBsYXRmb3JtKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlPzogVHJhbnNmZXJTdGF0ZSA9IGluamVjdChUcmFuc2ZlclN0YXRlLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc/OiBBdXRoQ29uZmlnID0gaW5qZWN0KEFVVEhfQ09ORklHLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQ29uZmlnPzogSHR0cENvbmZpZyA9IGluamVjdChIVFRQX0NPTkZJRywge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlcj86IEF1dGhSZWRpcmVjdEhhbmRsZXIgPSBpbmplY3QoQVVUSF9SRURJUkVDVF9IQU5ETEVSLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aFN0YXRlS2V5OiBTdGF0ZUtleTxhbnkgfCBudWxsPiA9IG1ha2VTdGF0ZUtleShgYmJBdXRoU3RhdGVLZXlgKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQWxpYXM6IHN0cmluZyB8IG51bGwgPSB0aGlzLl9odHRwQ29uZmlnPy5kZWZhdWx0QWxpYXMgPz8gbnVsbDtcblxuICAgIHJlYWRvbmx5IHNlc3Npb246IEF1dGhTZXNzaW9uO1xuICAgIHJlYWRvbmx5IHVzZXI6IE9ic2VydmFibGU8YW55IHwgbnVsbD47XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoSGFuZGxlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gV2Ugc2VsZWN0IGEgc3RvcmFnZSBzdHJhdGVneSBiYXNlZCBvbiB0aGUgc2VydmVyL2Jyb3dzZXIuXG4gICAgICAgIC8vIE9ubHkgY29va2llcyBDQU4gd29yayBvbiB0aGUgc2VydmVyLlxuICAgICAgICBjb25zdCBzdG9yYWdlU3RyYXRlZ3kgPSB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJcbiAgICAgICAgICAgID8gdGhpcy5fc3RvcmFnZS5zZWxlY3QoW1N0b3JhZ2VPcHRpb24uQ29va2llLCBTdG9yYWdlT3B0aW9uLkxvY2FsXSlcbiAgICAgICAgICAgIDogdGhpcy5fc3RvcmFnZS5jb29raWU7XG5cbiAgICAgICAgLy8gU3RhcnRpbmcgdGhlIG5ldyBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24gPSBuZXcgQXV0aFNlc3Npb24oe1xuICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbmZpZz8uYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIHN0b3JhZ2U6IHN0b3JhZ2VTdHJhdGVneVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51c2VyID0gdGhpcy5zZXNzaW9uLnVzZXI7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcHAgc2hvdWxkIGJvb3RzdHJhcCB0aGUgYXV0aGVudGljYXRpb24uXG4gICAgICAgICAgICBjb25zdCBzaG91bGRCb290c3RyYXAgPSB0aGlzLl9jb25maWc/LmJvb3RzdHJhcCA/PyB0cnVlO1xuICAgICAgICAgICAgaWYgKCFzaG91bGRCb290c3RyYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPbmx5IHJldHJpZXZlIGZyb20gdGhlIHNlcnZlciB3aGVuIHdlIGFyZSBhY3R1YWxseSBhdXRoZW50aWNhdGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24uYXV0aGVudGljYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGtleSBmcm9tIHRoZSBzZXJ2ZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiYgdGhpcy5fc3RhdGU/Lmhhc0tleSh0aGlzLl9hdXRoU3RhdGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3N0YXRlPy5nZXQodGhpcy5fYXV0aFN0YXRlS2V5LCBudWxsKSA/PyBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVHJ5IHRvIGZldGNoIHRoZSB1c2VyIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICAgIGNvbnN0IHVzZXIkID0gdGhpcy5tZSgpO1xuICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHVzZXIkLCB7ZGVmYXVsdFZhbHVlOiBudWxsfSk7XG5cbiAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhdGUgaWYgZXhpc3RzLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGU/LnNldDxhbnk+KHRoaXMuX2F1dGhTdGF0ZUtleSwgdXNlciA/PyBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbiB0aGUgc3RvcmFnZSBhbmQgaGFuZGxlIGF1dG8gcmVmcmVzaGluZy5cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1lPFQgPSBhbnk+KCkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9tZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8VD4odXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW4ocHJvdmlkZXI6IEF1dGhQcm92aWRlciwgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB7YWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbiwgdXNlciwgLi4ucmVzdWx0fSA9IGF3YWl0IHByb3ZpZGVyLmF1dGhlbnRpY2F0ZSh0aGlzLl9odHRwQ2xpZW50KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcm9sZSBtYXRjaGVzLlxuICAgICAgICBjb25zdCByb2xlID0gdXNlcj8ucm9sZSA/PyBudWxsO1xuICAgICAgICBpZiAoYXMgJiYgIWFzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm9sZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGlmIHRoZSBwcm92aWRlciBpcyBvbmUgb2YgdGhlIGF2YWlsYWJsZVxuICAgICAgICAvLyBwcm92aWRlcnMgdGhlbiByZXR1cm4gdGhlIHVzZXIgb2JqZWN0IGFuZCB0aGUgcHJvdmlkZXIuXG4gICAgICAgIGNvbnN0IGFwaVByb3ZpZGVyID0gcmVzdWx0Py5wcm92aWRlciA/PyBudWxsO1xuICAgICAgICBjb25zdCBhcGlWZXJpZnlUb2tlbiA9IHJlc3VsdD8udmVyaWZ5VG9rZW4gPz8gbnVsbDtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUHJvdmlkZXJzID0gdGhpcy5fY29uZmlnPy5wcm92aWRlcnMgPz8gWydlbWFpbCcsICdzbXMnLCAndG90cCddO1xuICAgICAgICBpZiAoYXZhaWxhYmxlUHJvdmlkZXJzLmluY2x1ZGVzKGFwaVByb3ZpZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXIsIHByb3ZpZGVyOiBhcGlQcm92aWRlciwgdmVyaWZ5VG9rZW46IGFwaVZlcmlmeVRva2VufTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdXNlciBpbiBzdG9yYWdlLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHVzZXIuXG4gICAgICAgIHJldHVybiA8QXV0aFNpZ25JblJlc3BvbnNlPnt1c2VyfTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW5XaXRoRW1haWwoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dpbicpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhFbWFpbFByb3ZpZGVyKGVtYWlsLCBwYXNzd29yZCwgdXJsKSwgYXMpO1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhWZXJpZnlDb2RlKGNvZGU6IHN0cmluZywgdmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC92ZXJpZnknKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lnbkluKG5ldyBBdXRoVmVyaWZ5UHJvdmlkZXIoY29kZSwgdmVyaWZ5VG9rZW4sIHVybCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2VuZFZlcmlmeUNvZGUodmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNlbmQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHtcbiAgICAgICAgICAgIHZlcmlmeV90b2tlbjogdmVyaWZ5VG9rZW5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZ2lzdGVyPFQgPSBhbnk+KGRhdGE6IGFueSwgb3B0aW9ucz86IHtcbiAgICAgICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIHBhcmFtcz86IEh0dHBQYXJhbXMgfCB7XG4gICAgICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuICAgICAgICB9O1xuICAgIH0pIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBBUEkgY2FsbC5cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVnaXN0ZXInKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdDx7IHRva2VuOiBzdHJpbmcsIHJlZnJlc2hfdG9rZW46IHN0cmluZywgdXNlcjogYW55IH0+KHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKHJlc3VsdD8udG9rZW4sIHJlc3VsdD8ucmVmcmVzaF90b2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIGNvbnN0IHVzZXIgPSByZXN1bHQ/LnVzZXI7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxUPnVzZXI7XG4gICAgfVxuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVmcmVzaCB0b2tlbiBqdXN0IGNsZWFyIHRoZSBzZXNzaW9uLlxuICAgICAgICAvLyBOb3RlOiBXZSBkbyB0aGlzIGJlY2F1c2UgZWxzZSB3ZSB0cnkgdG8gaW52YWxpZGF0ZVxuICAgICAgICAvLyBhbiBcInVuZGVmaW5lZFwiIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW47XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBkbyBoYXZlIGEgcmVmcmVzaCB0b2tlbiwgc28gdHJ5IHRvXG4gICAgICAgIC8vIGludmFsaWRhdGUgaXQgaW4gdGhlIGJhY2tlbmQuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dvdXQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlck5hbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LmhlYWRlciA/PyAnQXV0aG9yaXphdGlvbic7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQuZ2V0KHVybCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtbaGVhZGVyTmFtZV06IHJlZnJlc2hUb2tlbn1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpLnRoZW4oXyA9PiBfKS5jYXRjaChfID0+IF8pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSB0aGUgdG9rZW5zIHdpbGwgYmUgZGVsZXRlZCBhbnl3YXlzIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHJlZnJlc2ggdG9rZW4gZG9lc1xuICAgICAgICAvLyBub3QgZXhpc3QganVzdCByZXR1cm4gYW4gb2JzZXJ2YWJsZSBvZiBudWxsLlxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnNlc3Npb24ucmVmcmVzaFRva2VuO1xuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgcmVmcmVzaCBjYWxsLlxuICAgICAgICBjb25zdCBoZWFkZXJOYW1lID0gdGhpcy5fY29uZmlnPy5odHRwPy5oZWFkZXIgPz8gJ0F1dGhvcml6YXRpb24nO1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LnNjaGVtZSA/PyAnQmVhcmVyJztcblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWZyZXNoJyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKS5zZXQoVVNFX0FVVEhPUklaQVRJT04sIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8eyB0b2tlbjogc3RyaW5nLCByZWZyZXNoX3Rva2VuOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7W2hlYWRlck5hbWVdOiBgJHtzY2hlbWV9ICR7cmVmcmVzaFRva2VufWB9LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgdGFwKCh7dG9rZW4sIHJlZnJlc2hfdG9rZW59KSA9PiB0aGlzLnNldFRva2Vucyh0b2tlbiwgcmVmcmVzaF90b2tlbikpLFxuICAgICAgICAgICAgbWFwKCh7dG9rZW59KSA9PiB0b2tlbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXF1ZXN0UGFzc3dvcmQoZW1haWw6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgZW1haWx9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldFBhc3N3b3JkKHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGV4dHJhUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVzZXQtcGFzc3dvcmQnKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLl9odHRwQ2xpZW50LnBvc3QodXJsLCB7Li4uZXh0cmFQYXJhbXMsIHRva2VuLCBwYXNzd29yZDogbmV3UGFzc3dvcmR9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBjbGVhckFuZFJlZGlyZWN0KCkge1xuICAgICAgICAvLyAxLiBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoKTtcblxuICAgICAgICBpZiAodGhpcy5faGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuX2hhbmRsZXIub25GYWlsZWRBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFRyZWUgPT09ICdib29sZWFuJyB8fCB1cmxUcmVlID09PSBudWxsIHx8IHVybFRyZWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxUcmVlKS50aGVuKF8gPT4gXyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBDb21wb3NlIHRoZSByb3V0ZSB1cmwuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5fY29uZmlnPy5yZWRpcmVjdHMudW5hdXRoZW50aWNhdGVkID8/IG51bGw7XG5cbiAgICAgICAgLy8gMy4gUm91dGUgYmFjayBpZiB0aGUgdXNlciBwcm92aWRlZCBhIHJlZGlyZWN0IHVybC5cbiAgICAgICAgaWYgKHRoaXMucm91dGVyICYmIHJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmlzQXJyYXkocmVkaXJlY3RVcmwpID8gcmVkaXJlY3RVcmwgOiBbcmVkaXJlY3RVcmxdO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpLnRoZW4oXyA9PiBfKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9rZW5zKGFjY2Vzc1Rva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIG91ciBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBhdXRvIHJlZnJlc2ggb2YgdGhlIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUF1dG9SZWZyZXNoaW5nKCkge1xuICAgICAgICBjb25zdCBzaG91bGRBdXRvUmVmcmVzaCA9IHRoaXMuX2NvbmZpZz8uYXV0b1JlZnJlc2ggPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2hvdWxkQXV0b1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW5QYXlsb2FkPy5leHBpcmVzQXQgPz8gbnVsbDtcbiAgICAgICAgaWYgKGV4cGlyZXNBdCA9PT0gbnVsbCB8fCAhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgPSBleHBpcmVzQXQuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0SW5NaWxsaXNlY29uZHMgPSAxMF8wMDA7IC8vIDEwIHNlY29uZHMuXG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byBzdGFydCB0aGUgcmVmcmVzaCAxMCBzZWNvbmRzIGJlZm9yZSBpdCBleHBpcmVzLlxuICAgICAgICBjb25zdCBhY3R1YWxUaW1pbmcgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgLSBvZmZzZXRJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgaWYgKGFjdHVhbFRpbWluZyA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhcCB0aGUgdGltaW5ncyBiZWNhdXNlIGlmXG4gICAgICAgIC8vIHdlIGdldCBsYXJnZSBudW1iZXJzIGl0IG1pZ2h0IGNhdXNlIHVud2FudGVkIHJlc3VsdHMuXG4gICAgICAgIGNvbnN0IG1heFRpbWluZyA9IDEwMDAgKiA2MCAqIDYwICogMjQ7IC8vIDI0IGhvdXJzLlxuICAgICAgICBjb25zdCBjYXBwZWRUaW1pbmcgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihhY3R1YWxUaW1pbmcsIG1heFRpbWluZykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZnJlc2hIYW5kbGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0Py4odGhpcy5fcmVmcmVzaEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gd2luZG93Py5zZXRUaW1lb3V0Py4oKCkgPT4gdGhpcy5hdXRvUmVmcmVzaCgpLCBjYXBwZWRUaW1pbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0LlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvUmVmcmVzaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciBpdCB0byByZWZyZXNoLlxuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCQgPSB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlZnJlc2gkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyByZWZyZXNoaW5nLCB3ZSBuZWVkIHRvIGNsZWFyLlxuICAgICAgICAgICAgdGhpcy5jbGVhckFuZFJlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybChlbmRwb2ludDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5faHR0cEFsaWFzLCBlbmRwb2ludF1cbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgIH1cblxufVxuIl19
|