@bravobit/bb-foundation 0.21.4 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth/lib/auth.interceptor.d.ts +1 -1
- package/auth/lib/auth.module.d.ts +4 -5
- package/auth/lib/auth.service.d.ts +4 -7
- package/auth/lib/directives/abstract.directive.d.ts +12 -0
- package/auth/lib/directives/authenticated.directive.d.ts +7 -4
- package/auth/lib/directives/permission.directive.d.ts +11 -11
- package/auth/lib/guards/anonymous.guard.d.ts +8 -5
- package/auth/lib/guards/authenticated.guard.d.ts +8 -5
- package/auth/lib/guards/permission.guard.d.ts +15 -0
- package/auth/lib/interfaces/config.interface.d.ts +14 -8
- package/auth/lib/interfaces/permission.interface.d.ts +6 -0
- package/auth/lib/interfaces/provider.interface.d.ts +10 -3
- package/auth/lib/permissions/permissions.handler.d.ts +9 -0
- package/auth/lib/permissions/permissions.service.d.ts +16 -0
- package/auth/lib/providers/email.provider.d.ts +2 -8
- package/auth/lib/providers/verify.provider.d.ts +2 -6
- package/auth/public_api.d.ts +4 -4
- package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +5 -1
- package/controls/lib/control-error/control-error/control-error.animation.d.ts +1 -0
- package/controls/lib/control-error/control-error/control-error.component.d.ts +17 -0
- package/controls/lib/control-error/control-error-submit.directive.d.ts +15 -0
- package/controls/lib/control-error/control-error.defaults.d.ts +2 -0
- package/controls/lib/control-error/control-error.interface.d.ts +12 -0
- package/controls/lib/control-error/control-error.module.d.ts +9 -0
- package/controls/lib/controls.interfaces.d.ts +4 -0
- package/controls/lib/controls.module.d.ts +7 -2
- package/controls/lib/form-control/form-control/form-control.component.d.ts +31 -0
- package/controls/lib/form-control/form-control-addon/form-control-addon.component.d.ts +6 -0
- package/controls/lib/form-control/form-control-input.directive.d.ts +35 -0
- package/controls/lib/form-control/form-control.module.d.ts +11 -0
- package/controls/public_api.d.ts +9 -0
- package/dashboard/lib/dashboard/dashboard.component.d.ts +2 -1
- package/dialog/lib/dialog-confirm/dialog-confirm.component.d.ts +10 -5
- package/dialog/lib/dialog-container/dialog-container.animations.d.ts +1 -0
- package/dialog/lib/dialog-container/dialog-container.component.d.ts +5 -7
- package/dialog/lib/dialog-header/dialog-header.component.d.ts +1 -3
- package/dialog/lib/dialog-modal/dialog-modal.component.d.ts +7 -3
- package/dialog/lib/dialog-overlay/dialog-overlay.animations.d.ts +1 -0
- package/dialog/lib/dialog-overlay/dialog-overlay.component.d.ts +5 -7
- package/dialog/lib/dialog.service.d.ts +4 -3
- package/elements/lib/directives/focus-trap.directive.d.ts +1 -1
- package/elements/lib/directives/focus.directive.d.ts +1 -3
- package/elements/lib/directives/form-submitter.directive.d.ts +9 -0
- package/elements/lib/elements.module.d.ts +25 -24
- package/elements/lib/form-error/form-error.component.d.ts +9 -5
- package/elements/lib/pipes/file-image.pipe.d.ts +2 -1
- package/elements/public_api.d.ts +1 -0
- package/esm2020/auth/lib/auth.interceptor.mjs +9 -12
- package/esm2020/auth/lib/auth.module.mjs +7 -17
- package/esm2020/auth/lib/auth.service.mjs +29 -55
- package/esm2020/auth/lib/directives/abstract.directive.mjs +40 -0
- package/esm2020/auth/lib/directives/authenticated.directive.mjs +25 -14
- package/esm2020/auth/lib/directives/permission.directive.mjs +24 -46
- package/esm2020/auth/lib/guards/anonymous.guard.mjs +28 -19
- package/esm2020/auth/lib/guards/authenticated.guard.mjs +31 -20
- package/esm2020/auth/lib/guards/permission.guard.mjs +53 -0
- package/esm2020/auth/lib/helpers/jwt.helper.mjs +7 -7
- package/esm2020/auth/lib/interfaces/config.interface.mjs +1 -1
- package/esm2020/auth/lib/interfaces/permission.interface.mjs +2 -0
- package/esm2020/auth/lib/interfaces/provider.interface.mjs +1 -1
- package/esm2020/auth/lib/permissions/permissions.handler.mjs +33 -0
- package/esm2020/auth/lib/permissions/permissions.service.mjs +64 -0
- package/esm2020/auth/lib/providers/email.provider.mjs +8 -9
- package/esm2020/auth/lib/providers/verify.provider.mjs +8 -5
- package/esm2020/auth/public_api.mjs +5 -5
- package/esm2020/collections/lib/collections.module.mjs +4 -4
- package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +3 -3
- package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +3 -3
- package/esm2020/collections/lib/components/collections.directive.mjs +12 -12
- package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +19 -6
- package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +4 -4
- package/esm2020/controls/lib/checkbox/checkbox.module.mjs +4 -4
- package/esm2020/controls/lib/control-error/control-error/control-error.animation.mjs +14 -0
- package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +63 -0
- package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +47 -0
- package/esm2020/controls/lib/control-error/control-error.defaults.mjs +26 -0
- package/esm2020/controls/lib/control-error/control-error.interface.mjs +3 -0
- package/esm2020/controls/lib/control-error/control-error.module.mjs +19 -0
- package/esm2020/controls/lib/controls.interfaces.mjs +2 -0
- package/esm2020/controls/lib/controls.module.mjs +45 -8
- package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +94 -0
- package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +22 -0
- package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +124 -0
- package/esm2020/controls/lib/form-control/form-control.module.mjs +33 -0
- package/esm2020/controls/public_api.mjs +10 -1
- package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +7 -6
- package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +3 -3
- package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +3 -3
- package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +3 -3
- package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +3 -3
- package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +3 -3
- package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +3 -3
- package/esm2020/dashboard/lib/dashboard.module.mjs +4 -4
- package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
- package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +17 -11
- package/esm2020/dialog/lib/dialog-container/dialog-container.animations.mjs +29 -0
- package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +28 -104
- package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +7 -14
- package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +4 -4
- package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +29 -8
- package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.animations.mjs +26 -0
- package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +29 -84
- package/esm2020/dialog/lib/dialog.insertion.mjs +3 -3
- package/esm2020/dialog/lib/dialog.module.mjs +4 -4
- package/esm2020/dialog/lib/dialog.service.mjs +8 -7
- package/esm2020/elements/lib/avatar/avatar.component.mjs +8 -6
- package/esm2020/elements/lib/button/button.component.mjs +6 -6
- package/esm2020/elements/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2020/elements/lib/date-picker/date-picker.component.mjs +3 -3
- package/esm2020/elements/lib/directives/addon.directive.mjs +6 -6
- package/esm2020/elements/lib/directives/autosize.directive.mjs +3 -3
- package/esm2020/elements/lib/directives/focus-trap.directive.mjs +5 -5
- package/esm2020/elements/lib/directives/focus.directive.mjs +7 -9
- package/esm2020/elements/lib/directives/form-submit.directive.mjs +3 -3
- package/esm2020/elements/lib/directives/form-submitter.directive.mjs +25 -0
- package/esm2020/elements/lib/directives/input.directive.mjs +6 -6
- package/esm2020/elements/lib/directives/template.directive.mjs +3 -3
- package/esm2020/elements/lib/dropdown/dropdown.component.mjs +6 -6
- package/esm2020/elements/lib/elements.module.mjs +9 -5
- package/esm2020/elements/lib/file-picker/file-picker.component.mjs +3 -3
- package/esm2020/elements/lib/form-control/form-control.component.mjs +3 -3
- package/esm2020/elements/lib/form-error/form-error.component.mjs +22 -7
- package/esm2020/elements/lib/form-group/form-group.component.mjs +3 -3
- package/esm2020/elements/lib/icon/icon.component.mjs +3 -3
- package/esm2020/elements/lib/image-picker/image-picker.component.mjs +3 -3
- package/esm2020/elements/lib/pipes/file-image.pipe.mjs +8 -7
- package/esm2020/elements/lib/pipes/file-size.pipe.mjs +3 -3
- package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +3 -3
- package/esm2020/elements/lib/spinner/spinner.component.mjs +3 -3
- package/esm2020/elements/lib/tag/tag.component.mjs +3 -3
- package/esm2020/elements/public_api.mjs +2 -1
- package/esm2020/http/lib/http.module.mjs +4 -4
- package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +3 -3
- package/esm2020/http/lib/interceptors/error.interceptor.mjs +3 -3
- package/esm2020/lib/core/services/clipboard.service.mjs +5 -5
- package/esm2020/lib/core/services/exif.service.mjs +5 -5
- package/esm2020/lib/core/services/file-loader.service.mjs +3 -3
- package/esm2020/lib/core/services/image-converter.service.mjs +5 -5
- package/esm2020/lib/core/services/languages.service.mjs +3 -3
- package/esm2020/lib/core/services/network.service.mjs +7 -7
- package/esm2020/lib/core/services/patch.service.mjs +7 -7
- package/esm2020/localize/lib/localize.module.mjs +4 -4
- package/esm2020/localize/lib/localize.pipe.mjs +3 -3
- package/esm2020/localize/lib/localize.service.mjs +5 -5
- package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +3 -3
- package/esm2020/localize/lib/views/localize-template-or-string.directive.mjs +3 -3
- package/esm2020/localize/lib/views/localize-template.directive.mjs +3 -3
- package/esm2020/masking/lib/directives/currency-mask.directive.mjs +3 -3
- package/esm2020/masking/lib/directives/date-mask.directive.mjs +3 -3
- package/esm2020/masking/lib/directives/input-mask.directive.mjs +7 -7
- package/esm2020/masking/lib/masking.module.mjs +4 -4
- package/esm2020/masking/lib/masking.service.mjs +3 -3
- package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +5 -5
- package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +7 -7
- package/esm2020/notifications/lib/notifications.module.mjs +4 -4
- package/esm2020/notifications/lib/notifications.service.mjs +5 -5
- package/esm2020/public_api.mjs +1 -2
- package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +3 -3
- package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +10 -10
- package/esm2020/recaptcha/lib/recaptcha.module.mjs +4 -4
- package/esm2020/storage/lib/storage.service.mjs +5 -5
- package/esm2020/table/lib/components/table/table.component.mjs +9 -9
- package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +3 -3
- package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +3 -3
- package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +3 -3
- package/esm2020/table/lib/table.module.mjs +4 -4
- package/esm2020/theming/lib/themes/checkbox-group.theme.mjs +17 -2
- package/esm2020/theming/lib/themes/checkbox.theme.mjs +35 -2
- package/esm2020/theming/lib/themes/control-error.theme.mjs +11 -0
- package/esm2020/theming/lib/themes/form-control-addon.theme.mjs +6 -0
- package/esm2020/theming/lib/themes/form-control.theme.mjs +45 -0
- package/esm2020/theming/lib/theming.data.mjs +82 -0
- package/esm2020/theming/lib/theming.directive.mjs +38 -0
- package/esm2020/theming/lib/theming.interface.mjs +2 -3
- package/esm2020/theming/lib/theming.module.mjs +12 -34
- package/esm2020/theming/lib/utils/theming.variable.mjs +41 -0
- package/esm2020/theming/public_api.mjs +6 -3
- package/fesm2015/bravobit-bb-foundation-auth.mjs +326 -284
- package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-collections.mjs +22 -22
- package/fesm2015/bravobit-bb-foundation-controls.mjs +493 -24
- package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs +29 -28
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-dialog.mjs +185 -233
- package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-elements.mjs +140 -99
- package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-http.mjs +10 -10
- package/fesm2015/bravobit-bb-foundation-localize.mjs +20 -20
- package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-masking.mjs +20 -19
- package/fesm2015/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-notifications.mjs +18 -17
- package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +16 -16
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-storage.mjs +4 -4
- package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
- package/fesm2015/bravobit-bb-foundation-theming.mjs +251 -128
- package/fesm2015/bravobit-bb-foundation-theming.mjs.map +1 -1
- package/fesm2015/bravobit-bb-foundation.mjs +33 -73
- package/fesm2015/bravobit-bb-foundation.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-auth.mjs +306 -277
- package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-collections.mjs +22 -22
- package/fesm2020/bravobit-bb-foundation-controls.mjs +477 -24
- package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs +29 -28
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-dialog.mjs +175 -233
- package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-elements.mjs +140 -99
- package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-http.mjs +10 -10
- package/fesm2020/bravobit-bb-foundation-localize.mjs +20 -20
- package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-masking.mjs +19 -19
- package/fesm2020/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-notifications.mjs +17 -17
- package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +16 -16
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-storage.mjs +4 -4
- package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
- package/fesm2020/bravobit-bb-foundation-theming.mjs +252 -120
- package/fesm2020/bravobit-bb-foundation-theming.mjs.map +1 -1
- package/fesm2020/bravobit-bb-foundation.mjs +32 -70
- package/fesm2020/bravobit-bb-foundation.mjs.map +1 -1
- package/lib/core/services/clipboard.service.d.ts +2 -2
- package/lib/core/services/exif.service.d.ts +1 -1
- package/lib/core/services/image-converter.service.d.ts +1 -1
- package/lib/core/services/network.service.d.ts +4 -4
- package/lib/core/services/patch.service.d.ts +4 -4
- package/localize/lib/localize.service.d.ts +1 -1
- package/notifications/lib/notifications-item/notifications-item.component.d.ts +1 -1
- package/notifications/lib/notifications.service.d.ts +1 -1
- package/package.json +4 -4
- package/public_api.d.ts +0 -1
- package/recaptcha/lib/recaptcha-loader.service.d.ts +3 -3
- package/storage/lib/storage.service.d.ts +1 -1
- package/theming/lib/themes/checkbox-group.theme.d.ts +14 -3
- package/theming/lib/themes/checkbox.theme.d.ts +30 -17
- package/theming/lib/themes/control-error.theme.d.ts +9 -0
- package/theming/lib/themes/form-control-addon.theme.d.ts +5 -0
- package/theming/lib/themes/form-control.theme.d.ts +32 -0
- package/theming/lib/theming.data.d.ts +17 -0
- package/theming/lib/theming.directive.d.ts +13 -0
- package/theming/lib/theming.interface.d.ts +19 -8
- package/theming/lib/theming.module.d.ts +3 -9
- package/theming/lib/utils/theming.variable.d.ts +16 -0
- package/theming/public_api.d.ts +5 -2
- package/auth/lib/directives/role.directive.d.ts +0 -16
- package/auth/lib/helpers/mapper.helper.d.ts +0 -23
- package/auth/lib/interfaces/mapper.interface.d.ts +0 -19
- package/auth/lib/permissions.service.d.ts +0 -14
- package/esm2020/auth/lib/directives/role.directive.mjs +0 -37
- package/esm2020/auth/lib/helpers/mapper.helper.mjs +0 -35
- package/esm2020/auth/lib/interfaces/mapper.interface.mjs +0 -2
- package/esm2020/auth/lib/permissions.service.mjs +0 -56
- package/esm2020/lib/core/services/platform.service.mjs +0 -42
- package/esm2020/theming/lib/themes/theme.mjs +0 -34
- package/esm2020/theming/lib/theming.service.mjs +0 -77
- package/lib/core/services/platform.service.d.ts +0 -18
- package/theming/lib/themes/theme.d.ts +0 -12
- package/theming/lib/theming.service.d.ts +0 -22
|
@@ -10,16 +10,14 @@ import { map, tap } from 'rxjs/operators';
|
|
|
10
10
|
import { Router } from '@angular/router';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
import * as i1 from "@bravobit/bb-foundation/storage";
|
|
13
|
-
import * as i2 from "
|
|
14
|
-
import * as i3 from "@
|
|
15
|
-
import * as i4 from "
|
|
16
|
-
import * as i5 from "
|
|
17
|
-
import * as i6 from "@
|
|
18
|
-
import * as i7 from "@bravobit/bb-foundation/http";
|
|
13
|
+
import * as i2 from "@angular/cdk/platform";
|
|
14
|
+
import * as i3 from "@angular/common/http";
|
|
15
|
+
import * as i4 from "./interfaces/config.interface";
|
|
16
|
+
import * as i5 from "@angular/platform-browser";
|
|
17
|
+
import * as i6 from "@bravobit/bb-foundation/http";
|
|
19
18
|
export class Auth {
|
|
20
|
-
constructor(_storage,
|
|
19
|
+
constructor(_storage, _injector, _platform, _httpClient, _config, _state, _httpConfig) {
|
|
21
20
|
this._storage = _storage;
|
|
22
|
-
this._mapper = _mapper;
|
|
23
21
|
this._injector = _injector;
|
|
24
22
|
this._platform = _platform;
|
|
25
23
|
this._httpClient = _httpClient;
|
|
@@ -77,14 +75,15 @@ export class Auth {
|
|
|
77
75
|
async signIn(provider, as) {
|
|
78
76
|
const { accessToken, refreshToken, user, ...result } = await provider.authenticate(this._httpClient);
|
|
79
77
|
// Check if the role matches.
|
|
80
|
-
|
|
78
|
+
const role = this._config?.permissions?.getRole?.(user) ?? user?.role ?? null;
|
|
79
|
+
if (as && !as.includes(role)) {
|
|
81
80
|
throw new Error('Invalid role.');
|
|
82
81
|
}
|
|
83
82
|
// Validate if the provider is one of the available
|
|
84
83
|
// providers then return the user object and the provider.
|
|
85
84
|
const apiProvider = result?.provider ?? null;
|
|
86
85
|
const apiVerifyToken = result?.verifyToken ?? null;
|
|
87
|
-
const availableProviders = ['email', 'sms', 'totp'];
|
|
86
|
+
const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];
|
|
88
87
|
if (availableProviders.includes(apiProvider)) {
|
|
89
88
|
return { user, provider: apiProvider, verifyToken: apiVerifyToken };
|
|
90
89
|
}
|
|
@@ -115,11 +114,10 @@ export class Auth {
|
|
|
115
114
|
const url = this.getUrl('auth/register');
|
|
116
115
|
const result$ = this._httpClient.post(url, data, options);
|
|
117
116
|
const result = await firstValueFrom(result$);
|
|
118
|
-
// Map to the correct response.
|
|
119
|
-
const { accessToken, refreshToken, user } = this._mapper.toRegister(result);
|
|
120
117
|
// Set the tokens in storage.
|
|
121
|
-
this.setTokens(
|
|
118
|
+
this.setTokens(result?.token, result?.refresh_token);
|
|
122
119
|
// Set the user in storage.
|
|
120
|
+
const user = result?.user;
|
|
123
121
|
this.session.setUser(user);
|
|
124
122
|
// Return the user.
|
|
125
123
|
return user;
|
|
@@ -136,10 +134,11 @@ export class Auth {
|
|
|
136
134
|
// invalidate it in the backend.
|
|
137
135
|
try {
|
|
138
136
|
const url = this.getUrl('auth/logout');
|
|
137
|
+
const headerName = this._config?.http?.header ?? 'Authorization';
|
|
139
138
|
const observable$ = this._httpClient.get(url, {
|
|
140
|
-
headers: {
|
|
139
|
+
headers: { [headerName]: refreshToken }
|
|
141
140
|
});
|
|
142
|
-
firstValueFrom(observable$).then(_ => _);
|
|
141
|
+
firstValueFrom(observable$).then(_ => _).catch(_ => _);
|
|
143
142
|
}
|
|
144
143
|
catch {
|
|
145
144
|
// Do nothing because the tokens will be deleted anyways from the session.
|
|
@@ -155,14 +154,14 @@ export class Auth {
|
|
|
155
154
|
return of(null);
|
|
156
155
|
}
|
|
157
156
|
// Perform the refresh call.
|
|
158
|
-
const
|
|
157
|
+
const headerName = this._config?.http?.header ?? 'Authorization';
|
|
158
|
+
const scheme = this._config?.http?.scheme ?? 'Bearer';
|
|
159
159
|
const url = this.getUrl('auth/refresh');
|
|
160
|
-
const context = new HttpContext()
|
|
161
|
-
.set(USE_AUTHORIZATION, false);
|
|
160
|
+
const context = new HttpContext().set(USE_AUTHORIZATION, false);
|
|
162
161
|
return this._httpClient.get(url, {
|
|
163
|
-
headers: {
|
|
162
|
+
headers: { [headerName]: `${scheme} ${refreshToken}` },
|
|
164
163
|
context: context
|
|
165
|
-
}).pipe(
|
|
164
|
+
}).pipe(tap(({ token, refresh_token }) => this.setTokens(token, refresh_token)), map(({ token }) => token));
|
|
166
165
|
}
|
|
167
166
|
async requestPassword(email, extraParams = {}) {
|
|
168
167
|
const url = this.getUrl('auth/reset');
|
|
@@ -174,40 +173,15 @@ export class Auth {
|
|
|
174
173
|
const observable$ = this._httpClient.post(url, { ...extraParams, token, password: newPassword });
|
|
175
174
|
return firstValueFrom(observable$);
|
|
176
175
|
}
|
|
177
|
-
guard(type, redirectUrl) {
|
|
178
|
-
let newUrl = null;
|
|
179
|
-
// Get the correct new url.
|
|
180
|
-
switch (type) {
|
|
181
|
-
case 'authenticated':
|
|
182
|
-
newUrl = this._config?.loggedInUrl ?? null;
|
|
183
|
-
break;
|
|
184
|
-
case 'unauthenticated':
|
|
185
|
-
newUrl = this._config?.redirectUrl ?? null;
|
|
186
|
-
break;
|
|
187
|
-
}
|
|
188
|
-
// Append a redirect url if the user is deemed
|
|
189
|
-
// unauthenticated.
|
|
190
|
-
if (type === 'unauthenticated') {
|
|
191
|
-
const setRedirectOnFailedAuth = this._config?.setRedirectOnFailedAuth ?? true;
|
|
192
|
-
if (setRedirectOnFailedAuth && redirectUrl && newUrl) {
|
|
193
|
-
newUrl += `?redirectUrl=${redirectUrl}`;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
// Parse the url if it exists.
|
|
197
|
-
if (this.router && newUrl) {
|
|
198
|
-
return this.router.parseUrl(newUrl);
|
|
199
|
-
}
|
|
200
|
-
// Return false if the user is not allowed.
|
|
201
|
-
return false;
|
|
202
|
-
}
|
|
203
176
|
clearAndRedirect() {
|
|
204
177
|
// 1. Delete the tokens from the session.
|
|
205
178
|
this.session.clear();
|
|
206
179
|
// 2. Compose the route url.
|
|
207
|
-
const redirectUrl = this._config?.
|
|
180
|
+
const redirectUrl = this._config?.redirects.unauthenticated ?? null;
|
|
208
181
|
// 3. Route back if the user provided a redirect url.
|
|
209
182
|
if (this.router && redirectUrl) {
|
|
210
|
-
|
|
183
|
+
const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];
|
|
184
|
+
this.router.navigate(commands).then(_ => _);
|
|
211
185
|
}
|
|
212
186
|
}
|
|
213
187
|
setTokens(accessToken, refreshToken) {
|
|
@@ -267,15 +241,15 @@ export class Auth {
|
|
|
267
241
|
.join('/');
|
|
268
242
|
}
|
|
269
243
|
}
|
|
270
|
-
Auth.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
271
|
-
Auth.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
272
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
244
|
+
Auth.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: Auth, deps: [{ token: i1.Storage }, { token: i0.Injector }, { token: i2.Platform }, { token: i3.HttpClient }, { token: i4.AuthConfig, optional: true }, { token: i5.TransferState, optional: true }, { token: i6.HttpConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
245
|
+
Auth.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: Auth });
|
|
246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: Auth, decorators: [{
|
|
273
247
|
type: Injectable
|
|
274
|
-
}], ctorParameters: function () { return [{ type: i1.Storage }, { type:
|
|
248
|
+
}], ctorParameters: function () { return [{ type: i1.Storage }, { type: i0.Injector }, { type: i2.Platform }, { type: i3.HttpClient }, { type: i4.AuthConfig, decorators: [{
|
|
275
249
|
type: Optional
|
|
276
|
-
}] }, { type:
|
|
250
|
+
}] }, { type: i5.TransferState, decorators: [{
|
|
277
251
|
type: Optional
|
|
278
|
-
}] }, { type:
|
|
252
|
+
}] }, { type: i6.HttpConfig, decorators: [{
|
|
279
253
|
type: Optional
|
|
280
254
|
}] }]; } });
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxXQUFXLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFFdEYsT0FBTyxFQUFDLFlBQVksRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsVUFBVSxFQUFZLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUc3RCxPQUFPLEVBQUMsY0FBYyxFQUFjLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQUd2QyxNQUFNLE9BQU8sSUFBSTtJQVdiLFlBQW9CLFFBQWlCLEVBQ2pCLE9BQW1CLEVBQ25CLFNBQW1CLEVBQ25CLFNBQW1CLEVBQ25CLFdBQXVCLEVBQ1gsT0FBb0IsRUFDcEIsTUFBc0IsRUFDdEIsV0FBd0I7UUFQcEMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNYLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFoQnhELGlCQUFpQjtRQUNBLGtCQUFhLEdBQXlCLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JFLGVBQVUsR0FBa0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDO1FBSzVFLG9CQUFlLEdBQWtCLElBQUksQ0FBQztRQVUxQyw0REFBNEQ7UUFDNUQsdUNBQXVDO1FBQ3ZDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUztZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsd0VBQTJDLENBQUM7WUFDbkUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBRTNCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWE7WUFDL0IsT0FBTyxFQUFFLGVBQWU7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsVUFBVTtRQUNOLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDZCx3REFBd0Q7WUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDO1lBQ3hELElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDdEM7WUFFRCxvRUFBb0U7WUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUU7Z0JBQy9CLE9BQU87YUFDVjtZQUVELHFDQUFxQztZQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztnQkFDaEUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQztZQUVELHlDQUF5QztZQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFFL0QsMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDYixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBTSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQzthQUMzRDtZQUVELDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsRUFBRTtRQUNFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBSSxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFzQixFQUFFLEVBQWE7UUFDOUMsTUFBTSxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFDLEdBQUcsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuRyw2QkFBNkI7UUFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNwQztRQUVELG1EQUFtRDtRQUNuRCwwREFBMEQ7UUFDMUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEQsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDMUMsT0FBMkIsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLENBQUM7U0FDekY7UUFFRCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFMUMsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLG1CQUFtQjtRQUNuQixPQUEyQixFQUFDLElBQUksRUFBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQWEsRUFBRSxRQUFnQixFQUFFLEVBQWE7UUFDaEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBWSxFQUFFLFdBQW1CO1FBQ3hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBbUI7UUFDdEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdkMsWUFBWSxFQUFFLFdBQVc7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQVUsSUFBUyxFQUFFLE9BT2xDO1FBQ0csb0JBQW9CO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QywrQkFBK0I7UUFDL0IsTUFBTSxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUUsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTFDLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixtQkFBbUI7UUFDbkIsT0FBVSxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU07UUFDRiwyREFBMkQ7UUFDM0QscURBQXFEO1FBQ3JELGdDQUFnQztRQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQy9CO1FBRUQsd0NBQXdDO1FBQ3hDLGdDQUFnQztRQUNoQyxJQUFJO1lBQ0EsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFDLE9BQU8sRUFBRSxFQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUM7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBQUMsTUFBTTtZQUNKLDBFQUEwRTtTQUM3RTtRQUVELHNDQUFzQztRQUN0QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELE9BQU87UUFDSCw0QkFBNEI7UUFDNUIsK0NBQStDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUVELDRCQUE0QjtRQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUM7UUFFaEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRTthQUM1QixHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsT0FBTyxFQUFFLEVBQUMsYUFBYSxFQUFFLEdBQUcsTUFBTSxJQUFJLFlBQVksRUFBRSxFQUFDO1lBQ3JELE9BQU8sRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQyxJQUFJLENBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDekMsR0FBRyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUUsWUFBWSxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQy9FLEdBQUcsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUN0QyxDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBYSxFQUFFLGNBQXNDLEVBQUU7UUFDekUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBQyxHQUFHLFdBQVcsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWEsRUFBRSxXQUFtQixFQUFFLGNBQXNDLEVBQUU7UUFDNUYsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDLEdBQUcsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQztRQUMvRixPQUFPLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVksRUFBRSxXQUFvQjtRQUNwQyxJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUM7UUFFMUIsMkJBQTJCO1FBQzNCLFFBQVEsSUFBSSxFQUFFO1lBQ1YsS0FBSyxlQUFlO2dCQUNoQixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDO2dCQUMzQyxNQUFNO1lBQ1YsS0FBSyxpQkFBaUI7Z0JBQ2xCLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUM7Z0JBQzNDLE1BQU07U0FDYjtRQUVELDhDQUE4QztRQUM5QyxtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLEtBQUssaUJBQWlCLEVBQUU7WUFDNUIsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLHVCQUF1QixJQUFJLElBQUksQ0FBQztZQUM5RSxJQUFJLHVCQUF1QixJQUFJLFdBQVcsSUFBSSxNQUFNLEVBQUU7Z0JBQ2xELE1BQU0sSUFBSSxnQkFBZ0IsV0FBVyxFQUFFLENBQUM7YUFDM0M7U0FDSjtRQUVELDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkM7UUFFRCwyQ0FBMkM7UUFDM0MsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGdCQUFnQjtRQUNaLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXJCLDRCQUE0QjtRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFFdEQscURBQXFEO1FBQ3JELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxXQUFXLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxXQUFtQixFQUFFLFlBQW9CO1FBQ3ZELGlDQUFpQztRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFbEQsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxLQUFLLENBQUM7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3BCLE9BQU87U0FDVjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQztRQUN0RSxJQUFJLFNBQVMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUNqRCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEUsTUFBTSxvQkFBb0IsR0FBRyxLQUFNLENBQUMsQ0FBQyxjQUFjO1FBRW5ELDZEQUE2RDtRQUM3RCxNQUFNLFlBQVksR0FBRyx3QkFBd0IsR0FBRyxvQkFBb0IsQ0FBQztRQUNyRSxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBRUQsd0NBQXdDO1FBQ3hDLHdEQUF3RDtRQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxZQUFZO1FBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSTtZQUNBLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7Z0JBQy9CLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDL0I7WUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUMvRTtRQUFDLE1BQU07WUFDSixrQkFBa0I7U0FDckI7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVc7UUFDckIsSUFBSTtZQUNBLDBDQUEwQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFBTSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEM7UUFBQyxNQUFNO1lBQ0oscURBQXFEO1lBQ3JELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELElBQVksTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxRQUFnQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQzs7aUdBeFRRLElBQUk7cUdBQUosSUFBSTsyRkFBSixJQUFJO2tCQURoQixVQUFVOzswQkFpQk0sUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cENsaWVudCwgSHR0cENvbnRleHQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0F1dGhQcm92aWRlciwgQXV0aFNpZ25JblJlc3BvbnNlfSBmcm9tICcuL2ludGVyZmFjZXMvcHJvdmlkZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7bWFrZVN0YXRlS2V5LCBTdGF0ZUtleSwgVHJhbnNmZXJTdGF0ZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge1N0b3JhZ2UsIFN0b3JhZ2VPcHRpb259IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtVU0VfQVVUSE9SSVpBVElPTn0gZnJvbSAnLi90b2tlbnMvdXNlLWF1dGhvcml6YXRpb24udG9rZW4nO1xuaW1wb3J0IHtBdXRoVmVyaWZ5UHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL3ZlcmlmeS5wcm92aWRlcic7XG5pbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0F1dGhFbWFpbFByb3ZpZGVyfSBmcm9tICcuL3Byb3ZpZGVycy9lbWFpbC5wcm92aWRlcic7XG5pbXBvcnQge0F1dGhDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7SHR0cENvbmZpZ30gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vaHR0cCc7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0F1dGhNYXBwZXJ9IGZyb20gJy4vaGVscGVycy9tYXBwZXIuaGVscGVyJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uJztcbmltcG9ydCB7QXV0aFNlc3Npb259IGZyb20gJy4vYXV0aC5zZXNzaW9uJztcbmltcG9ydCB7bWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aCB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2F1dGhTdGF0ZUtleTogU3RhdGVLZXk8YW55IHwgbnVsbD4gPSBtYWtlU3RhdGVLZXkoYGJiQXV0aFN0YXRlS2V5YCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaHR0cEFsaWFzOiBzdHJpbmcgfCBudWxsID0gdGhpcy5faHR0cENvbmZpZz8uZGVmYXVsdEFsaWFzID8/IG51bGw7XG5cbiAgICByZWFkb25seSBzZXNzaW9uOiBBdXRoU2Vzc2lvbjtcbiAgICByZWFkb25seSB1c2VyOiBPYnNlcnZhYmxlPGFueSB8IG51bGw+O1xuXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEhhbmRsZXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfc3RvcmFnZTogU3RvcmFnZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9tYXBwZXI6IEF1dGhNYXBwZXIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IEF1dGhDb25maWcsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfc3RhdGU/OiBUcmFuc2ZlclN0YXRlLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2h0dHBDb25maWc/OiBIdHRwQ29uZmlnKSB7XG4gICAgICAgIC8vIFdlIHNlbGVjdCBhIHN0b3JhZ2Ugc3RyYXRlZ3kgYmFzZWQgb24gdGhlIHNlcnZlci9icm93c2VyLlxuICAgICAgICAvLyBPbmx5IGNvb2tpZXMgQ0FOIHdvcmsgb24gdGhlIHNlcnZlci5cbiAgICAgICAgY29uc3Qgc3RvcmFnZVN0cmF0ZWd5ID0gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyXG4gICAgICAgICAgICA/IHRoaXMuX3N0b3JhZ2Uuc2VsZWN0KFtTdG9yYWdlT3B0aW9uLkNvb2tpZSwgU3RvcmFnZU9wdGlvbi5Mb2NhbF0pXG4gICAgICAgICAgICA6IHRoaXMuX3N0b3JhZ2UuY29va2llO1xuXG4gICAgICAgIC8vIFN0YXJ0aW5nIHRoZSBuZXcgc2Vzc2lvbi5cbiAgICAgICAgdGhpcy5zZXNzaW9uID0gbmV3IEF1dGhTZXNzaW9uKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLl9jb25maWc/LmFwcGxpY2F0aW9uSWQsXG4gICAgICAgICAgICBzdG9yYWdlOiBzdG9yYWdlU3RyYXRlZ3lcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXNlciA9IHRoaXMuc2Vzc2lvbi51c2VyO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXBwIHNob3VsZCBib290c3RyYXAgdGhlIGF1dGhlbnRpY2F0aW9uLlxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQm9vdHN0cmFwID0gdGhpcy5fY29uZmlnPy5ib290c3RyYXAgPz8gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghc2hvdWxkQm9vdHN0cmFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT25seSByZXRyaWV2ZSBmcm9tIHRoZSBzZXJ2ZXIgd2hlbiB3ZSBhcmUgYWN0dWFsbHkgYXV0aGVudGljYXRlZC5cbiAgICAgICAgICAgIGlmICghdGhpcy5zZXNzaW9uLmF1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IHRoZSBrZXkgZnJvbSB0aGUgc2VydmVyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlICYmIHRoaXMuX3N0YXRlPy5oYXNLZXkodGhpcy5fYXV0aFN0YXRlS2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLl9zdGF0ZT8uZ2V0KHRoaXMuX2F1dGhTdGF0ZUtleSwgbnVsbCkgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLnNldFVzZXIodXNlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRyeSB0byBmZXRjaCB0aGUgdXNlciBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgICAgICBjb25zdCB1c2VyJCA9IHRoaXMubWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh1c2VyJCwge2RlZmF1bHRWYWx1ZTogbnVsbH0pO1xuXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHN0YXRlIGlmIGV4aXN0cy5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlPy5zZXQ8YW55Pih0aGlzLl9hdXRoU3RhdGVLZXksIHVzZXIgPz8gbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVzZXIgaW4gdGhlIHN0b3JhZ2UgYW5kIGhhbmRsZSBhdXRvIHJlZnJlc2hpbmcuXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtZTxUID0gYW55PigpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvbWUnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQuZ2V0PFQ+KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2lnbkluKHByb3ZpZGVyOiBBdXRoUHJvdmlkZXIsIGFzPzogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qge2FjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4sIHVzZXIsIC4uLnJlc3VsdH0gPSBhd2FpdCBwcm92aWRlci5hdXRoZW50aWNhdGUodGhpcy5faHR0cENsaWVudCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJvbGUgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGFzICYmICFhcy5pbmNsdWRlcyh0aGlzLl9tYXBwZXIucm9sZSh1c2VyKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByb2xlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgaWYgdGhlIHByb3ZpZGVyIGlzIG9uZSBvZiB0aGUgYXZhaWxhYmxlXG4gICAgICAgIC8vIHByb3ZpZGVycyB0aGVuIHJldHVybiB0aGUgdXNlciBvYmplY3QgYW5kIHRoZSBwcm92aWRlci5cbiAgICAgICAgY29uc3QgYXBpUHJvdmlkZXIgPSByZXN1bHQ/LnByb3ZpZGVyID8/IG51bGw7XG4gICAgICAgIGNvbnN0IGFwaVZlcmlmeVRva2VuID0gcmVzdWx0Py52ZXJpZnlUb2tlbiA/PyBudWxsO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVQcm92aWRlcnMgPSBbJ2VtYWlsJywgJ3NtcycsICd0b3RwJ107XG4gICAgICAgIGlmIChhdmFpbGFibGVQcm92aWRlcnMuaW5jbHVkZXMoYXBpUHJvdmlkZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gPEF1dGhTaWduSW5SZXNwb25zZT57dXNlciwgcHJvdmlkZXI6IGFwaVByb3ZpZGVyLCB2ZXJpZnlUb2tlbjogYXBpVmVyaWZ5VG9rZW59O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gc3RvcmFnZS5cbiAgICAgICAgdGhpcy5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXJ9O1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhFbWFpbChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBhcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL2xvZ2luJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNpZ25JbihuZXcgQXV0aEVtYWlsUHJvdmlkZXIoZW1haWwsIHBhc3N3b3JkLCB1cmwpLCBhcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2lnbkluV2l0aFZlcmlmeUNvZGUoY29kZTogc3RyaW5nLCB2ZXJpZnlUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3ZlcmlmeScpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhWZXJpZnlQcm92aWRlcihjb2RlLCB2ZXJpZnlUb2tlbiwgdXJsKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzZW5kVmVyaWZ5Q29kZSh2ZXJpZnlUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3Jlc2VuZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQkID0gdGhpcy5faHR0cENsaWVudC5wb3N0KHVybCwge1xuICAgICAgICAgICAgdmVyaWZ5X3Rva2VuOiB2ZXJpZnlUb2tlblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20ocmVzdWx0JCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVnaXN0ZXI8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zPzoge1xuICAgICAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG4gICAgICAgIH07XG4gICAgfSkge1xuICAgICAgICAvLyBFeGVjdXRlIEFQSSBjYWxsLlxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWdpc3RlcicpO1xuICAgICAgICBjb25zdCByZXN1bHQkID0gdGhpcy5faHR0cENsaWVudC5wb3N0KHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuXG4gICAgICAgIC8vIE1hcCB0byB0aGUgY29ycmVjdCByZXNwb25zZS5cbiAgICAgICAgY29uc3Qge2FjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4sIHVzZXJ9ID0gdGhpcy5fbWFwcGVyLnRvUmVnaXN0ZXIocmVzdWx0KTtcblxuICAgICAgICAvLyBTZXQgdGhlIHRva2VucyBpbiBzdG9yYWdlLlxuICAgICAgICB0aGlzLnNldFRva2VucyhhY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuKTtcblxuICAgICAgICAvLyBTZXQgdGhlIHVzZXIgaW4gc3RvcmFnZS5cbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFVzZXIodXNlcik7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSB1c2VyLlxuICAgICAgICByZXR1cm4gPFQ+dXNlcjtcbiAgICB9XG5cbiAgICBsb2dvdXQoKSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSByZWZyZXNoIHRva2VuIGp1c3QgY2xlYXIgdGhlIHNlc3Npb24uXG4gICAgICAgIC8vIE5vdGU6IFdlIGRvIHRoaXMgYmVjYXVzZSBlbHNlIHdlIHRyeSB0byBpbnZhbGlkYXRlXG4gICAgICAgIC8vIGFuIFwidW5kZWZpbmVkXCIgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGRvIGhhdmUgYSByZWZyZXNoIHRva2VuLCBzbyB0cnkgdG9cbiAgICAgICAgLy8gaW52YWxpZGF0ZSBpdCBpbiB0aGUgYmFja2VuZC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL2xvZ291dCcpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLl9odHRwQ2xpZW50LmdldCh1cmwsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7QXV0aG9yaXphdGlvbjogcmVmcmVzaFRva2VufVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaXJzdFZhbHVlRnJvbShvYnNlcnZhYmxlJCkudGhlbihfID0+IF8pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSB0aGUgdG9rZW5zIHdpbGwgYmUgZGVsZXRlZCBhbnl3YXlzIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHJlZnJlc2ggdG9rZW4gZG9lc1xuICAgICAgICAvLyBub3QgZXhpc3QganVzdCByZXR1cm4gYW4gb2JzZXJ2YWJsZSBvZiBudWxsLlxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnNlc3Npb24ucmVmcmVzaFRva2VuO1xuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgcmVmcmVzaCBjYWxsLlxuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLl9jb25maWc/LnNjaGVtZSA/PyAnQmVhcmVyJztcblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWZyZXNoJyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKVxuICAgICAgICAgICAgLnNldChVU0VfQVVUSE9SSVpBVElPTiwgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LmdldCh1cmwsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtBdXRob3JpemF0aW9uOiBgJHtzY2hlbWV9ICR7cmVmcmVzaFRva2VufWB9LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgbWFwKGRhdGEgPT4gdGhpcy5fbWFwcGVyLnRvUmVmcmVzaChkYXRhKSksXG4gICAgICAgICAgICB0YXAoKHthY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VufSkgPT4gdGhpcy5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbikpLFxuICAgICAgICAgICAgbWFwKCh7YWNjZXNzVG9rZW59KSA9PiBhY2Nlc3NUb2tlbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXF1ZXN0UGFzc3dvcmQoZW1haWw6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgZW1haWx9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldFBhc3N3b3JkKHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGV4dHJhUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVzZXQtcGFzc3dvcmQnKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLl9odHRwQ2xpZW50LnBvc3QodXJsLCB7Li4uZXh0cmFQYXJhbXMsIHRva2VuLCBwYXNzd29yZDogbmV3UGFzc3dvcmR9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBndWFyZCh0eXBlOiBzdHJpbmcsIHJlZGlyZWN0VXJsPzogc3RyaW5nKSB7XG4gICAgICAgIGxldCBuZXdVcmw6IHN0cmluZyA9IG51bGw7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBjb3JyZWN0IG5ldyB1cmwuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRlZCc6XG4gICAgICAgICAgICAgICAgbmV3VXJsID0gdGhpcy5fY29uZmlnPy5sb2dnZWRJblVybCA/PyBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndW5hdXRoZW50aWNhdGVkJzpcbiAgICAgICAgICAgICAgICBuZXdVcmwgPSB0aGlzLl9jb25maWc/LnJlZGlyZWN0VXJsID8/IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBlbmQgYSByZWRpcmVjdCB1cmwgaWYgdGhlIHVzZXIgaXMgZGVlbWVkXG4gICAgICAgIC8vIHVuYXV0aGVudGljYXRlZC5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd1bmF1dGhlbnRpY2F0ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBzZXRSZWRpcmVjdE9uRmFpbGVkQXV0aCA9IHRoaXMuX2NvbmZpZz8uc2V0UmVkaXJlY3RPbkZhaWxlZEF1dGggPz8gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChzZXRSZWRpcmVjdE9uRmFpbGVkQXV0aCAmJiByZWRpcmVjdFVybCAmJiBuZXdVcmwpIHtcbiAgICAgICAgICAgICAgICBuZXdVcmwgKz0gYD9yZWRpcmVjdFVybD0ke3JlZGlyZWN0VXJsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJzZSB0aGUgdXJsIGlmIGl0IGV4aXN0cy5cbiAgICAgICAgaWYgKHRoaXMucm91dGVyICYmIG5ld1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLnBhcnNlVXJsKG5ld1VybCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjbGVhckFuZFJlZGlyZWN0KCkge1xuICAgICAgICAvLyAxLiBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoKTtcblxuICAgICAgICAvLyAyLiBDb21wb3NlIHRoZSByb3V0ZSB1cmwuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5fY29uZmlnPy5yZWRpcmVjdFVybCA/PyBudWxsO1xuXG4gICAgICAgIC8vIDMuIFJvdXRlIGJhY2sgaWYgdGhlIHVzZXIgcHJvdmlkZWQgYSByZWRpcmVjdCB1cmwuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlciAmJiByZWRpcmVjdFVybCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JlZGlyZWN0VXJsXSkudGhlbihfID0+IF8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUb2tlbnMoYWNjZXNzVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gb3VyIHNlc3Npb24uXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGF1dG8gcmVmcmVzaCBvZiB0aGUgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXV0b1JlZnJlc2hpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZEF1dG9SZWZyZXNoID0gdGhpcy5fY29uZmlnPy5hdXRvUmVmcmVzaCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFzaG91bGRBdXRvUmVmcmVzaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlblBheWxvYWQ/LmV4cGlyZXNBdCA/PyBudWxsO1xuICAgICAgICBpZiAoZXhwaXJlc0F0ID09PSBudWxsIHx8ICF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyA9IGV4cGlyZXNBdC5nZXRUaW1lKCkgLSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBvZmZzZXRJbk1pbGxpc2Vjb25kcyA9IDEwXzAwMDsgLy8gMTAgc2Vjb25kcy5cblxuICAgICAgICAvLyBXZSB3YW50IHRvIHN0YXJ0IHRoZSByZWZyZXNoIDEwIHNlY29uZHMgYmVmb3JlIGl0IGV4cGlyZXMuXG4gICAgICAgIGNvbnN0IGFjdHVhbFRpbWluZyA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyAtIG9mZnNldEluTWlsbGlzZWNvbmRzO1xuICAgICAgICBpZiAoYWN0dWFsVGltaW5nIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FwIHRoZSB0aW1pbmdzIGJlY2F1c2UgaWZcbiAgICAgICAgLy8gd2UgZ2V0IGxhcmdlIG51bWJlcnMgaXQgbWlnaHQgY2F1c2UgdW53YW50ZWQgcmVzdWx0cy5cbiAgICAgICAgY29uc3QgbWF4VGltaW5nID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gMjQgaG91cnMuXG4gICAgICAgIGNvbnN0IGNhcHBlZFRpbWluZyA9IE1hdGgubWF4KDEsIE1hdGgubWluKGFjdHVhbFRpbWluZywgbWF4VGltaW5nKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVmcmVzaEhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQ/Lih0aGlzLl9yZWZyZXNoSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSBzZXRUaW1lb3V0Py4oKCkgPT4gdGhpcy5hdXRvUmVmcmVzaCgpLCBjYXBwZWRUaW1pbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0LlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvUmVmcmVzaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciBpdCB0byByZWZyZXNoLlxuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCQgPSB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlZnJlc2gkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyByZWZyZXNoaW5nLCB3ZSBuZWVkIHRvIGNsZWFyLlxuICAgICAgICAgICAgdGhpcy5jbGVhckFuZFJlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybChlbmRwb2ludDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5faHR0cEFsaWFzLCBlbmRwb2ludF1cbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgIH1cblxufVxuIl19
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxXQUFXLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFFdEYsT0FBTyxFQUFDLFlBQVksRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsVUFBVSxFQUFZLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUc3RCxPQUFPLEVBQUMsY0FBYyxFQUFjLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7O0FBR3ZDLE1BQU0sT0FBTyxJQUFJO0lBV2IsWUFBb0IsUUFBaUIsRUFDakIsU0FBbUIsRUFDbkIsU0FBbUIsRUFDbkIsV0FBdUIsRUFDWCxPQUFvQixFQUNwQixNQUFzQixFQUN0QixXQUF3QjtRQU5wQyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNYLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIs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QUFLLENBQUMsV0FBVztRQUNyQixJQUFJO1lBQ0EsMENBQTBDO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxNQUFNLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQztRQUFDLE1BQU07WUFDSixxREFBcUQ7WUFDckQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsSUFBWSxNQUFNO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQWdCO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQzthQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDOztpR0F4UlEsSUFBSTtxR0FBSixJQUFJOzJGQUFKLElBQUk7a0JBRGhCLFVBQVU7OzBCQWdCTSxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QXV0aFByb3ZpZGVyLCBBdXRoU2lnbkluUmVzcG9uc2V9IGZyb20gJy4vaW50ZXJmYWNlcy9wcm92aWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHttYWtlU3RhdGVLZXksIFN0YXRlS2V5LCBUcmFuc2ZlclN0YXRlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7U3RvcmFnZSwgU3RvcmFnZU9wdGlvbn0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vc3RvcmFnZSc7XG5pbXBvcnQge1VTRV9BVVRIT1JJWkFUSU9OfSBmcm9tICcuL3Rva2Vucy91c2UtYXV0aG9yaXphdGlvbi50b2tlbic7XG5pbXBvcnQge0F1dGhWZXJpZnlQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvdmVyaWZ5LnByb3ZpZGVyJztcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXV0aEVtYWlsUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2VtYWlsLnByb3ZpZGVyJztcbmltcG9ydCB7QXV0aENvbmZpZ30gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtIdHRwQ29uZmlnfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9odHRwJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0F1dGhTZXNzaW9ufSBmcm9tICcuL2F1dGguc2Vzc2lvbic7XG5pbXBvcnQge21hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGgge1xuXG4gICAgLy8gUmVhZG9ubHkgZGF0YS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hdXRoU3RhdGVLZXk6IFN0YXRlS2V5PGFueSB8IG51bGw+ID0gbWFrZVN0YXRlS2V5KGBiYkF1dGhTdGF0ZUtleWApO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2h0dHBBbGlhczogc3RyaW5nIHwgbnVsbCA9IHRoaXMuX2h0dHBDb25maWc/LmRlZmF1bHRBbGlhcyA/PyBudWxsO1xuXG4gICAgcmVhZG9ubHkgc2Vzc2lvbjogQXV0aFNlc3Npb247XG4gICAgcmVhZG9ubHkgdXNlcjogT2JzZXJ2YWJsZTxhbnkgfCBudWxsPjtcblxuICAgIHByaXZhdGUgX3JlZnJlc2hIYW5kbGVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IEF1dGhDb25maWcsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfc3RhdGU/OiBUcmFuc2ZlclN0YXRlLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2h0dHBDb25maWc/OiBIdHRwQ29uZmlnKSB7XG4gICAgICAgIC8vIFdlIHNlbGVjdCBhIHN0b3JhZ2Ugc3RyYXRlZ3kgYmFzZWQgb24gdGhlIHNlcnZlci9icm93c2VyLlxuICAgICAgICAvLyBPbmx5IGNvb2tpZXMgQ0FOIHdvcmsgb24gdGhlIHNlcnZlci5cbiAgICAgICAgY29uc3Qgc3RvcmFnZVN0cmF0ZWd5ID0gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyXG4gICAgICAgICAgICA/IHRoaXMuX3N0b3JhZ2Uuc2VsZWN0KFtTdG9yYWdlT3B0aW9uLkNvb2tpZSwgU3RvcmFnZU9wdGlvbi5Mb2NhbF0pXG4gICAgICAgICAgICA6IHRoaXMuX3N0b3JhZ2UuY29va2llO1xuXG4gICAgICAgIC8vIFN0YXJ0aW5nIHRoZSBuZXcgc2Vzc2lvbi5cbiAgICAgICAgdGhpcy5zZXNzaW9uID0gbmV3IEF1dGhTZXNzaW9uKHtcbiAgICAgICAgICAgIGlkOiB0aGlzLl9jb25maWc/LmFwcGxpY2F0aW9uSWQsXG4gICAgICAgICAgICBzdG9yYWdlOiBzdG9yYWdlU3RyYXRlZ3lcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXNlciA9IHRoaXMuc2Vzc2lvbi51c2VyO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXBwIHNob3VsZCBib290c3RyYXAgdGhlIGF1dGhlbnRpY2F0aW9uLlxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQm9vdHN0cmFwID0gdGhpcy5fY29uZmlnPy5ib290c3RyYXAgPz8gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghc2hvdWxkQm9vdHN0cmFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT25seSByZXRyaWV2ZSBmcm9tIHRoZSBzZXJ2ZXIgd2hlbiB3ZSBhcmUgYWN0dWFsbHkgYXV0aGVudGljYXRlZC5cbiAgICAgICAgICAgIGlmICghdGhpcy5zZXNzaW9uLmF1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IHRoZSBrZXkgZnJvbSB0aGUgc2VydmVyIHN0YXRlLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlICYmIHRoaXMuX3N0YXRlPy5oYXNLZXkodGhpcy5fYXV0aFN0YXRlS2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLl9zdGF0ZT8uZ2V0KHRoaXMuX2F1dGhTdGF0ZUtleSwgbnVsbCkgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLnNldFVzZXIodXNlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRyeSB0byBmZXRjaCB0aGUgdXNlciBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgICAgICBjb25zdCB1c2VyJCA9IHRoaXMubWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh1c2VyJCwge2RlZmF1bHRWYWx1ZTogbnVsbH0pO1xuXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHN0YXRlIGlmIGV4aXN0cy5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlPy5zZXQ8YW55Pih0aGlzLl9hdXRoU3RhdGVLZXksIHVzZXIgPz8gbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVzZXIgaW4gdGhlIHN0b3JhZ2UgYW5kIGhhbmRsZSBhdXRvIHJlZnJlc2hpbmcuXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtZTxUID0gYW55PigpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvbWUnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBDbGllbnQuZ2V0PFQ+KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2lnbkluKHByb3ZpZGVyOiBBdXRoUHJvdmlkZXIsIGFzPzogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qge2FjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4sIHVzZXIsIC4uLnJlc3VsdH0gPSBhd2FpdCBwcm92aWRlci5hdXRoZW50aWNhdGUodGhpcy5faHR0cENsaWVudCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJvbGUgbWF0Y2hlcy5cbiAgICAgICAgY29uc3Qgcm9sZSA9IHRoaXMuX2NvbmZpZz8ucGVybWlzc2lvbnM/LmdldFJvbGU/Lih1c2VyKSA/PyB1c2VyPy5yb2xlID8/IG51bGw7XG4gICAgICAgIGlmIChhcyAmJiAhYXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByb2xlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgaWYgdGhlIHByb3ZpZGVyIGlzIG9uZSBvZiB0aGUgYXZhaWxhYmxlXG4gICAgICAgIC8vIHByb3ZpZGVycyB0aGVuIHJldHVybiB0aGUgdXNlciBvYmplY3QgYW5kIHRoZSBwcm92aWRlci5cbiAgICAgICAgY29uc3QgYXBpUHJvdmlkZXIgPSByZXN1bHQ/LnByb3ZpZGVyID8/IG51bGw7XG4gICAgICAgIGNvbnN0IGFwaVZlcmlmeVRva2VuID0gcmVzdWx0Py52ZXJpZnlUb2tlbiA/PyBudWxsO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVQcm92aWRlcnMgPSB0aGlzLl9jb25maWc/LnByb3ZpZGVycyA/PyBbJ2VtYWlsJywgJ3NtcycsICd0b3RwJ107XG4gICAgICAgIGlmIChhdmFpbGFibGVQcm92aWRlcnMuaW5jbHVkZXMoYXBpUHJvdmlkZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gPEF1dGhTaWduSW5SZXNwb25zZT57dXNlciwgcHJvdmlkZXI6IGFwaVByb3ZpZGVyLCB2ZXJpZnlUb2tlbjogYXBpVmVyaWZ5VG9rZW59O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gc3RvcmFnZS5cbiAgICAgICAgdGhpcy5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXJ9O1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhFbWFpbChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBhcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL2xvZ2luJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNpZ25JbihuZXcgQXV0aEVtYWlsUHJvdmlkZXIoZW1haWwsIHBhc3N3b3JkLCB1cmwpLCBhcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2lnbkluV2l0aFZlcmlmeUNvZGUoY29kZTogc3RyaW5nLCB2ZXJpZnlUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3ZlcmlmeScpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhWZXJpZnlQcm92aWRlcihjb2RlLCB2ZXJpZnlUb2tlbiwgdXJsKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzZW5kVmVyaWZ5Q29kZSh2ZXJpZnlUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3Jlc2VuZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQkID0gdGhpcy5faHR0cENsaWVudC5wb3N0KHVybCwge1xuICAgICAgICAgICAgdmVyaWZ5X3Rva2VuOiB2ZXJpZnlUb2tlblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20ocmVzdWx0JCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVnaXN0ZXI8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zPzoge1xuICAgICAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG4gICAgICAgIH07XG4gICAgfSkge1xuICAgICAgICAvLyBFeGVjdXRlIEFQSSBjYWxsLlxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWdpc3RlcicpO1xuICAgICAgICBjb25zdCByZXN1bHQkID0gdGhpcy5faHR0cENsaWVudC5wb3N0PHsgdG9rZW46IHN0cmluZywgcmVmcmVzaF90b2tlbjogc3RyaW5nLCB1c2VyOiBhbnkgfT4odXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20ocmVzdWx0JCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gc3RvcmFnZS5cbiAgICAgICAgdGhpcy5zZXRUb2tlbnMocmVzdWx0Py50b2tlbiwgcmVzdWx0Py5yZWZyZXNoX3Rva2VuKTtcblxuICAgICAgICAvLyBTZXQgdGhlIHVzZXIgaW4gc3RvcmFnZS5cbiAgICAgICAgY29uc3QgdXNlciA9IHJlc3VsdD8udXNlcjtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFVzZXIodXNlcik7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSB1c2VyLlxuICAgICAgICByZXR1cm4gPFQ+dXNlcjtcbiAgICB9XG5cbiAgICBsb2dvdXQoKSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSByZWZyZXNoIHRva2VuIGp1c3QgY2xlYXIgdGhlIHNlc3Npb24uXG4gICAgICAgIC8vIE5vdGU6IFdlIGRvIHRoaXMgYmVjYXVzZSBlbHNlIHdlIHRyeSB0byBpbnZhbGlkYXRlXG4gICAgICAgIC8vIGFuIFwidW5kZWZpbmVkXCIgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGRvIGhhdmUgYSByZWZyZXNoIHRva2VuLCBzbyB0cnkgdG9cbiAgICAgICAgLy8gaW52YWxpZGF0ZSBpdCBpbiB0aGUgYmFja2VuZC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL2xvZ291dCcpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyTmFtZSA9IHRoaXMuX2NvbmZpZz8uaHR0cD8uaGVhZGVyID8/ICdBdXRob3JpemF0aW9uJztcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1toZWFkZXJOYW1lXTogcmVmcmVzaFRva2VufVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaXJzdFZhbHVlRnJvbShvYnNlcnZhYmxlJCkudGhlbihfID0+IF8pLmNhdGNoKF8gPT4gXyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gRG8gbm90aGluZyBiZWNhdXNlIHRoZSB0b2tlbnMgd2lsbCBiZSBkZWxldGVkIGFueXdheXMgZnJvbSB0aGUgc2Vzc2lvbi5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlbGV0ZSB0aGUgdG9rZW5zIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICAvLyBJZiB0aGUgcmVmcmVzaCB0b2tlbiBkb2VzXG4gICAgICAgIC8vIG5vdCBleGlzdCBqdXN0IHJldHVybiBhbiBvYnNlcnZhYmxlIG9mIG51bGwuXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW47XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSByZWZyZXNoIGNhbGwuXG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LmhlYWRlciA/PyAnQXV0aG9yaXphdGlvbic7XG4gICAgICAgIGNvbnN0IHNjaGVtZSA9IHRoaXMuX2NvbmZpZz8uaHR0cD8uc2NoZW1lID8/ICdCZWFyZXInO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3JlZnJlc2gnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpLnNldChVU0VfQVVUSE9SSVpBVElPTiwgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LmdldDx7IHRva2VuOiBzdHJpbmcsIHJlZnJlc2hfdG9rZW46IHN0cmluZyB9Pih1cmwsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtbaGVhZGVyTmFtZV06IGAke3NjaGVtZX0gJHtyZWZyZXNoVG9rZW59YH0sXG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHt0b2tlbiwgcmVmcmVzaF90b2tlbn0pID0+IHRoaXMuc2V0VG9rZW5zKHRva2VuLCByZWZyZXNoX3Rva2VuKSksXG4gICAgICAgICAgICBtYXAoKHt0b2tlbn0pID0+IHRva2VuKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIHJlcXVlc3RQYXNzd29yZChlbWFpbDogc3RyaW5nLCBleHRyYVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3Jlc2V0Jyk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy5faHR0cENsaWVudC5wb3N0KHVybCwgey4uLmV4dHJhUGFyYW1zLCBlbWFpbH0pO1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2V0UGFzc3dvcmQodG9rZW46IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldC1wYXNzd29yZCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgdG9rZW4sIHBhc3N3b3JkOiBuZXdQYXNzd29yZH0pO1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpO1xuICAgIH1cblxuICAgIGNsZWFyQW5kUmVkaXJlY3QoKSB7XG4gICAgICAgIC8vIDEuIERlbGV0ZSB0aGUgdG9rZW5zIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5jbGVhcigpO1xuXG4gICAgICAgIC8vIDIuIENvbXBvc2UgdGhlIHJvdXRlIHVybC5cbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB0aGlzLl9jb25maWc/LnJlZGlyZWN0cy51bmF1dGhlbnRpY2F0ZWQgPz8gbnVsbDtcblxuICAgICAgICAvLyAzLiBSb3V0ZSBiYWNrIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGEgcmVkaXJlY3QgdXJsLlxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIgJiYgcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRzID0gQXJyYXkuaXNBcnJheShyZWRpcmVjdFVybCkgPyByZWRpcmVjdFVybCA6IFtyZWRpcmVjdFVybF07XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcykudGhlbihfID0+IF8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUb2tlbnMoYWNjZXNzVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gb3VyIHNlc3Npb24uXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGF1dG8gcmVmcmVzaCBvZiB0aGUgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXV0b1JlZnJlc2hpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZEF1dG9SZWZyZXNoID0gdGhpcy5fY29uZmlnPy5hdXRvUmVmcmVzaCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFzaG91bGRBdXRvUmVmcmVzaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlblBheWxvYWQ/LmV4cGlyZXNBdCA/PyBudWxsO1xuICAgICAgICBpZiAoZXhwaXJlc0F0ID09PSBudWxsIHx8ICF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyA9IGV4cGlyZXNBdC5nZXRUaW1lKCkgLSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBvZmZzZXRJbk1pbGxpc2Vjb25kcyA9IDEwXzAwMDsgLy8gMTAgc2Vjb25kcy5cblxuICAgICAgICAvLyBXZSB3YW50IHRvIHN0YXJ0IHRoZSByZWZyZXNoIDEwIHNlY29uZHMgYmVmb3JlIGl0IGV4cGlyZXMuXG4gICAgICAgIGNvbnN0IGFjdHVhbFRpbWluZyA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyAtIG9mZnNldEluTWlsbGlzZWNvbmRzO1xuICAgICAgICBpZiAoYWN0dWFsVGltaW5nIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FwIHRoZSB0aW1pbmdzIGJlY2F1c2UgaWZcbiAgICAgICAgLy8gd2UgZ2V0IGxhcmdlIG51bWJlcnMgaXQgbWlnaHQgY2F1c2UgdW53YW50ZWQgcmVzdWx0cy5cbiAgICAgICAgY29uc3QgbWF4VGltaW5nID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gMjQgaG91cnMuXG4gICAgICAgIGNvbnN0IGNhcHBlZFRpbWluZyA9IE1hdGgubWF4KDEsIE1hdGgubWluKGFjdHVhbFRpbWluZywgbWF4VGltaW5nKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVmcmVzaEhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQ/Lih0aGlzLl9yZWZyZXNoSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSBzZXRUaW1lb3V0Py4oKCkgPT4gdGhpcy5hdXRvUmVmcmVzaCgpLCBjYXBwZWRUaW1pbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0LlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvUmVmcmVzaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciBpdCB0byByZWZyZXNoLlxuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCQgPSB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlZnJlc2gkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyByZWZyZXNoaW5nLCB3ZSBuZWVkIHRvIGNsZWFyLlxuICAgICAgICAgICAgdGhpcy5jbGVhckFuZFJlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybChlbmRwb2ludDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5faHR0cEFsaWFzLCBlbmRwb2ludF1cbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgIH1cblxufVxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export class AbstractAuthDirective {
|
|
2
|
+
constructor(templateRef, viewContainerRef) {
|
|
3
|
+
this.templateRef = templateRef;
|
|
4
|
+
this.viewContainerRef = viewContainerRef;
|
|
5
|
+
// Data.
|
|
6
|
+
this.valid = false;
|
|
7
|
+
// Templates.
|
|
8
|
+
this.elseTemplateRef = null;
|
|
9
|
+
// View refs.
|
|
10
|
+
this.thenViewRef = null;
|
|
11
|
+
this.elseViewRef = null;
|
|
12
|
+
}
|
|
13
|
+
updateView() {
|
|
14
|
+
if (this.valid) {
|
|
15
|
+
if (!this.thenViewRef) {
|
|
16
|
+
this.viewContainerRef.clear();
|
|
17
|
+
this.elseViewRef = null;
|
|
18
|
+
if (this.templateRef) {
|
|
19
|
+
this.thenViewRef = this.viewContainerRef.createEmbeddedView(this.templateRef);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
if (!this.elseViewRef) {
|
|
25
|
+
this.viewContainerRef.clear();
|
|
26
|
+
this.thenViewRef = null;
|
|
27
|
+
if (this.elseTemplateRef) {
|
|
28
|
+
this.elseViewRef = this.viewContainerRef.createEmbeddedView(this.elseTemplateRef);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
assertTemplate(property, templateRef) {
|
|
34
|
+
const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
|
|
35
|
+
if (!isTemplateRefOrNull) {
|
|
36
|
+
throw new Error(`${property} must be a TemplateRef.`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvZGlyZWN0aXZlcy9hYnN0cmFjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFnQixxQkFBcUI7SUFZdkMsWUFBZ0MsV0FBNkIsRUFDN0IsZ0JBQWtDO1FBRGxDLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBWGxFLFFBQVE7UUFDRSxVQUFLLEdBQVksS0FBSyxDQUFDO1FBRWpDLGFBQWE7UUFDSCxvQkFBZSxHQUE0QixJQUFJLENBQUM7UUFFMUQsYUFBYTtRQUNILGdCQUFXLEdBQWdDLElBQUksQ0FBQztRQUNoRCxnQkFBVyxHQUFnQyxJQUFJLENBQUM7SUFJMUQsQ0FBQztJQUVTLFVBQVU7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNqRjthQUNKO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDckY7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVTLGNBQWMsQ0FBQyxRQUFnQixFQUFFLFdBQW9DO1FBQzNFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxRQUFRLHlCQUF5QixDQUFDLENBQUM7U0FDekQ7SUFDTCxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VtYmVkZGVkVmlld1JlZiwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RBdXRoRGlyZWN0aXZlIHtcblxuICAgIC8vIERhdGEuXG4gICAgcHJvdGVjdGVkIHZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBUZW1wbGF0ZXMuXG4gICAgcHJvdGVjdGVkIGVsc2VUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gVmlldyByZWZzLlxuICAgIHByb3RlY3RlZCB0aGVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICBwcm90ZWN0ZWQgZWxzZVZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVWaWV3KCkge1xuICAgICAgICBpZiAodGhpcy52YWxpZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRoZW5WaWV3UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbHNlVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGVuVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmVsc2VWaWV3UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50aGVuVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWxzZVRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxzZVZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuZWxzZVRlbXBsYXRlUmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXNzZXJ0VGVtcGxhdGUocHJvcGVydHk6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGlzVGVtcGxhdGVSZWZPck51bGwgPSAhISghdGVtcGxhdGVSZWYgfHwgdGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KTtcbiAgICAgICAgaWYgKCFpc1RlbXBsYXRlUmVmT3JOdWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvcGVydHl9IG11c3QgYmUgYSBUZW1wbGF0ZVJlZi5gKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
|
|
@@ -1,31 +1,42 @@
|
|
|
1
|
-
import { Directive } from '@angular/core';
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { AbstractAuthDirective } from './abstract.directive';
|
|
2
3
|
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
4
|
+
import { Subscription } from 'rxjs';
|
|
3
5
|
import * as i0 from "@angular/core";
|
|
4
6
|
import * as i1 from "../auth.service";
|
|
5
|
-
export class BbAuthenticated {
|
|
6
|
-
constructor(_auth,
|
|
7
|
+
export class BbAuthenticated extends AbstractAuthDirective {
|
|
8
|
+
constructor(_auth, _templateRef, _viewContainerRef) {
|
|
9
|
+
super(_templateRef, _viewContainerRef);
|
|
7
10
|
this._auth = _auth;
|
|
8
|
-
this.
|
|
11
|
+
this._templateRef = _templateRef;
|
|
9
12
|
this._viewContainerRef = _viewContainerRef;
|
|
13
|
+
// Subscriptions.
|
|
14
|
+
this._subscription = new Subscription();
|
|
15
|
+
}
|
|
16
|
+
set bbAuthenticatedElse(templateRef) {
|
|
17
|
+
this.assertTemplate('bbAuthenticatedElse', templateRef);
|
|
18
|
+
this.elseTemplateRef = templateRef;
|
|
19
|
+
this.updateView();
|
|
10
20
|
}
|
|
11
21
|
ngOnInit() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
this._viewContainerRef.createEmbeddedView(this._template);
|
|
22
|
+
const subscription = this._auth.user.pipe(map(user => !!user), distinctUntilChanged()).subscribe(valid => {
|
|
23
|
+
this.valid = valid;
|
|
24
|
+
this.updateView();
|
|
17
25
|
});
|
|
26
|
+
this._subscription.add(subscription);
|
|
18
27
|
}
|
|
19
28
|
ngOnDestroy() {
|
|
20
29
|
this._subscription?.unsubscribe();
|
|
21
30
|
}
|
|
22
31
|
}
|
|
23
|
-
BbAuthenticated.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
24
|
-
BbAuthenticated.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
32
|
+
BbAuthenticated.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbAuthenticated, deps: [{ token: i1.Auth }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
33
|
+
BbAuthenticated.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: BbAuthenticated, selector: "[bbAuthenticated]", inputs: { bbAuthenticatedElse: "bbAuthenticatedElse" }, usesInheritance: true, ngImport: i0 });
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbAuthenticated, decorators: [{
|
|
26
35
|
type: Directive,
|
|
27
36
|
args: [{
|
|
28
37
|
selector: '[bbAuthenticated]'
|
|
29
38
|
}]
|
|
30
|
-
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }
|
|
31
|
-
|
|
39
|
+
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { bbAuthenticatedElse: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}] } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dGhlbnRpY2F0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFtRCxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBS2xDLE1BQU0sT0FBTyxlQUFnQixTQUFRLHFCQUFxQjtJQVl0RCxZQUFvQixLQUFXLEVBQ1gsWUFBOEIsRUFDOUIsaUJBQW1DO1FBQ25ELEtBQUssQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUh2QixVQUFLLEdBQUwsS0FBSyxDQUFNO1FBQ1gsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFadkQsaUJBQWlCO1FBQ1Qsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBYTNDLENBQUM7SUFYRCxJQUNJLG1CQUFtQixDQUFDLFdBQTZCO1FBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFRRCxRQUFRO1FBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ25CLG9CQUFvQixFQUFFLENBQ3pCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzs0R0EvQlEsZUFBZTtnR0FBZixlQUFlOzJGQUFmLGVBQWU7a0JBSDNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtpQkFDaEM7b0pBT08sbUJBQW1CO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdEF1dGhEaXJlY3RpdmV9IGZyb20gJy4vYWJzdHJhY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBdXRofSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tiYkF1dGhlbnRpY2F0ZWRdJ1xufSlcbmV4cG9ydCBjbGFzcyBCYkF1dGhlbnRpY2F0ZWQgZXh0ZW5kcyBBYnN0cmFjdEF1dGhEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBTdWJzY3JpcHRpb25zLlxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiQXV0aGVudGljYXRlZEVsc2UodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5hc3NlcnRUZW1wbGF0ZSgnYmJBdXRoZW50aWNhdGVkRWxzZScsIHRlbXBsYXRlUmVmKTtcbiAgICAgICAgdGhpcy5lbHNlVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aDogQXV0aCxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHN1cGVyKF90ZW1wbGF0ZVJlZiwgX3ZpZXdDb250YWluZXJSZWYpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9hdXRoLnVzZXIucGlwZShcbiAgICAgICAgICAgIG1hcCh1c2VyID0+ICEhdXNlciksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICkuc3Vic2NyaWJlKHZhbGlkID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2JiQXV0aGVudGljYXRlZEVsc2U6IFRlbXBsYXRlUmVmPGFueT47XG5cbn1cbiJdfQ==
|
|
@@ -1,73 +1,49 @@
|
|
|
1
1
|
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { switchMap } from 'rxjs/operators';
|
|
2
|
+
import { BehaviorSubject, combineLatest, Subscription } from 'rxjs';
|
|
3
|
+
import { distinctUntilChanged, switchMap } from 'rxjs/operators';
|
|
4
|
+
import { AbstractAuthDirective } from './abstract.directive';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../permissions.service";
|
|
6
|
-
export class BbPermission {
|
|
6
|
+
import * as i1 from "../permissions/permissions.service";
|
|
7
|
+
export class BbPermission extends AbstractAuthDirective {
|
|
7
8
|
constructor(_permissions, _templateRef, _viewContainerRef) {
|
|
9
|
+
super(_templateRef, _viewContainerRef);
|
|
8
10
|
this._permissions = _permissions;
|
|
9
11
|
this._templateRef = _templateRef;
|
|
10
12
|
this._viewContainerRef = _viewContainerRef;
|
|
11
13
|
// Data.
|
|
12
14
|
this._permission$ = new BehaviorSubject([]);
|
|
13
|
-
this.
|
|
14
|
-
|
|
15
|
-
this.
|
|
16
|
-
this._elseViewRef = null;
|
|
17
|
-
this.getAllowedPermissions = (value) => {
|
|
18
|
-
return Array.isArray(value) ? value : [value];
|
|
19
|
-
};
|
|
20
|
-
this.assertTemplate = (property, templateRef) => {
|
|
21
|
-
const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
|
|
22
|
-
if (!isTemplateRefOrNull) {
|
|
23
|
-
throw new Error(`${property} must be a TemplateRef.`);
|
|
24
|
-
}
|
|
25
|
-
};
|
|
15
|
+
this._mode$ = new BehaviorSubject('and');
|
|
16
|
+
// Subscriptions.
|
|
17
|
+
this._subscription = new Subscription();
|
|
26
18
|
}
|
|
27
19
|
set bbPermission(value) {
|
|
28
|
-
const permissions =
|
|
20
|
+
const permissions = Array.isArray(value) ? value : [value];
|
|
29
21
|
this._permission$.next(permissions);
|
|
30
22
|
this.updateView();
|
|
31
23
|
}
|
|
32
24
|
set bbPermissionElse(templateRef) {
|
|
33
25
|
this.assertTemplate('bbPermissionElse', templateRef);
|
|
34
|
-
this.
|
|
26
|
+
this.elseTemplateRef = templateRef;
|
|
35
27
|
this.updateView();
|
|
36
28
|
}
|
|
29
|
+
set bbPermissionMode(mode) {
|
|
30
|
+
this._mode$.next(mode);
|
|
31
|
+
}
|
|
37
32
|
ngOnInit() {
|
|
38
|
-
const check$ = this._permission
|
|
39
|
-
|
|
40
|
-
this.
|
|
33
|
+
const check$ = combineLatest([this._permission$, this._mode$]).pipe(switchMap(([permissions, mode]) => this._permissions.has(permissions, { mode })), distinctUntilChanged());
|
|
34
|
+
const subscription = check$.subscribe(valid => {
|
|
35
|
+
this.valid = valid;
|
|
41
36
|
this.updateView();
|
|
42
37
|
});
|
|
38
|
+
this._subscription.add(subscription);
|
|
43
39
|
}
|
|
44
40
|
ngOnDestroy() {
|
|
45
41
|
this._subscription?.unsubscribe();
|
|
46
42
|
}
|
|
47
|
-
updateView() {
|
|
48
|
-
if (this._valid) {
|
|
49
|
-
if (!this._thenViewRef) {
|
|
50
|
-
this._viewContainerRef.clear();
|
|
51
|
-
this._elseViewRef = null;
|
|
52
|
-
if (this._templateRef) {
|
|
53
|
-
this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
if (!this._elseViewRef) {
|
|
59
|
-
this._viewContainerRef.clear();
|
|
60
|
-
this._thenViewRef = null;
|
|
61
|
-
if (this._elseTemplateRef) {
|
|
62
|
-
this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
43
|
}
|
|
68
|
-
BbPermission.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
69
|
-
BbPermission.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.
|
|
70
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
44
|
+
BbPermission.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbPermission, deps: [{ token: i1.Permissions }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
45
|
+
BbPermission.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: BbPermission, selector: "[bbPermission]", inputs: { bbPermission: "bbPermission", bbPermissionElse: "bbPermissionElse", bbPermissionMode: "bbPermissionMode" }, usesInheritance: true, ngImport: i0 });
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbPermission, decorators: [{
|
|
71
47
|
type: Directive,
|
|
72
48
|
args: [{
|
|
73
49
|
selector: '[bbPermission]'
|
|
@@ -76,5 +52,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImpor
|
|
|
76
52
|
type: Input
|
|
77
53
|
}], bbPermissionElse: [{
|
|
78
54
|
type: Input
|
|
55
|
+
}], bbPermissionMode: [{
|
|
56
|
+
type: Input
|
|
79
57
|
}] } });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL3Blcm1pc3Npb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFtRCxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRS9ELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7QUFLM0QsTUFBTSxPQUFPLFlBQWEsU0FBUSxxQkFBcUI7SUE0Qm5ELFlBQW9CLFlBQXlCLEVBQ3pCLFlBQThCLEVBQzlCLGlCQUFtQztRQUNuRCxLQUFLLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFIdkIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUE1QnZELFFBQVE7UUFDQSxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBaUIsS0FBSyxDQUFDLENBQUM7UUFxQjVELGlCQUFpQjtRQUNULGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQU0zQyxDQUFDO0lBMUJELElBQ0ksWUFBWSxDQUFDLEtBQXdCO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksZ0JBQWdCLENBQUMsV0FBNkI7UUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksZ0JBQWdCLENBQUMsSUFBb0I7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQVdELFFBQVE7UUFDSixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDL0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUMsRUFDOUUsb0JBQW9CLEVBQUUsQ0FDekIsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7O3lHQWpEUSxZQUFZOzZGQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFIeEIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3QjsySkFRTyxZQUFZO3NCQURmLEtBQUs7Z0JBUUYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVFGLGdCQUFnQjtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtQZXJtaXNzaW9uTW9kZX0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wZXJtaXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7UGVybWlzc2lvbnN9IGZyb20gJy4uL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtBYnN0cmFjdEF1dGhEaXJlY3RpdmV9IGZyb20gJy4vYWJzdHJhY3QuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbYmJQZXJtaXNzaW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgQmJQZXJtaXNzaW9uIGV4dGVuZHMgQWJzdHJhY3RBdXRoRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLy8gRGF0YS5cbiAgICBwcml2YXRlIF9wZXJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgICBwcml2YXRlIF9tb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGVybWlzc2lvbk1vZGU+KCdhbmQnKTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiUGVybWlzc2lvbih2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvbiQubmV4dChwZXJtaXNzaW9ucyk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiUGVybWlzc2lvbkVsc2UodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5hc3NlcnRUZW1wbGF0ZSgnYmJQZXJtaXNzaW9uRWxzZScsIHRlbXBsYXRlUmVmKTtcbiAgICAgICAgdGhpcy5lbHNlVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgYmJQZXJtaXNzaW9uTW9kZShtb2RlOiBQZXJtaXNzaW9uTW9kZSkge1xuICAgICAgICB0aGlzLl9tb2RlJC5uZXh0KG1vZGUpO1xuICAgIH1cblxuICAgIC8vIFN1YnNjcmlwdGlvbnMuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgc3VwZXIoX3RlbXBsYXRlUmVmLCBfdmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX3Blcm1pc3Npb24kLCB0aGlzLl9tb2RlJF0pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKFtwZXJtaXNzaW9ucywgbW9kZV0pID0+IHRoaXMuX3Blcm1pc3Npb25zLmhhcyhwZXJtaXNzaW9ucywge21vZGV9KSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY2hlY2skLnN1YnNjcmliZSh2YWxpZCA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkID0gdmFsaWQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9iYlBlcm1pc3Npb246IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9iYlBlcm1pc3Npb25FbHNlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9iYlBlcm1pc3Npb25Nb2RlOiBQZXJtaXNzaW9uTW9kZTtcblxufVxuIl19
|
|
@@ -1,34 +1,43 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { firstValueFrom } from 'rxjs';
|
|
1
|
+
import { Injectable, Optional } from '@angular/core';
|
|
3
2
|
import { map } from 'rxjs/operators';
|
|
3
|
+
import { first } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../auth.service";
|
|
6
|
+
import * as i2 from "@angular/router";
|
|
7
|
+
import * as i3 from "../interfaces/config.interface";
|
|
6
8
|
export class BbAnonymousGuard {
|
|
7
|
-
constructor(_auth) {
|
|
9
|
+
constructor(_auth, _router, _config) {
|
|
8
10
|
this._auth = _auth;
|
|
11
|
+
this._router = _router;
|
|
12
|
+
this._config = _config;
|
|
9
13
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
canActivate(_, __) {
|
|
15
|
+
return this._auth.user.pipe(map(user => !!user), map(isAuthenticated => {
|
|
16
|
+
if (!isAuthenticated) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
// If we don't have a URL to go to we can just say
|
|
20
|
+
// the user is not allowed in this route by returning false.
|
|
21
|
+
const nextUrl = this._config?.redirects?.authenticated ?? null;
|
|
22
|
+
if (!nextUrl) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];
|
|
26
|
+
return this._router.createUrlTree(commands);
|
|
27
|
+
}), first());
|
|
21
28
|
}
|
|
22
29
|
canActivateChild(childRoute, state) {
|
|
23
30
|
return this.canActivate(childRoute, state);
|
|
24
31
|
}
|
|
25
32
|
}
|
|
26
|
-
BbAnonymousGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
27
|
-
BbAnonymousGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
33
|
+
BbAnonymousGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbAnonymousGuard, deps: [{ token: i1.Auth }, { token: i2.Router }, { token: i3.AuthConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
34
|
+
BbAnonymousGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbAnonymousGuard, providedIn: 'root' });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: BbAnonymousGuard, decorators: [{
|
|
29
36
|
type: Injectable,
|
|
30
37
|
args: [{
|
|
31
38
|
providedIn: 'root'
|
|
32
39
|
}]
|
|
33
|
-
}], ctorParameters: function () { return [{ type: i1.Auth }
|
|
34
|
-
|
|
40
|
+
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i2.Router }, { type: i3.AuthConfig, decorators: [{
|
|
41
|
+
type: Optional
|
|
42
|
+
}] }]; } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5vbnltb3VzLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvZ3VhcmRzL2Fub255bW91cy5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFLM0IsTUFBTSxPQUFPLGdCQUFnQjtJQUV6QixZQUFvQixLQUFXLEVBQ1gsT0FBZSxFQUNILE9BQW9CO1FBRmhDLFVBQUssR0FBTCxLQUFLLENBQU07UUFDWCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ0gsWUFBTyxHQUFQLE9BQU8sQ0FBYTtJQUNwRCxDQUFDO0lBRUQsV0FBVyxDQUFDLENBQXlCLEVBQUUsRUFBdUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDbkIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxrREFBa0Q7WUFDbEQsNERBQTREO1lBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7WUFDL0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNWLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0MsRUFBRSxLQUEwQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7OzZHQS9CUSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZiLE1BQU07MkZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBS2dCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0F1dGhDb25maWd9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQge0luamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXV0aH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge2ZpcnN0fSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCYkFub255bW91c0d1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUsIENhbkFjdGl2YXRlQ2hpbGQge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aDogQXV0aCxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb25maWc/OiBBdXRoQ29uZmlnKSB7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZhdGUoXzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgX186IFJvdXRlclN0YXRlU25hcHNob3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGgudXNlci5waXBlKFxuICAgICAgICAgICAgbWFwKHVzZXIgPT4gISF1c2VyKSxcbiAgICAgICAgICAgIG1hcChpc0F1dGhlbnRpY2F0ZWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBVUkwgdG8gZ28gdG8gd2UgY2FuIGp1c3Qgc2F5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByb3V0ZSBieSByZXR1cm5pbmcgZmFsc2UuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFVybCA9IHRoaXMuX2NvbmZpZz8ucmVkaXJlY3RzPy5hdXRoZW50aWNhdGVkID8/IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmlzQXJyYXkobmV4dFVybCkgPyBuZXh0VXJsIDogW25leHRVcmxdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIuY3JlYXRlVXJsVHJlZShjb21tYW5kcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjYW5BY3RpdmF0ZUNoaWxkKGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlKGNoaWxkUm91dGUsIHN0YXRlKTtcbiAgICB9XG5cbn1cbiJdfQ==
|