@bravobit/bb-foundation 0.26.2 → 0.27.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/directives/authenticated.directive.d.ts +1 -1
- package/collections/lib/components/collections-pager/collections-pager.component.d.ts +1 -1
- package/collections/lib/components/collections-viewer/collections-viewer.component.d.ts +1 -1
- package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +1 -1
- package/controls/lib/checkbox/checkbox-group/checkbox-group.component.d.ts +1 -1
- package/controls/lib/control-error/control-error/control-error.component.d.ts +1 -1
- package/controls/lib/form-control/form-control/form-control.component.d.ts +1 -1
- package/controls/lib/form-control/form-control-addon/form-control-addon.component.d.ts +1 -1
- package/controls/lib/form-control/form-control-input.directive.d.ts +1 -1
- package/controls/lib/radio/radio-button/radio-button.component.d.ts +1 -1
- package/controls/lib/radio/radio-group/radio-group.component.d.ts +1 -1
- package/controls/lib/toggle/toggle/toggle.component.d.ts +1 -1
- package/controls/lib/toggle/toggle-group/toggle-group.component.d.ts +1 -1
- package/dashboard/lib/dashboard/dashboard.component.d.ts +1 -1
- package/dashboard/lib/dashboard-menu/dashboard-menu.component.d.ts +1 -1
- package/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.d.ts +1 -1
- package/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.d.ts +1 -1
- package/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.d.ts +1 -1
- package/dialog/lib/dialog-modal/dialog-modal.component.d.ts +1 -1
- package/elements/lib/avatar/avatar.component.d.ts +1 -1
- package/elements/lib/button/button.component.d.ts +2 -2
- package/elements/lib/checkbox/checkbox.component.d.ts +1 -1
- package/elements/lib/date-picker/date-picker.component.d.ts +1 -1
- package/elements/lib/directives/input.directive.d.ts +2 -2
- package/elements/lib/dropdown/dropdown.component.d.ts +1 -1
- package/elements/lib/file-picker/file-picker.component.d.ts +2 -2
- package/elements/lib/form-control/form-control.component.d.ts +1 -1
- package/elements/lib/form-error/form-error.component.d.ts +1 -1
- package/elements/lib/form-group/form-group.component.d.ts +1 -1
- package/elements/lib/icon/icon.component.d.ts +1 -1
- package/elements/lib/image-picker/image-picker.component.d.ts +1 -1
- package/elements/lib/spinner/spinner.component.d.ts +1 -1
- package/esm2022/auth/lib/auth.interceptor.mjs +91 -0
- package/esm2022/auth/lib/auth.module.mjs +36 -0
- package/esm2022/auth/lib/auth.service.mjs +271 -0
- package/esm2022/auth/lib/directives/authenticated.directive.mjs +43 -0
- package/esm2022/auth/lib/guards/anonymous.guard.mjs +54 -0
- package/esm2022/auth/lib/guards/authenticated.guard.mjs +57 -0
- package/esm2022/collections/lib/collections.module.mjs +55 -0
- package/esm2022/collections/lib/components/collections-pager/collections-pager.component.mjs +124 -0
- package/esm2022/collections/lib/components/collections-viewer/collections-viewer.component.mjs +32 -0
- package/esm2022/collections/lib/components/collections.directive.mjs +47 -0
- package/esm2022/controls/lib/checkbox/checkbox/checkbox.component.mjs +179 -0
- package/esm2022/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +69 -0
- package/esm2022/controls/lib/checkbox/checkbox.module.mjs +21 -0
- package/esm2022/controls/lib/control-error/control-error/control-error.component.mjs +64 -0
- package/esm2022/controls/lib/control-error/control-error-submit.directive.mjs +48 -0
- package/esm2022/controls/lib/control-error/control-error.module.mjs +20 -0
- package/esm2022/controls/lib/controls.module.mjs +63 -0
- package/esm2022/controls/lib/form-control/form-control/form-control.component.mjs +80 -0
- package/esm2022/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +23 -0
- package/esm2022/controls/lib/form-control/form-control-input.directive.mjs +125 -0
- package/esm2022/controls/lib/form-control/form-control.module.mjs +35 -0
- package/esm2022/controls/lib/radio/radio-button/radio-button.component.mjs +76 -0
- package/esm2022/controls/lib/radio/radio-group/radio-group.component.mjs +169 -0
- package/esm2022/controls/lib/radio/radio.module.mjs +22 -0
- package/esm2022/controls/lib/toggle/toggle/toggle.component.mjs +154 -0
- package/esm2022/controls/lib/toggle/toggle-group/toggle-group.component.mjs +63 -0
- package/esm2022/controls/lib/toggle/toggle.module.mjs +21 -0
- package/esm2022/dashboard/lib/dashboard/dashboard.component.mjs +58 -0
- package/{esm2020 → esm2022}/dashboard/lib/dashboard-header/dashboard-header.component.mjs +6 -5
- package/esm2022/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +32 -0
- package/esm2022/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +30 -0
- package/esm2022/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +76 -0
- package/esm2022/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +100 -0
- package/esm2022/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +63 -0
- package/esm2022/dashboard/lib/dashboard.module.mjs +48 -0
- package/esm2022/dialog/lib/dialog-actions/dialog-actions.component.mjs +13 -0
- package/esm2022/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +47 -0
- package/esm2022/dialog/lib/dialog-container/dialog-container.component.mjs +78 -0
- package/esm2022/dialog/lib/dialog-header/dialog-header.component.mjs +19 -0
- package/esm2022/dialog/lib/dialog-link/dialog-link.component.mjs +12 -0
- package/esm2022/dialog/lib/dialog-modal/dialog-modal.component.mjs +68 -0
- package/esm2022/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +80 -0
- package/esm2022/dialog/lib/dialog.insertion.mjs +17 -0
- package/esm2022/dialog/lib/dialog.module.mjs +69 -0
- package/esm2022/dialog/lib/dialog.service.mjs +69 -0
- package/esm2022/elements/lib/avatar/avatar.component.mjs +150 -0
- package/esm2022/elements/lib/button/button.component.mjs +63 -0
- package/esm2022/elements/lib/checkbox/checkbox.component.mjs +74 -0
- package/esm2022/elements/lib/date-picker/date-picker.component.mjs +308 -0
- package/esm2022/elements/lib/directives/addon.directive.mjs +31 -0
- package/esm2022/elements/lib/directives/form-submit.directive.mjs +51 -0
- package/esm2022/elements/lib/directives/form-submitter.directive.mjs +26 -0
- package/esm2022/elements/lib/directives/input.directive.mjs +138 -0
- package/esm2022/elements/lib/dropdown/dropdown.component.mjs +102 -0
- package/esm2022/elements/lib/elements.module.mjs +178 -0
- package/esm2022/elements/lib/file-picker/file-picker.component.mjs +237 -0
- package/esm2022/elements/lib/form-control/form-control.component.mjs +50 -0
- package/esm2022/elements/lib/form-error/form-error.component.mjs +124 -0
- package/esm2022/elements/lib/form-group/form-group.component.mjs +19 -0
- package/esm2022/elements/lib/icon/icon.component.mjs +103 -0
- package/esm2022/elements/lib/image-picker/image-picker.component.mjs +107 -0
- package/esm2022/elements/lib/pipes/file-image.pipe.mjs +44 -0
- package/esm2022/elements/lib/pipes/file-size.pipe.mjs +29 -0
- package/esm2022/elements/lib/pipes/relative-time.pipe.mjs +97 -0
- package/esm2022/elements/lib/spinner/spinner.component.mjs +26 -0
- package/esm2022/elements/lib/tag/tag.component.mjs +19 -0
- package/esm2022/http/lib/http.module.mjs +44 -0
- package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +51 -0
- package/esm2022/http/lib/interceptors/error.interceptor.mjs +33 -0
- package/esm2022/lib/core/services/clipboard.service.mjs +71 -0
- package/esm2022/lib/core/services/exif.service.mjs +164 -0
- package/esm2022/lib/core/services/file-loader.service.mjs +88 -0
- package/esm2022/lib/core/services/image-converter.service.mjs +124 -0
- package/esm2022/lib/core/services/languages.service.mjs +75 -0
- package/esm2022/lib/core/services/network.service.mjs +56 -0
- package/esm2022/lib/core/services/patch.service.mjs +64 -0
- package/esm2022/localize/lib/localize.module.mjs +82 -0
- package/esm2022/localize/lib/localize.pipe.mjs +47 -0
- package/esm2022/localize/lib/localize.service.mjs +186 -0
- package/{esm2020 → esm2022}/localize/lib/transforms/interpolate.transform.mjs +1 -1
- package/{esm2020 → esm2022}/localize/lib/transforms/reference.transform.mjs +1 -1
- package/esm2022/localize/lib/views/localize-string/localize-string.component.mjs +89 -0
- package/esm2022/localize/lib/views/localize-template.directive.mjs +22 -0
- package/esm2022/masking/lib/directives/currency-mask.directive.mjs +36 -0
- package/esm2022/masking/lib/directives/date-mask.directive.mjs +36 -0
- package/esm2022/masking/lib/directives/input-mask.directive.mjs +119 -0
- package/esm2022/masking/lib/masking.module.mjs +31 -0
- package/esm2022/masking/lib/masking.service.mjs +104 -0
- package/esm2022/notifications/lib/notifications-item/notifications-item.component.mjs +101 -0
- package/esm2022/notifications/lib/notifications-list/notifications-list.component.mjs +48 -0
- package/esm2022/notifications/lib/notifications.module.mjs +31 -0
- package/esm2022/notifications/lib/notifications.service.mjs +142 -0
- package/esm2022/permissions/lib/directives/permission.directive.mjs +89 -0
- package/esm2022/permissions/lib/guards/permission.guard.mjs +57 -0
- package/esm2022/permissions/lib/permissions.module.mjs +40 -0
- package/esm2022/permissions/lib/permissions.service.mjs +97 -0
- package/esm2022/recaptcha/lib/recaptcha/recaptcha.component.mjs +220 -0
- package/esm2022/recaptcha/lib/recaptcha-loader.service.mjs +96 -0
- package/esm2022/recaptcha/lib/recaptcha.module.mjs +28 -0
- package/esm2022/storage/lib/storage.service.mjs +110 -0
- package/esm2022/table/lib/components/table/table.component.mjs +194 -0
- package/esm2022/table/lib/components/table-cell/table-cell.component.mjs +12 -0
- package/esm2022/table/lib/components/table-header-cell/table-header-cell.component.mjs +132 -0
- package/esm2022/table/lib/components/table-pager/table-pager.component.mjs +137 -0
- package/esm2022/table/lib/data/generic.data.mjs +82 -0
- package/esm2022/table/lib/table.module.mjs +43 -0
- package/esm2022/theming/lib/theming.directive.mjs +39 -0
- package/esm2022/theming/lib/theming.module.mjs +17 -0
- package/esm2022/tooltip/lib/tooltip-container/tooltip-container.component.mjs +32 -0
- package/esm2022/tooltip/lib/tooltip.directive.mjs +141 -0
- package/esm2022/tooltip/lib/tooltip.module.mjs +32 -0
- package/esm2022/utils/lib/directives/autosize.directive.mjs +73 -0
- package/esm2022/utils/lib/directives/focus-trap.directive.mjs +78 -0
- package/esm2022/utils/lib/directives/focus.directive.mjs +38 -0
- package/esm2022/utils/lib/directives/template.directive.mjs +29 -0
- package/esm2022/utils/lib/functions/parse-date.function.mjs +19 -0
- package/esm2022/utils/lib/utils.module.mjs +36 -0
- package/esm2022/utils/public_api.mjs +7 -0
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-auth.mjs +19 -19
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-collections.mjs +38 -38
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-collections.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-controls.mjs +83 -83
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-controls.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dashboard.mjs +37 -37
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dialog.mjs +46 -46
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-elements.mjs +185 -185
- package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-http.mjs +10 -10
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-http.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-localize.mjs +20 -20
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-masking.mjs +20 -20
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-notifications.mjs +13 -13
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-permissions.mjs +13 -13
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-permissions.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-recaptcha.mjs +16 -16
- package/{fesm2015 → fesm2022}/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-storage.mjs +3 -3
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-table.mjs +46 -36
- package/fesm2022/bravobit-bb-foundation-table.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-theming.mjs +7 -7
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-theming.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-tooltip.mjs +13 -13
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-tooltip.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation-utils.mjs +42 -23
- package/fesm2022/bravobit-bb-foundation-utils.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation.mjs +21 -21
- package/{fesm2020 → fesm2022}/bravobit-bb-foundation.mjs.map +1 -1
- package/localize/lib/views/localize-string/localize-string.component.d.ts +1 -1
- package/localize/lib/views/localize-template.directive.d.ts +1 -1
- package/masking/lib/directives/currency-mask.directive.d.ts +1 -1
- package/masking/lib/directives/date-mask.directive.d.ts +1 -1
- package/masking/lib/directives/input-mask.directive.d.ts +1 -1
- package/notifications/lib/notifications-item/notifications-item.component.d.ts +1 -1
- package/package.json +70 -112
- package/permissions/lib/directives/permission.directive.d.ts +1 -1
- package/recaptcha/lib/recaptcha/recaptcha.component.d.ts +1 -1
- package/table/lib/components/table/table.component.d.ts +1 -1
- package/table/lib/components/table-header-cell/table-header-cell.component.d.ts +1 -1
- package/table/lib/components/table-pager/table-pager.component.d.ts +1 -1
- package/table/lib/data/generic.data.d.ts +2 -0
- package/theming/lib/theming.directive.d.ts +1 -1
- package/tooltip/lib/tooltip.directive.d.ts +1 -1
- package/utils/lib/directives/autosize.directive.d.ts +1 -1
- package/utils/lib/directives/template.directive.d.ts +1 -1
- package/utils/lib/functions/parse-date.function.d.ts +1 -0
- package/utils/public_api.d.ts +1 -0
- package/esm2020/auth/lib/auth.interceptor.mjs +0 -90
- package/esm2020/auth/lib/auth.module.mjs +0 -35
- package/esm2020/auth/lib/auth.service.mjs +0 -270
- package/esm2020/auth/lib/directives/authenticated.directive.mjs +0 -42
- package/esm2020/auth/lib/guards/anonymous.guard.mjs +0 -53
- package/esm2020/auth/lib/guards/authenticated.guard.mjs +0 -56
- package/esm2020/collections/lib/collections.module.mjs +0 -54
- package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +0 -123
- package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +0 -31
- package/esm2020/collections/lib/components/collections.directive.mjs +0 -43
- package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +0 -178
- package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +0 -68
- package/esm2020/controls/lib/checkbox/checkbox.module.mjs +0 -20
- package/esm2020/controls/lib/control-error/control-error/control-error.component.mjs +0 -63
- package/esm2020/controls/lib/control-error/control-error-submit.directive.mjs +0 -47
- package/esm2020/controls/lib/control-error/control-error.module.mjs +0 -19
- package/esm2020/controls/lib/controls.module.mjs +0 -62
- package/esm2020/controls/lib/form-control/form-control/form-control.component.mjs +0 -79
- package/esm2020/controls/lib/form-control/form-control-addon/form-control-addon.component.mjs +0 -22
- package/esm2020/controls/lib/form-control/form-control-input.directive.mjs +0 -124
- package/esm2020/controls/lib/form-control/form-control.module.mjs +0 -34
- package/esm2020/controls/lib/radio/radio-button/radio-button.component.mjs +0 -75
- package/esm2020/controls/lib/radio/radio-group/radio-group.component.mjs +0 -168
- package/esm2020/controls/lib/radio/radio.module.mjs +0 -21
- package/esm2020/controls/lib/toggle/toggle/toggle.component.mjs +0 -153
- package/esm2020/controls/lib/toggle/toggle-group/toggle-group.component.mjs +0 -62
- package/esm2020/controls/lib/toggle/toggle.module.mjs +0 -20
- package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +0 -57
- package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +0 -31
- package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +0 -29
- package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +0 -75
- package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +0 -99
- package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +0 -62
- package/esm2020/dashboard/lib/dashboard.module.mjs +0 -47
- package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +0 -12
- package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +0 -46
- package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +0 -77
- package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +0 -18
- package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +0 -11
- package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +0 -67
- package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +0 -79
- package/esm2020/dialog/lib/dialog.insertion.mjs +0 -16
- package/esm2020/dialog/lib/dialog.module.mjs +0 -68
- package/esm2020/dialog/lib/dialog.service.mjs +0 -68
- package/esm2020/elements/lib/avatar/avatar.component.mjs +0 -149
- package/esm2020/elements/lib/button/button.component.mjs +0 -61
- package/esm2020/elements/lib/checkbox/checkbox.component.mjs +0 -73
- package/esm2020/elements/lib/date-picker/date-picker.component.mjs +0 -307
- package/esm2020/elements/lib/directives/addon.directive.mjs +0 -29
- package/esm2020/elements/lib/directives/form-submit.directive.mjs +0 -50
- package/esm2020/elements/lib/directives/form-submitter.directive.mjs +0 -25
- package/esm2020/elements/lib/directives/input.directive.mjs +0 -136
- package/esm2020/elements/lib/dropdown/dropdown.component.mjs +0 -100
- package/esm2020/elements/lib/elements.module.mjs +0 -177
- package/esm2020/elements/lib/file-picker/file-picker.component.mjs +0 -236
- package/esm2020/elements/lib/form-control/form-control.component.mjs +0 -49
- package/esm2020/elements/lib/form-error/form-error.component.mjs +0 -123
- package/esm2020/elements/lib/form-group/form-group.component.mjs +0 -18
- package/esm2020/elements/lib/icon/icon.component.mjs +0 -102
- package/esm2020/elements/lib/image-picker/image-picker.component.mjs +0 -106
- package/esm2020/elements/lib/pipes/file-image.pipe.mjs +0 -43
- package/esm2020/elements/lib/pipes/file-size.pipe.mjs +0 -28
- package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +0 -96
- package/esm2020/elements/lib/spinner/spinner.component.mjs +0 -25
- package/esm2020/elements/lib/tag/tag.component.mjs +0 -18
- package/esm2020/http/lib/http.module.mjs +0 -43
- package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +0 -50
- package/esm2020/http/lib/interceptors/error.interceptor.mjs +0 -32
- package/esm2020/lib/core/services/clipboard.service.mjs +0 -70
- package/esm2020/lib/core/services/exif.service.mjs +0 -163
- package/esm2020/lib/core/services/file-loader.service.mjs +0 -87
- package/esm2020/lib/core/services/image-converter.service.mjs +0 -123
- package/esm2020/lib/core/services/languages.service.mjs +0 -74
- package/esm2020/lib/core/services/network.service.mjs +0 -55
- package/esm2020/lib/core/services/patch.service.mjs +0 -63
- package/esm2020/localize/lib/localize.module.mjs +0 -81
- package/esm2020/localize/lib/localize.pipe.mjs +0 -46
- package/esm2020/localize/lib/localize.service.mjs +0 -185
- package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +0 -88
- package/esm2020/localize/lib/views/localize-template.directive.mjs +0 -21
- package/esm2020/masking/lib/directives/currency-mask.directive.mjs +0 -35
- package/esm2020/masking/lib/directives/date-mask.directive.mjs +0 -35
- package/esm2020/masking/lib/directives/input-mask.directive.mjs +0 -118
- package/esm2020/masking/lib/masking.module.mjs +0 -30
- package/esm2020/masking/lib/masking.service.mjs +0 -103
- package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +0 -100
- package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +0 -47
- package/esm2020/notifications/lib/notifications.module.mjs +0 -30
- package/esm2020/notifications/lib/notifications.service.mjs +0 -141
- package/esm2020/permissions/lib/directives/permission.directive.mjs +0 -88
- package/esm2020/permissions/lib/guards/permission.guard.mjs +0 -56
- package/esm2020/permissions/lib/permissions.module.mjs +0 -39
- package/esm2020/permissions/lib/permissions.service.mjs +0 -96
- package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +0 -219
- package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +0 -95
- package/esm2020/recaptcha/lib/recaptcha.module.mjs +0 -27
- package/esm2020/storage/lib/storage.service.mjs +0 -109
- package/esm2020/table/lib/components/table/table.component.mjs +0 -191
- package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +0 -11
- package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +0 -131
- package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +0 -136
- package/esm2020/table/lib/data/generic.data.mjs +0 -72
- package/esm2020/table/lib/table.module.mjs +0 -42
- package/esm2020/theming/lib/theming.directive.mjs +0 -38
- package/esm2020/theming/lib/theming.module.mjs +0 -16
- package/esm2020/tooltip/lib/tooltip-container/tooltip-container.component.mjs +0 -31
- package/esm2020/tooltip/lib/tooltip.directive.mjs +0 -140
- package/esm2020/tooltip/lib/tooltip.module.mjs +0 -31
- package/esm2020/utils/lib/directives/autosize.directive.mjs +0 -72
- package/esm2020/utils/lib/directives/focus-trap.directive.mjs +0 -77
- package/esm2020/utils/lib/directives/focus.directive.mjs +0 -37
- package/esm2020/utils/lib/directives/template.directive.mjs +0 -28
- package/esm2020/utils/lib/utils.module.mjs +0 -35
- package/esm2020/utils/public_api.mjs +0 -6
- package/fesm2015/bravobit-bb-foundation-auth.mjs +0 -851
- package/fesm2015/bravobit-bb-foundation-auth.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-collections.mjs +0 -474
- package/fesm2015/bravobit-bb-foundation-collections.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-controls.mjs +0 -1217
- package/fesm2015/bravobit-bb-foundation-controls.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs +0 -417
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dialog.mjs +0 -512
- package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-elements.mjs +0 -1883
- package/fesm2015/bravobit-bb-foundation-elements.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-http.mjs +0 -176
- package/fesm2015/bravobit-bb-foundation-http.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-localize.mjs +0 -835
- package/fesm2015/bravobit-bb-foundation-localize.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-masking.mjs +0 -334
- package/fesm2015/bravobit-bb-foundation-masking.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-notifications.mjs +0 -357
- package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-permissions.mjs +0 -310
- package/fesm2015/bravobit-bb-foundation-permissions.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +0 -349
- package/fesm2015/bravobit-bb-foundation-rxjs.mjs +0 -22
- package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-storage.mjs +0 -418
- package/fesm2015/bravobit-bb-foundation-storage.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-table.mjs +0 -603
- package/fesm2015/bravobit-bb-foundation-table.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-theming.mjs +0 -382
- package/fesm2015/bravobit-bb-foundation-theming.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-tooltip.mjs +0 -210
- package/fesm2015/bravobit-bb-foundation-tooltip.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation-utils.mjs +0 -246
- package/fesm2015/bravobit-bb-foundation-utils.mjs.map +0 -1
- package/fesm2015/bravobit-bb-foundation.mjs +0 -929
- package/fesm2015/bravobit-bb-foundation.mjs.map +0 -1
- package/fesm2020/bravobit-bb-foundation-elements.mjs.map +0 -1
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +0 -1
- package/fesm2020/bravobit-bb-foundation-table.mjs.map +0 -1
- package/fesm2020/bravobit-bb-foundation-utils.mjs.map +0 -1
- /package/{esm2020 → esm2022}/auth/bravobit-bb-foundation-auth.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/auth.session.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/directives/abstract.directive.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/helpers/jwt.helper.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/interfaces/config.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/interfaces/provider.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/interfaces/token.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/providers/email.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/providers/verify.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/lib/tokens/use-authorization.token.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/bravobit-bb-foundation.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/bravobit-bb-foundation-collections.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/lib/collection.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/lib/interfaces/collection.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/lib/providers/api-collection.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/lib/providers/collection.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/lib/providers/local-collection.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/collections/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/bravobit-bb-foundation-controls.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/lib/control-error/control-error/control-error.animation.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.defaults.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/lib/control-error/control-error.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/lib/controls.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/dashboard/bravobit-bb-foundation-dashboard.mjs +0 -0
- /package/{esm2020 → esm2022}/dashboard/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/bravobit-bb-foundation-dialog.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/lib/dialog-container/dialog-container.animations.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/lib/dialog-overlay/dialog-overlay.animations.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/lib/dialog.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/lib/dialog.ref.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/elements/bravobit-bb-foundation-elements.mjs +0 -0
- /package/{esm2020 → esm2022}/elements/lib/elements.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/elements/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/http/bravobit-bb-foundation-http.mjs +0 -0
- /package/{esm2020 → esm2022}/http/lib/classes/http.config.mjs +0 -0
- /package/{esm2020 → esm2022}/http/lib/classes/http.error.mjs +0 -0
- /package/{esm2020 → esm2022}/http/lib/http.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/http/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/functions/date.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/functions/password.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/miscellaneous/regex.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/miscellaneous/validator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/can-disable.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/can-hide-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/can-load.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/constructor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/has-error.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/is-focused.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/is-grouped.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/is-readonly.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/mixins/is-required.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tokens/accept-language.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tokens/base-url.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tokens/cookie.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tokens/location.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tokens/navigator.token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/core/tokens/window.token.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/bravobit-bb-foundation-localize.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.class.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.context.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/dictionary/dictionary.data.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/functions/date.function.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/functions/lowercase.function.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/functions/uppercase.function.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/handlers/missing.handler.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/interfaces/config.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/interfaces/functions.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/interfaces/handlers.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/interfaces/options.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/interfaces/transforms.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/locale.token.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/localizations/dutch.localization.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/localizations/english.localization.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/lib/transforms/abstract.transform.mjs +0 -0
- /package/{esm2020 → esm2022}/localize/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/masking/bravobit-bb-foundation-masking.mjs +0 -0
- /package/{esm2020 → esm2022}/masking/lib/input-mask.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/masking/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/notifications/bravobit-bb-foundation-notifications.mjs +0 -0
- /package/{esm2020 → esm2022}/notifications/lib/notifications.animations.mjs +0 -0
- /package/{esm2020 → esm2022}/notifications/lib/notifications.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/notifications/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/permissions/bravobit-bb-foundation-permissions.mjs +0 -0
- /package/{esm2020 → esm2022}/permissions/lib/handlers/abstract.handler.mjs +0 -0
- /package/{esm2020 → esm2022}/permissions/lib/handlers/local.handler.mjs +0 -0
- /package/{esm2020 → esm2022}/permissions/lib/permissions.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/permissions/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/recaptcha/bravobit-bb-foundation-recaptcha.mjs +0 -0
- /package/{esm2020 → esm2022}/recaptcha/lib/recaptcha.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/recaptcha/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/rxjs/bravobit-bb-foundation-rxjs.mjs +0 -0
- /package/{esm2020 → esm2022}/rxjs/lib/observables/get-control-value.observable.mjs +0 -0
- /package/{esm2020 → esm2022}/rxjs/lib/operators/combine-latest-map.operator.mjs +0 -0
- /package/{esm2020 → esm2022}/rxjs/lib/operators/filter-nil.operator.mjs +0 -0
- /package/{esm2020 → esm2022}/rxjs/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/bravobit-bb-foundation-storage.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/lib/interfaces/attributes.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/lib/interfaces/memory.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/lib/interfaces/strategy.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/lib/strategies/cookie-storage.strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/lib/strategies/memory-storage.strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/lib/strategies/polyfill-storage.strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/storage/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/table/bravobit-bb-foundation-table.mjs +0 -0
- /package/{esm2020 → esm2022}/table/lib/data/datasource.data.mjs +0 -0
- /package/{esm2020 → esm2022}/table/lib/interfaces/datasource.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/table/lib/interfaces/table.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/table/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/bravobit-bb-foundation-theming.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/checkbox-group.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/checkbox.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/control-error.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/form-control-addon.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/form-control.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/radio-button.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/radio-group.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/toggle-group.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/themes/toggle.theme.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/theming.data.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/theming.interface.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/lib/utils/theming.variable.mjs +0 -0
- /package/{esm2020 → esm2022}/theming/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/bravobit-bb-foundation-tooltip.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/lib/tooltip.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/bravobit-bb-foundation-utils.mjs +0 -0
- /package/{fesm2020 → fesm2022}/bravobit-bb-foundation-rxjs.mjs +0 -0
- /package/{fesm2020 → fesm2022}/bravobit-bb-foundation-rxjs.mjs.map +0 -0
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
import { AUTH_REDIRECT_HANDLER } from './interfaces/config.interface';
|
|
2
|
-
import { HttpContext } from '@angular/common/http';
|
|
3
|
-
import { makeStateKey } from '@angular/platform-browser';
|
|
4
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
5
|
-
import { USE_AUTHORIZATION } from './tokens/use-authorization.token';
|
|
6
|
-
import { AuthVerifyProvider } from './providers/verify.provider';
|
|
7
|
-
import { AuthEmailProvider } from './providers/email.provider';
|
|
8
|
-
import { firstValueFrom, of } from 'rxjs';
|
|
9
|
-
import { AuthSession } from './auth.session';
|
|
10
|
-
import { map, tap } from 'rxjs/operators';
|
|
11
|
-
import { Router } from '@angular/router';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@bravobit/bb-foundation/storage";
|
|
14
|
-
import * as i2 from "@angular/cdk/platform";
|
|
15
|
-
import * as i3 from "@angular/common/http";
|
|
16
|
-
import * as i4 from "./interfaces/config.interface";
|
|
17
|
-
import * as i5 from "@angular/platform-browser";
|
|
18
|
-
import * as i6 from "@bravobit/bb-foundation/http";
|
|
19
|
-
export class Auth {
|
|
20
|
-
constructor(_storage, _injector, _platform, _httpClient, _config, _state, _httpConfig, _handler) {
|
|
21
|
-
this._storage = _storage;
|
|
22
|
-
this._injector = _injector;
|
|
23
|
-
this._platform = _platform;
|
|
24
|
-
this._httpClient = _httpClient;
|
|
25
|
-
this._config = _config;
|
|
26
|
-
this._state = _state;
|
|
27
|
-
this._httpConfig = _httpConfig;
|
|
28
|
-
this._handler = _handler;
|
|
29
|
-
// Readonly data.
|
|
30
|
-
this._authStateKey = makeStateKey(`bbAuthStateKey`);
|
|
31
|
-
this._httpAlias = this._httpConfig?.defaultAlias ?? null;
|
|
32
|
-
this._refreshHandler = null;
|
|
33
|
-
// We select a storage strategy based on the server/browser.
|
|
34
|
-
// Only cookies CAN work on the server.
|
|
35
|
-
const storageStrategy = this._platform.isBrowser
|
|
36
|
-
? this._storage.select(["cookie" /* StorageOption.Cookie */, "local" /* StorageOption.Local */])
|
|
37
|
-
: this._storage.cookie;
|
|
38
|
-
// Starting the new session.
|
|
39
|
-
this.session = new AuthSession({
|
|
40
|
-
id: this._config?.applicationId,
|
|
41
|
-
storage: storageStrategy
|
|
42
|
-
});
|
|
43
|
-
this.user = this.session.user;
|
|
44
|
-
}
|
|
45
|
-
initialize() {
|
|
46
|
-
return async () => {
|
|
47
|
-
// Check if the app should bootstrap the authentication.
|
|
48
|
-
const shouldBootstrap = this._config?.bootstrap ?? true;
|
|
49
|
-
if (!shouldBootstrap) {
|
|
50
|
-
return this.handleAutoRefreshing();
|
|
51
|
-
}
|
|
52
|
-
// Only retrieve from the server when we are actually authenticated.
|
|
53
|
-
if (!this.session.authenticated()) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
// Get the key from the server state.
|
|
57
|
-
if (this._state && this._state?.hasKey(this._authStateKey)) {
|
|
58
|
-
const user = this._state?.get(this._authStateKey, null) ?? null;
|
|
59
|
-
return this.session.setUser(user);
|
|
60
|
-
}
|
|
61
|
-
// Try to fetch the user from the server.
|
|
62
|
-
const user$ = this.me();
|
|
63
|
-
const user = await firstValueFrom(user$, { defaultValue: null });
|
|
64
|
-
// Set the state if exists.
|
|
65
|
-
if (this._state) {
|
|
66
|
-
this._state?.set(this._authStateKey, user ?? null);
|
|
67
|
-
}
|
|
68
|
-
// Save the user in the storage and handle auto refreshing.
|
|
69
|
-
this.session.setUser(user);
|
|
70
|
-
this.handleAutoRefreshing();
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
me() {
|
|
74
|
-
const url = this.getUrl('auth/me');
|
|
75
|
-
return this._httpClient.get(url);
|
|
76
|
-
}
|
|
77
|
-
async signIn(provider, as) {
|
|
78
|
-
const { accessToken, refreshToken, user, ...result } = await provider.authenticate(this._httpClient);
|
|
79
|
-
// Check if the role matches.
|
|
80
|
-
const role = user?.role ?? null;
|
|
81
|
-
if (as && !as.includes(role)) {
|
|
82
|
-
throw new Error('Invalid role.');
|
|
83
|
-
}
|
|
84
|
-
// Validate if the provider is one of the available
|
|
85
|
-
// providers then return the user object and the provider.
|
|
86
|
-
const apiProvider = result?.provider ?? null;
|
|
87
|
-
const apiVerifyToken = result?.verifyToken ?? null;
|
|
88
|
-
const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];
|
|
89
|
-
if (availableProviders.includes(apiProvider)) {
|
|
90
|
-
return { user, provider: apiProvider, verifyToken: apiVerifyToken };
|
|
91
|
-
}
|
|
92
|
-
// Set the tokens in storage.
|
|
93
|
-
this.setTokens(accessToken, refreshToken);
|
|
94
|
-
// Set the user in storage.
|
|
95
|
-
this.session.setUser(user);
|
|
96
|
-
// Return the user.
|
|
97
|
-
return { user };
|
|
98
|
-
}
|
|
99
|
-
async signInWithEmail(email, password, as) {
|
|
100
|
-
const url = this.getUrl('auth/login');
|
|
101
|
-
return this.signIn(new AuthEmailProvider(email, password, url), as);
|
|
102
|
-
}
|
|
103
|
-
async signInWithVerifyCode(code, verifyToken) {
|
|
104
|
-
const url = this.getUrl('auth/verify');
|
|
105
|
-
return this.signIn(new AuthVerifyProvider(code, verifyToken, url));
|
|
106
|
-
}
|
|
107
|
-
async resendVerifyCode(verifyToken) {
|
|
108
|
-
const url = this.getUrl('auth/resend');
|
|
109
|
-
const result$ = this._httpClient.post(url, {
|
|
110
|
-
verify_token: verifyToken
|
|
111
|
-
});
|
|
112
|
-
return firstValueFrom(result$);
|
|
113
|
-
}
|
|
114
|
-
async register(data, options) {
|
|
115
|
-
// Execute API call.
|
|
116
|
-
const url = this.getUrl('auth/register');
|
|
117
|
-
const result$ = this._httpClient.post(url, data, options);
|
|
118
|
-
const result = await firstValueFrom(result$);
|
|
119
|
-
// Set the tokens in storage.
|
|
120
|
-
this.setTokens(result?.token, result?.refresh_token);
|
|
121
|
-
// Set the user in storage.
|
|
122
|
-
const user = result?.user;
|
|
123
|
-
this.session.setUser(user);
|
|
124
|
-
// Return the user.
|
|
125
|
-
return user;
|
|
126
|
-
}
|
|
127
|
-
logout() {
|
|
128
|
-
// If we don't have a refresh token just clear the session.
|
|
129
|
-
// Note: We do this because else we try to invalidate
|
|
130
|
-
// an "undefined" refresh token.
|
|
131
|
-
const refreshToken = this.session.refreshToken;
|
|
132
|
-
if (!refreshToken) {
|
|
133
|
-
return this.session.clear();
|
|
134
|
-
}
|
|
135
|
-
// We do have a refresh token, so try to
|
|
136
|
-
// invalidate it in the backend.
|
|
137
|
-
try {
|
|
138
|
-
const url = this.getUrl('auth/logout');
|
|
139
|
-
const headerName = this._config?.http?.header ?? 'Authorization';
|
|
140
|
-
const observable$ = this._httpClient.get(url, {
|
|
141
|
-
headers: { [headerName]: refreshToken }
|
|
142
|
-
});
|
|
143
|
-
firstValueFrom(observable$).then(_ => _).catch(_ => _);
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
// Do nothing because the tokens will be deleted anyways from the session.
|
|
147
|
-
}
|
|
148
|
-
// Delete the tokens from the session.
|
|
149
|
-
return this.session.clear();
|
|
150
|
-
}
|
|
151
|
-
refresh() {
|
|
152
|
-
// If the refresh token does
|
|
153
|
-
// not exist just return an observable of null.
|
|
154
|
-
const refreshToken = this.session.refreshToken;
|
|
155
|
-
if (!refreshToken) {
|
|
156
|
-
return of(null);
|
|
157
|
-
}
|
|
158
|
-
// Perform the refresh call.
|
|
159
|
-
const headerName = this._config?.http?.header ?? 'Authorization';
|
|
160
|
-
const scheme = this._config?.http?.scheme ?? 'Bearer';
|
|
161
|
-
const url = this.getUrl('auth/refresh');
|
|
162
|
-
const context = new HttpContext().set(USE_AUTHORIZATION, false);
|
|
163
|
-
return this._httpClient.get(url, {
|
|
164
|
-
headers: { [headerName]: `${scheme} ${refreshToken}` },
|
|
165
|
-
context: context
|
|
166
|
-
}).pipe(tap(({ token, refresh_token }) => this.setTokens(token, refresh_token)), map(({ token }) => token));
|
|
167
|
-
}
|
|
168
|
-
async requestPassword(email, extraParams = {}) {
|
|
169
|
-
const url = this.getUrl('auth/reset');
|
|
170
|
-
const observable$ = this._httpClient.post(url, { ...extraParams, email });
|
|
171
|
-
return firstValueFrom(observable$);
|
|
172
|
-
}
|
|
173
|
-
async resetPassword(token, newPassword, extraParams = {}) {
|
|
174
|
-
const url = this.getUrl('auth/reset-password');
|
|
175
|
-
const observable$ = this._httpClient.post(url, { ...extraParams, token, password: newPassword });
|
|
176
|
-
return firstValueFrom(observable$);
|
|
177
|
-
}
|
|
178
|
-
clearAndRedirect() {
|
|
179
|
-
// 1. Delete the tokens from the session.
|
|
180
|
-
this.session.clear();
|
|
181
|
-
if (this._handler) {
|
|
182
|
-
const urlTree = this._handler.onFailedAuthenticated();
|
|
183
|
-
if (!urlTree || urlTree === true) {
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
this.router.navigateByUrl(urlTree).then(_ => _);
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
// 2. Compose the route url.
|
|
190
|
-
const redirectUrl = this._config?.redirects.unauthenticated ?? null;
|
|
191
|
-
// 3. Route back if the user provided a redirect url.
|
|
192
|
-
if (this.router && redirectUrl) {
|
|
193
|
-
const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];
|
|
194
|
-
this.router.navigate(commands).then(_ => _);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
setTokens(accessToken, refreshToken) {
|
|
198
|
-
// Set the tokens in our session.
|
|
199
|
-
this.session.setTokens(accessToken, refreshToken);
|
|
200
|
-
// We need to update the auto refresh of the refresh token.
|
|
201
|
-
this.handleAutoRefreshing();
|
|
202
|
-
}
|
|
203
|
-
handleAutoRefreshing() {
|
|
204
|
-
const shouldAutoRefresh = this._config?.autoRefresh ?? false;
|
|
205
|
-
if (!shouldAutoRefresh) {
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;
|
|
209
|
-
if (expiresAt === null || !this._platform.isBrowser) {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
const differenceInMilliseconds = expiresAt.getTime() - Date.now();
|
|
213
|
-
const offsetInMilliseconds = 10000; // 10 seconds.
|
|
214
|
-
// We want to start the refresh 10 seconds before it expires.
|
|
215
|
-
const actualTiming = differenceInMilliseconds - offsetInMilliseconds;
|
|
216
|
-
if (actualTiming <= 0) {
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
// We need to cap the timings because if
|
|
220
|
-
// we get large numbers it might cause unwanted results.
|
|
221
|
-
const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.
|
|
222
|
-
const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));
|
|
223
|
-
try {
|
|
224
|
-
if (this._refreshHandler !== null) {
|
|
225
|
-
clearTimeout?.(this._refreshHandler);
|
|
226
|
-
this._refreshHandler = null;
|
|
227
|
-
}
|
|
228
|
-
this._refreshHandler = window?.setTimeout?.(() => this.autoRefresh(), cappedTiming);
|
|
229
|
-
}
|
|
230
|
-
catch {
|
|
231
|
-
// Just ignore it.
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
async autoRefresh() {
|
|
235
|
-
try {
|
|
236
|
-
// We just need to wait for it to refresh.
|
|
237
|
-
const refresh$ = this.refresh();
|
|
238
|
-
await firstValueFrom(refresh$);
|
|
239
|
-
}
|
|
240
|
-
catch {
|
|
241
|
-
// Something went wrong refreshing, we need to clear.
|
|
242
|
-
this.clearAndRedirect();
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
get router() {
|
|
246
|
-
return this._injector.get(Router);
|
|
247
|
-
}
|
|
248
|
-
getUrl(endpoint) {
|
|
249
|
-
return [this._httpAlias, endpoint]
|
|
250
|
-
.filter(item => !!item)
|
|
251
|
-
.join('/');
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
Auth.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", 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 }, { token: AUTH_REDIRECT_HANDLER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
255
|
-
Auth.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: Auth });
|
|
256
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: Auth, decorators: [{
|
|
257
|
-
type: Injectable
|
|
258
|
-
}], ctorParameters: function () { return [{ type: i1.Storage }, { type: i0.Injector }, { type: i2.Platform }, { type: i3.HttpClient }, { type: i4.AuthConfig, decorators: [{
|
|
259
|
-
type: Optional
|
|
260
|
-
}] }, { type: i5.TransferState, decorators: [{
|
|
261
|
-
type: Optional
|
|
262
|
-
}] }, { type: i6.HttpConfig, decorators: [{
|
|
263
|
-
type: Optional
|
|
264
|
-
}] }, { type: undefined, decorators: [{
|
|
265
|
-
type: Optional
|
|
266
|
-
}, {
|
|
267
|
-
type: Inject,
|
|
268
|
-
args: [AUTH_REDIRECT_HANDLER]
|
|
269
|
-
}] }]; } });
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBa0MsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRyxPQUFPLEVBQWEsV0FBVyxFQUEwQixNQUFNLHNCQUFzQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxZQUFZLEVBQTBCLE1BQU0sMkJBQTJCLENBQUM7QUFFaEYsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBQyxjQUFjLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7QUFHdkMsTUFBTSxPQUFPLElBQUk7SUFXYixZQUFvQixRQUFpQixFQUNqQixTQUFtQixFQUNuQixTQUFtQixFQUNuQixXQUF1QixFQUNYLE9BQW9CLEVBQ3BCLE1BQXNCLEVBQ3RCLFdBQXdCLEVBQ08sUUFBOEI7UUFQekUsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsZ0JBQVcsR0FBWCxX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dCI6WyJpbXBvcnQge0FVVEhfUkVESVJFQ1RfSEFORExFUiwgQXV0aENvbmZpZywgQXV0aFJlZGlyZWN0SGFuZGxlcn0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QXV0aFByb3ZpZGVyLCBBdXRoU2lnbkluUmVzcG9uc2V9IGZyb20gJy4vaW50ZXJmYWNlcy9wcm92aWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHttYWtlU3RhdGVLZXksIFN0YXRlS2V5LCBUcmFuc2ZlclN0YXRlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7U3RvcmFnZSwgU3RvcmFnZU9wdGlvbn0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vc3RvcmFnZSc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VVNFX0FVVEhPUklaQVRJT059IGZyb20gJy4vdG9rZW5zL3VzZS1hdXRob3JpemF0aW9uLnRva2VuJztcbmltcG9ydCB7QXV0aFZlcmlmeVByb3ZpZGVyfSBmcm9tICcuL3Byb3ZpZGVycy92ZXJpZnkucHJvdmlkZXInO1xuaW1wb3J0IHtBdXRoRW1haWxQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvZW1haWwucHJvdmlkZXInO1xuaW1wb3J0IHtIdHRwQ29uZmlnfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9odHRwJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0F1dGhTZXNzaW9ufSBmcm9tICcuL2F1dGguc2Vzc2lvbic7XG5pbXBvcnQge21hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGgge1xuXG4gICAgLy8gUmVhZG9ubHkgZGF0YS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hdXRoU3RhdGVLZXk6IFN0YXRlS2V5PGFueSB8IG51bGw+ID0gbWFrZVN0YXRlS2V5KGBiYkF1dGhTdGF0ZUtleWApO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2h0dHBBbGlhczogc3RyaW5nIHwgbnVsbCA9IHRoaXMuX2h0dHBDb25maWc/LmRlZmF1bHRBbGlhcyA/PyBudWxsO1xuXG4gICAgcmVhZG9ubHkgc2Vzc2lvbjogQXV0aFNlc3Npb247XG4gICAgcmVhZG9ubHkgdXNlcjogT2JzZXJ2YWJsZTxhbnkgfCBudWxsPjtcblxuICAgIHByaXZhdGUgX3JlZnJlc2hIYW5kbGVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IEF1dGhDb25maWcsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfc3RhdGU/OiBUcmFuc2ZlclN0YXRlLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2h0dHBDb25maWc/OiBIdHRwQ29uZmlnLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVVUSF9SRURJUkVDVF9IQU5ETEVSKSBwcml2YXRlIF9oYW5kbGVyPzogQXV0aFJlZGlyZWN0SGFuZGxlcikge1xuICAgICAgICAvLyBXZSBzZWxlY3QgYSBzdG9yYWdlIHN0cmF0ZWd5IGJhc2VkIG9uIHRoZSBzZXJ2ZXIvYnJvd3Nlci5cbiAgICAgICAgLy8gT25seSBjb29raWVzIENBTiB3b3JrIG9uIHRoZSBzZXJ2ZXIuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VTdHJhdGVneSA9IHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlclxuICAgICAgICAgICAgPyB0aGlzLl9zdG9yYWdlLnNlbGVjdChbU3RvcmFnZU9wdGlvbi5Db29raWUsIFN0b3JhZ2VPcHRpb24uTG9jYWxdKVxuICAgICAgICAgICAgOiB0aGlzLl9zdG9yYWdlLmNvb2tpZTtcblxuICAgICAgICAvLyBTdGFydGluZyB0aGUgbmV3IHNlc3Npb24uXG4gICAgICAgIHRoaXMuc2Vzc2lvbiA9IG5ldyBBdXRoU2Vzc2lvbih7XG4gICAgICAgICAgICBpZDogdGhpcy5fY29uZmlnPy5hcHBsaWNhdGlvbklkLFxuICAgICAgICAgICAgc3RvcmFnZTogc3RvcmFnZVN0cmF0ZWd5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnNlc3Npb24udXNlcjtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFwcCBzaG91bGQgYm9vdHN0cmFwIHRoZSBhdXRoZW50aWNhdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IHNob3VsZEJvb3RzdHJhcCA9IHRoaXMuX2NvbmZpZz8uYm9vdHN0cmFwID8/IHRydWU7XG4gICAgICAgICAgICBpZiAoIXNob3VsZEJvb3RzdHJhcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUF1dG9SZWZyZXNoaW5nKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9ubHkgcmV0cmlldmUgZnJvbSB0aGUgc2VydmVyIHdoZW4gd2UgYXJlIGFjdHVhbGx5IGF1dGhlbnRpY2F0ZWQuXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbi5hdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUga2V5IGZyb20gdGhlIHNlcnZlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSAmJiB0aGlzLl9zdGF0ZT8uaGFzS2V5KHRoaXMuX2F1dGhTdGF0ZUtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fc3RhdGU/LmdldCh0aGlzLl9hdXRoU3RhdGVLZXksIG51bGwpID8/IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggdGhlIHVzZXIgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICAgICAgY29uc3QgdXNlciQgPSB0aGlzLm1lKCk7XG4gICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odXNlciQsIHtkZWZhdWx0VmFsdWU6IG51bGx9KTtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGF0ZSBpZiBleGlzdHMuXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZT8uc2V0PGFueT4odGhpcy5fYXV0aFN0YXRlS2V5LCB1c2VyID8/IG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1c2VyIGluIHRoZSBzdG9yYWdlIGFuZCBoYW5kbGUgYXV0byByZWZyZXNoaW5nLlxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFVzZXIodXNlcik7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUF1dG9SZWZyZXNoaW5nKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbWU8VCA9IGFueT4oKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL21lJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LmdldDxUPih1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25Jbihwcm92aWRlcjogQXV0aFByb3ZpZGVyLCBhcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHthY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuLCB1c2VyLCAuLi5yZXN1bHR9ID0gYXdhaXQgcHJvdmlkZXIuYXV0aGVudGljYXRlKHRoaXMuX2h0dHBDbGllbnQpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByb2xlIG1hdGNoZXMuXG4gICAgICAgIGNvbnN0IHJvbGUgPSB1c2VyPy5yb2xlID8/IG51bGw7XG4gICAgICAgIGlmIChhcyAmJiAhYXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByb2xlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgaWYgdGhlIHByb3ZpZGVyIGlzIG9uZSBvZiB0aGUgYXZhaWxhYmxlXG4gICAgICAgIC8vIHByb3ZpZGVycyB0aGVuIHJldHVybiB0aGUgdXNlciBvYmplY3QgYW5kIHRoZSBwcm92aWRlci5cbiAgICAgICAgY29uc3QgYXBpUHJvdmlkZXIgPSByZXN1bHQ/LnByb3ZpZGVyID8/IG51bGw7XG4gICAgICAgIGNvbnN0IGFwaVZlcmlmeVRva2VuID0gcmVzdWx0Py52ZXJpZnlUb2tlbiA/PyBudWxsO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVQcm92aWRlcnMgPSB0aGlzLl9jb25maWc/LnByb3ZpZGVycyA/PyBbJ2VtYWlsJywgJ3NtcycsICd0b3RwJ107XG4gICAgICAgIGlmIChhdmFpbGFibGVQcm92aWRlcnMuaW5jbHVkZXMoYXBpUHJvdmlkZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gPEF1dGhTaWduSW5SZXNwb25zZT57dXNlciwgcHJvdmlkZXI6IGFwaVByb3ZpZGVyLCB2ZXJpZnlUb2tlbjogYXBpVmVyaWZ5VG9rZW59O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gc3RvcmFnZS5cbiAgICAgICAgdGhpcy5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXJ9O1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhFbWFpbChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBhcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL2xvZ2luJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNpZ25JbihuZXcgQXV0aEVtYWlsUHJvdmlkZXIoZW1haWwsIHBhc3N3b3JkLCB1cmwpLCBhcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2lnbkluV2l0aFZlcmlmeUNvZGUoY29kZTogc3RyaW5nLCB2ZXJpZnlUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3ZlcmlmeScpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhWZXJpZnlQcm92aWRlcihjb2RlLCB2ZXJpZnlUb2tlbiwgdXJsKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVzZW5kVmVyaWZ5Q29kZSh2ZXJpZnlUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3Jlc2VuZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQkID0gdGhpcy5faHR0cENsaWVudC5wb3N0KHVybCwge1xuICAgICAgICAgICAgdmVyaWZ5X3Rva2VuOiB2ZXJpZnlUb2tlblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20ocmVzdWx0JCk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVnaXN0ZXI8VCA9IGFueT4oZGF0YTogYW55LCBvcHRpb25zPzoge1xuICAgICAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG4gICAgICAgIH07XG4gICAgfSkge1xuICAgICAgICAvLyBFeGVjdXRlIEFQSSBjYWxsLlxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWdpc3RlcicpO1xuICAgICAgICBjb25zdCByZXN1bHQkID0gdGhpcy5faHR0cENsaWVudC5wb3N0PHsgdG9rZW46IHN0cmluZywgcmVmcmVzaF90b2tlbjogc3RyaW5nLCB1c2VyOiBhbnkgfT4odXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20ocmVzdWx0JCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gc3RvcmFnZS5cbiAgICAgICAgdGhpcy5zZXRUb2tlbnMocmVzdWx0Py50b2tlbiwgcmVzdWx0Py5yZWZyZXNoX3Rva2VuKTtcblxuICAgICAgICAvLyBTZXQgdGhlIHVzZXIgaW4gc3RvcmFnZS5cbiAgICAgICAgY29uc3QgdXNlciA9IHJlc3VsdD8udXNlcjtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFVzZXIodXNlcik7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSB1c2VyLlxuICAgICAgICByZXR1cm4gPFQ+dXNlcjtcbiAgICB9XG5cbiAgICBsb2dvdXQoKSB7XG4gICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSByZWZyZXNoIHRva2VuIGp1c3QgY2xlYXIgdGhlIHNlc3Npb24uXG4gICAgICAgIC8vIE5vdGU6IFdlIGRvIHRoaXMgYmVjYXVzZSBlbHNlIHdlIHRyeSB0byBpbnZhbGlkYXRlXG4gICAgICAgIC8vIGFuIFwidW5kZWZpbmVkXCIgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGRvIGhhdmUgYSByZWZyZXNoIHRva2VuLCBzbyB0cnkgdG9cbiAgICAgICAgLy8gaW52YWxpZGF0ZSBpdCBpbiB0aGUgYmFja2VuZC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL2xvZ291dCcpO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyTmFtZSA9IHRoaXMuX2NvbmZpZz8uaHR0cD8uaGVhZGVyID8/ICdBdXRob3JpemF0aW9uJztcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1toZWFkZXJOYW1lXTogcmVmcmVzaFRva2VufVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaXJzdFZhbHVlRnJvbShvYnNlcnZhYmxlJCkudGhlbihfID0+IF8pLmNhdGNoKF8gPT4gXyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gRG8gbm90aGluZyBiZWNhdXNlIHRoZSB0b2tlbnMgd2lsbCBiZSBkZWxldGVkIGFueXdheXMgZnJvbSB0aGUgc2Vzc2lvbi5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlbGV0ZSB0aGUgdG9rZW5zIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICAvLyBJZiB0aGUgcmVmcmVzaCB0b2tlbiBkb2VzXG4gICAgICAgIC8vIG5vdCBleGlzdCBqdXN0IHJldHVybiBhbiBvYnNlcnZhYmxlIG9mIG51bGwuXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW47XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSByZWZyZXNoIGNhbGwuXG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LmhlYWRlciA/PyAnQXV0aG9yaXphdGlvbic7XG4gICAgICAgIGNvbnN0IHNjaGVtZSA9IHRoaXMuX2NvbmZpZz8uaHR0cD8uc2NoZW1lID8/ICdCZWFyZXInO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3JlZnJlc2gnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpLnNldChVU0VfQVVUSE9SSVpBVElPTiwgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LmdldDx7IHRva2VuOiBzdHJpbmcsIHJlZnJlc2hfdG9rZW46IHN0cmluZyB9Pih1cmwsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtbaGVhZGVyTmFtZV06IGAke3NjaGVtZX0gJHtyZWZyZXNoVG9rZW59YH0sXG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHt0b2tlbiwgcmVmcmVzaF90b2tlbn0pID0+IHRoaXMuc2V0VG9rZW5zKHRva2VuLCByZWZyZXNoX3Rva2VuKSksXG4gICAgICAgICAgICBtYXAoKHt0b2tlbn0pID0+IHRva2VuKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIHJlcXVlc3RQYXNzd29yZChlbWFpbDogc3RyaW5nLCBleHRyYVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL3Jlc2V0Jyk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy5faHR0cENsaWVudC5wb3N0KHVybCwgey4uLmV4dHJhUGFyYW1zLCBlbWFpbH0pO1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2V0UGFzc3dvcmQodG9rZW46IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldC1wYXNzd29yZCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgdG9rZW4sIHBhc3N3b3JkOiBuZXdQYXNzd29yZH0pO1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpO1xuICAgIH1cblxuICAgIGNsZWFyQW5kUmVkaXJlY3QoKSB7XG4gICAgICAgIC8vIDEuIERlbGV0ZSB0aGUgdG9rZW5zIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5jbGVhcigpO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5faGFuZGxlci5vbkZhaWxlZEF1dGhlbnRpY2F0ZWQoKTtcbiAgICAgICAgICAgIGlmICghdXJsVHJlZSB8fCB1cmxUcmVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybFRyZWUpLnRoZW4oXyA9PiBfKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIENvbXBvc2UgdGhlIHJvdXRlIHVybC5cbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB0aGlzLl9jb25maWc/LnJlZGlyZWN0cy51bmF1dGhlbnRpY2F0ZWQgPz8gbnVsbDtcblxuICAgICAgICAvLyAzLiBSb3V0ZSBiYWNrIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGEgcmVkaXJlY3QgdXJsLlxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIgJiYgcmVkaXJlY3RVcmwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmRzID0gQXJyYXkuaXNBcnJheShyZWRpcmVjdFVybCkgPyByZWRpcmVjdFVybCA6IFtyZWRpcmVjdFVybF07XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcykudGhlbihfID0+IF8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUb2tlbnMoYWNjZXNzVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gb3VyIHNlc3Npb24uXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGF1dG8gcmVmcmVzaCBvZiB0aGUgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXV0b1JlZnJlc2hpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZEF1dG9SZWZyZXNoID0gdGhpcy5fY29uZmlnPy5hdXRvUmVmcmVzaCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFzaG91bGRBdXRvUmVmcmVzaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlblBheWxvYWQ/LmV4cGlyZXNBdCA/PyBudWxsO1xuICAgICAgICBpZiAoZXhwaXJlc0F0ID09PSBudWxsIHx8ICF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyA9IGV4cGlyZXNBdC5nZXRUaW1lKCkgLSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBvZmZzZXRJbk1pbGxpc2Vjb25kcyA9IDEwXzAwMDsgLy8gMTAgc2Vjb25kcy5cblxuICAgICAgICAvLyBXZSB3YW50IHRvIHN0YXJ0IHRoZSByZWZyZXNoIDEwIHNlY29uZHMgYmVmb3JlIGl0IGV4cGlyZXMuXG4gICAgICAgIGNvbnN0IGFjdHVhbFRpbWluZyA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyAtIG9mZnNldEluTWlsbGlzZWNvbmRzO1xuICAgICAgICBpZiAoYWN0dWFsVGltaW5nIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FwIHRoZSB0aW1pbmdzIGJlY2F1c2UgaWZcbiAgICAgICAgLy8gd2UgZ2V0IGxhcmdlIG51bWJlcnMgaXQgbWlnaHQgY2F1c2UgdW53YW50ZWQgcmVzdWx0cy5cbiAgICAgICAgY29uc3QgbWF4VGltaW5nID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gMjQgaG91cnMuXG4gICAgICAgIGNvbnN0IGNhcHBlZFRpbWluZyA9IE1hdGgubWF4KDEsIE1hdGgubWluKGFjdHVhbFRpbWluZywgbWF4VGltaW5nKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVmcmVzaEhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQ/Lih0aGlzLl9yZWZyZXNoSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSB3aW5kb3c/LnNldFRpbWVvdXQ/LigoKSA9PiB0aGlzLmF1dG9SZWZyZXNoKCksIGNhcHBlZFRpbWluZyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUgaXQuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGF1dG9SZWZyZXNoKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2UganVzdCBuZWVkIHRvIHdhaXQgZm9yIGl0IHRvIHJlZnJlc2guXG4gICAgICAgICAgICBjb25zdCByZWZyZXNoJCA9IHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20ocmVmcmVzaCQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHJlZnJlc2hpbmcsIHdlIG5lZWQgdG8gY2xlYXIuXG4gICAgICAgICAgICB0aGlzLmNsZWFyQW5kUmVkaXJlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHJvdXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VXJsKGVuZHBvaW50OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9odHRwQWxpYXMsIGVuZHBvaW50XVxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSlcbiAgICAgICAgICAgIC5qb2luKCcvJyk7XG4gICAgfVxuXG59XG4iXX0=
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { AbstractAuthDirective } from './abstract.directive';
|
|
3
|
-
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
4
|
-
import { Subscription } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../auth.service";
|
|
7
|
-
export class BbAuthenticated extends AbstractAuthDirective {
|
|
8
|
-
set bbAuthenticatedElse(templateRef) {
|
|
9
|
-
this.assertTemplate('bbAuthenticatedElse', templateRef);
|
|
10
|
-
this.elseTemplateRef = templateRef;
|
|
11
|
-
this.updateView();
|
|
12
|
-
}
|
|
13
|
-
constructor(_auth, _templateRef, _viewContainerRef) {
|
|
14
|
-
super(_templateRef, _viewContainerRef);
|
|
15
|
-
this._auth = _auth;
|
|
16
|
-
this._templateRef = _templateRef;
|
|
17
|
-
this._viewContainerRef = _viewContainerRef;
|
|
18
|
-
// Subscriptions.
|
|
19
|
-
this._subscription = new Subscription();
|
|
20
|
-
}
|
|
21
|
-
ngOnInit() {
|
|
22
|
-
const subscription = this._auth.user.pipe(map(user => !!user), distinctUntilChanged()).subscribe(valid => {
|
|
23
|
-
this.valid = valid;
|
|
24
|
-
this.updateView();
|
|
25
|
-
});
|
|
26
|
-
this._subscription.add(subscription);
|
|
27
|
-
}
|
|
28
|
-
ngOnDestroy() {
|
|
29
|
-
this._subscription?.unsubscribe();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
BbAuthenticated.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", 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: "15.2.6", type: BbAuthenticated, selector: "[bbAuthenticated]", inputs: { bbAuthenticatedElse: "bbAuthenticatedElse" }, usesInheritance: true, ngImport: i0 });
|
|
34
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BbAuthenticated, decorators: [{
|
|
35
|
-
type: Directive,
|
|
36
|
-
args: [{
|
|
37
|
-
selector: '[bbAuthenticated]'
|
|
38
|
-
}]
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dGhlbnRpY2F0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFtRCxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBS2xDLE1BQU0sT0FBTyxlQUFnQixTQUFRLHFCQUFxQjtJQUt0RCxJQUNJLG1CQUFtQixDQUFDLFdBQTZCO1FBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxZQUFvQixLQUFXLEVBQ1gsWUFBOEIsRUFDOUIsaUJBQW1DO1FBQ25ELEtBQUssQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUh2QixVQUFLLEdBQUwsS0FBSyxDQUFNO1FBQ1gsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFadkQsaUJBQWlCO1FBQ1Qsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBYTNDLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ25CLG9CQUFvQixFQUFFLENBQ3pCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzs0R0EvQlEsZUFBZTtnR0FBZixlQUFlOzJGQUFmLGVBQWU7a0JBSDNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtpQkFDaEM7b0pBT08sbUJBQW1CO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdEF1dGhEaXJlY3RpdmV9IGZyb20gJy4vYWJzdHJhY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBdXRofSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tiYkF1dGhlbnRpY2F0ZWRdJ1xufSlcbmV4cG9ydCBjbGFzcyBCYkF1dGhlbnRpY2F0ZWQgZXh0ZW5kcyBBYnN0cmFjdEF1dGhEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICAvLyBTdWJzY3JpcHRpb25zLlxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiQXV0aGVudGljYXRlZEVsc2UodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICAgICAgdGhpcy5hc3NlcnRUZW1wbGF0ZSgnYmJBdXRoZW50aWNhdGVkRWxzZScsIHRlbXBsYXRlUmVmKTtcbiAgICAgICAgdGhpcy5lbHNlVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXV0aDogQXV0aCxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHN1cGVyKF90ZW1wbGF0ZVJlZiwgX3ZpZXdDb250YWluZXJSZWYpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9hdXRoLnVzZXIucGlwZShcbiAgICAgICAgICAgIG1hcCh1c2VyID0+ICEhdXNlciksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICkuc3Vic2NyaWJlKHZhbGlkID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSB2YWxpZDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2JiQXV0aGVudGljYXRlZEVsc2U6IFRlbXBsYXRlUmVmPGFueT47XG5cbn1cbiJdfQ==
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { AUTH_REDIRECT_HANDLER } from '../interfaces/config.interface';
|
|
2
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import { first } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../auth.service";
|
|
7
|
-
import * as i2 from "@angular/router";
|
|
8
|
-
import * as i3 from "../interfaces/config.interface";
|
|
9
|
-
export class BbAnonymousGuard {
|
|
10
|
-
constructor(_auth, _router, _config, _handler) {
|
|
11
|
-
this._auth = _auth;
|
|
12
|
-
this._router = _router;
|
|
13
|
-
this._config = _config;
|
|
14
|
-
this._handler = _handler;
|
|
15
|
-
}
|
|
16
|
-
canActivate(snapshot, state) {
|
|
17
|
-
return this._auth.user.pipe(map(user => !!user), map(isAuthenticated => {
|
|
18
|
-
if (!isAuthenticated) {
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
if (this._handler) {
|
|
22
|
-
return this._handler.onFailedAnonymous(snapshot, state);
|
|
23
|
-
}
|
|
24
|
-
// If we don't have a URL to go to we can just say
|
|
25
|
-
// the user is not allowed in this route by returning false.
|
|
26
|
-
const nextUrl = this._config?.redirects?.authenticated ?? null;
|
|
27
|
-
if (!nextUrl) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];
|
|
31
|
-
return this._router.createUrlTree(commands);
|
|
32
|
-
}), first());
|
|
33
|
-
}
|
|
34
|
-
canActivateChild(childRoute, state) {
|
|
35
|
-
return this.canActivate(childRoute, state);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
BbAnonymousGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BbAnonymousGuard, deps: [{ token: i1.Auth }, { token: i2.Router }, { token: i3.AuthConfig, optional: true }, { token: AUTH_REDIRECT_HANDLER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
39
|
-
BbAnonymousGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BbAnonymousGuard, providedIn: 'root' });
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BbAnonymousGuard, decorators: [{
|
|
41
|
-
type: Injectable,
|
|
42
|
-
args: [{
|
|
43
|
-
providedIn: 'root'
|
|
44
|
-
}]
|
|
45
|
-
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i2.Router }, { type: i3.AuthConfig, decorators: [{
|
|
46
|
-
type: Optional
|
|
47
|
-
}] }, { type: undefined, decorators: [{
|
|
48
|
-
type: Optional
|
|
49
|
-
}, {
|
|
50
|
-
type: Inject,
|
|
51
|
-
args: [AUTH_REDIRECT_HANDLER]
|
|
52
|
-
}] }]; } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5vbnltb3VzLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvZ3VhcmRzL2Fub255bW91cy5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMscUJBQXFCLEVBQWtDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEcsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7OztBQUszQixNQUFNLE9BQU8sZ0JBQWdCO0lBRXpCLFlBQW9CLEtBQVcsRUFDWCxPQUFlLEVBQ0gsT0FBb0IsRUFDVyxRQUE4QjtRQUh6RSxVQUFLLEdBQUwsS0FBSyxDQUFNO1FBQ1gsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNILFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDVyxhQUFRLEdBQVIsUUFBUSxDQUFzQjtJQUM3RixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdDLEVBQUUsS0FBMEI7UUFDcEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDbkIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUMzRDtZQUVELGtEQUFrRDtZQUNsRCw0REFBNEQ7WUFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQztZQUMvRCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1YsQ0FBQztJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFrQyxFQUFFLEtBQTBCO1FBQzNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7NkdBcENRLGdCQUFnQixzR0FLTyxxQkFBcUI7aUhBTDVDLGdCQUFnQixjQUZiLE1BQU07MkZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBS2dCLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgQ2FuQWN0aXZhdGVDaGlsZCwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBVVRIX1JFRElSRUNUX0hBTkRMRVIsIEF1dGhDb25maWcsIEF1dGhSZWRpcmVjdEhhbmRsZXJ9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBdXRofSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Zmlyc3R9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJiQW5vbnltb3VzR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSwgQ2FuQWN0aXZhdGVDaGlsZCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoOiBBdXRoLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IEF1dGhDb25maWcsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChBVVRIX1JFRElSRUNUX0hBTkRMRVIpIHByaXZhdGUgX2hhbmRsZXI/OiBBdXRoUmVkaXJlY3RIYW5kbGVyKSB7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZhdGUoc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoLnVzZXIucGlwZShcbiAgICAgICAgICAgIG1hcCh1c2VyID0+ICEhdXNlciksXG4gICAgICAgICAgICBtYXAoaXNBdXRoZW50aWNhdGVkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlci5vbkZhaWxlZEFub255bW91cyhzbmFwc2hvdCwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBVUkwgdG8gZ28gdG8gd2UgY2FuIGp1c3Qgc2F5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByb3V0ZSBieSByZXR1cm5pbmcgZmFsc2UuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFVybCA9IHRoaXMuX2NvbmZpZz8ucmVkaXJlY3RzPy5hdXRoZW50aWNhdGVkID8/IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0VXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmlzQXJyYXkobmV4dFVybCkgPyBuZXh0VXJsIDogW25leHRVcmxdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIuY3JlYXRlVXJsVHJlZShjb21tYW5kcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjYW5BY3RpdmF0ZUNoaWxkKGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbkFjdGl2YXRlKGNoaWxkUm91dGUsIHN0YXRlKTtcbiAgICB9XG5cbn1cbiJdfQ==
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { AUTH_REDIRECT_HANDLER } from '../interfaces/config.interface';
|
|
2
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
3
|
-
import { map } from 'rxjs/operators';
|
|
4
|
-
import { first } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../auth.service";
|
|
7
|
-
import * as i2 from "@angular/router";
|
|
8
|
-
import * as i3 from "../interfaces/config.interface";
|
|
9
|
-
export class BbAuthenticatedGuard {
|
|
10
|
-
constructor(_auth, _router, _config, _handler) {
|
|
11
|
-
this._auth = _auth;
|
|
12
|
-
this._router = _router;
|
|
13
|
-
this._config = _config;
|
|
14
|
-
this._handler = _handler;
|
|
15
|
-
}
|
|
16
|
-
canActivate(snapshot, state) {
|
|
17
|
-
return this._auth.user.pipe(map(user => !!user), map(isAuthenticated => {
|
|
18
|
-
if (isAuthenticated) {
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
if (this._handler) {
|
|
22
|
-
return this._handler.onFailedAuthenticated(snapshot, state);
|
|
23
|
-
}
|
|
24
|
-
// If we don't have a URL to go to we can just say
|
|
25
|
-
// the user is not allowed in this route by returning false.
|
|
26
|
-
const nextUrl = this._config?.redirects?.unauthenticated ?? null;
|
|
27
|
-
if (!nextUrl) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
const setRedirectOnFailedAuth = this._config?.setRedirectOnFailedAuth ?? true;
|
|
31
|
-
const redirectUrl = state?.url ?? null;
|
|
32
|
-
const queryParams = setRedirectOnFailedAuth && redirectUrl ? { redirectUrl } : {};
|
|
33
|
-
const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];
|
|
34
|
-
return this._router.createUrlTree(commands, { queryParams });
|
|
35
|
-
}), first());
|
|
36
|
-
}
|
|
37
|
-
canActivateChild(childRoute, state) {
|
|
38
|
-
return this.canActivate(childRoute, state);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
BbAuthenticatedGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BbAuthenticatedGuard, deps: [{ token: i1.Auth }, { token: i2.Router }, { token: i3.AuthConfig, optional: true }, { token: AUTH_REDIRECT_HANDLER, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
42
|
-
BbAuthenticatedGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BbAuthenticatedGuard, providedIn: 'root' });
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BbAuthenticatedGuard, decorators: [{
|
|
44
|
-
type: Injectable,
|
|
45
|
-
args: [{
|
|
46
|
-
providedIn: 'root'
|
|
47
|
-
}]
|
|
48
|
-
}], ctorParameters: function () { return [{ type: i1.Auth }, { type: i2.Router }, { type: i3.AuthConfig, decorators: [{
|
|
49
|
-
type: Optional
|
|
50
|
-
}] }, { type: undefined, decorators: [{
|
|
51
|
-
type: Optional
|
|
52
|
-
}, {
|
|
53
|
-
type: Inject,
|
|
54
|
-
args: [AUTH_REDIRECT_HANDLER]
|
|
55
|
-
}] }]; } });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL2d1YXJkcy9hdXRoZW50aWNhdGVkLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxxQkFBcUIsRUFBa0MsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RyxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7Ozs7O0FBSzNCLE1BQU0sT0FBTyxvQkFBb0I7SUFFN0IsWUFBb0IsS0FBVyxFQUNYLE9BQWUsRUFDSCxPQUFvQixFQUNXLFFBQThCO1FBSHpFLFVBQUssR0FBTCxLQUFLLENBQU07UUFDWCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ0gsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNXLGFBQVEsR0FBUixRQUFRLENBQXNCO0lBQzdGLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0MsRUFBRSxLQUEwQjtRQUNwRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUNuQixHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxlQUFlLEVBQUU7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUMvRDtZQUVELGtEQUFrRDtZQUNsRCw0REFBNEQ7WUFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxJQUFJLElBQUksQ0FBQztZQUNqRSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLHVCQUF1QixJQUFJLElBQUksQ0FBQztZQUM5RSxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQztZQUN2QyxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNWLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0MsRUFBRSxLQUEwQjtRQUMzRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7O2lIQXZDUSxvQkFBb0Isc0dBS0cscUJBQXFCO3FIQUw1QyxvQkFBb0IsY0FGakIsTUFBTTsyRkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFLZ0IsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0FVVEhfUkVESVJFQ1RfSEFORExFUiwgQXV0aENvbmZpZywgQXV0aFJlZGlyZWN0SGFuZGxlcn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0F1dGh9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtmaXJzdH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmJBdXRoZW50aWNhdGVkR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSwgQ2FuQWN0aXZhdGVDaGlsZCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoOiBBdXRoLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbmZpZz86IEF1dGhDb25maWcsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChBVVRIX1JFRElSRUNUX0hBTkRMRVIpIHByaXZhdGUgX2hhbmRsZXI/OiBBdXRoUmVkaXJlY3RIYW5kbGVyKSB7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZhdGUoc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoLnVzZXIucGlwZShcbiAgICAgICAgICAgIG1hcCh1c2VyID0+ICEhdXNlciksXG4gICAgICAgICAgICBtYXAoaXNBdXRoZW50aWNhdGVkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9oYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVyLm9uRmFpbGVkQXV0aGVudGljYXRlZChzbmFwc2hvdCwgc3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBVUkwgdG8gZ28gdG8gd2UgY2FuIGp1c3Qgc2F5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByb3V0ZSBieSByZXR1cm5pbmcgZmFsc2UuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFVybCA9IHRoaXMuX2NvbmZpZz8ucmVkaXJlY3RzPy51bmF1dGhlbnRpY2F0ZWQgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNldFJlZGlyZWN0T25GYWlsZWRBdXRoID0gdGhpcy5fY29uZmlnPy5zZXRSZWRpcmVjdE9uRmFpbGVkQXV0aCA/PyB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gc3RhdGU/LnVybCA/PyBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gc2V0UmVkaXJlY3RPbkZhaWxlZEF1dGggJiYgcmVkaXJlY3RVcmwgPyB7cmVkaXJlY3RVcmx9IDoge307XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZHMgPSBBcnJheS5pc0FycmF5KG5leHRVcmwpID8gbmV4dFVybCA6IFtuZXh0VXJsXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLmNyZWF0ZVVybFRyZWUoY29tbWFuZHMsIHtxdWVyeVBhcmFtc30pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZhdGVDaGlsZChjaGlsZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYW5BY3RpdmF0ZShjaGlsZFJvdXRlLCBzdGF0ZSk7XG4gICAgfVxuXG59XG4iXX0=
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { BbCollectionsData, BbCollectionsEmpty, BbCollectionsError, BbCollectionsInitial } from './components/collections.directive';
|
|
2
|
-
import { BbCollectionsViewer } from './components/collections-viewer/collections-viewer.component';
|
|
3
|
-
import { BbCollectionsPager } from './components/collections-pager/collections-pager.component';
|
|
4
|
-
import { CommonModule } from '@angular/common';
|
|
5
|
-
import { NgModule } from '@angular/core';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class CollectionsModule {
|
|
8
|
-
}
|
|
9
|
-
CollectionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: CollectionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
10
|
-
CollectionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.6", ngImport: i0, type: CollectionsModule, declarations: [
|
|
11
|
-
// Components.
|
|
12
|
-
BbCollectionsViewer,
|
|
13
|
-
BbCollectionsPager,
|
|
14
|
-
// Directives.
|
|
15
|
-
BbCollectionsData,
|
|
16
|
-
BbCollectionsEmpty,
|
|
17
|
-
BbCollectionsError,
|
|
18
|
-
BbCollectionsInitial], imports: [CommonModule], exports: [
|
|
19
|
-
// Components.
|
|
20
|
-
BbCollectionsViewer,
|
|
21
|
-
BbCollectionsPager,
|
|
22
|
-
// Directives.
|
|
23
|
-
BbCollectionsData,
|
|
24
|
-
BbCollectionsEmpty,
|
|
25
|
-
BbCollectionsError,
|
|
26
|
-
BbCollectionsInitial] });
|
|
27
|
-
CollectionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: CollectionsModule, imports: [CommonModule] });
|
|
28
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: CollectionsModule, decorators: [{
|
|
29
|
-
type: NgModule,
|
|
30
|
-
args: [{
|
|
31
|
-
imports: [CommonModule],
|
|
32
|
-
declarations: [
|
|
33
|
-
// Components.
|
|
34
|
-
BbCollectionsViewer,
|
|
35
|
-
BbCollectionsPager,
|
|
36
|
-
// Directives.
|
|
37
|
-
BbCollectionsData,
|
|
38
|
-
BbCollectionsEmpty,
|
|
39
|
-
BbCollectionsError,
|
|
40
|
-
BbCollectionsInitial
|
|
41
|
-
],
|
|
42
|
-
exports: [
|
|
43
|
-
// Components.
|
|
44
|
-
BbCollectionsViewer,
|
|
45
|
-
BbCollectionsPager,
|
|
46
|
-
// Directives.
|
|
47
|
-
BbCollectionsData,
|
|
48
|
-
BbCollectionsEmpty,
|
|
49
|
-
BbCollectionsError,
|
|
50
|
-
BbCollectionsInitial
|
|
51
|
-
]
|
|
52
|
-
}]
|
|
53
|
-
}] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9jb2xsZWN0aW9ucy9zcmMvbGliL2NvbGxlY3Rpb25zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDakcsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBeUJ2QyxNQUFNLE9BQU8saUJBQWlCOzs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUI7UUFwQnRCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixvQkFBb0IsYUFUZCxZQUFZO1FBWWxCLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixvQkFBb0I7K0dBR2YsaUJBQWlCLFlBdEJoQixZQUFZOzJGQXNCYixpQkFBaUI7a0JBdkI3QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsWUFBWSxFQUFFO3dCQUNWLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixvQkFBb0I7cUJBQ3ZCO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCYkNvbGxlY3Rpb25zRGF0YSxcbiAgICBCYkNvbGxlY3Rpb25zRW1wdHksXG4gICAgQmJDb2xsZWN0aW9uc0Vycm9yLFxuICAgIEJiQ29sbGVjdGlvbnNJbml0aWFsXG59IGZyb20gJy4vY29tcG9uZW50cy9jb2xsZWN0aW9ucy5kaXJlY3RpdmUnO1xuaW1wb3J0IHtCYkNvbGxlY3Rpb25zVmlld2VyfSBmcm9tICcuL2NvbXBvbmVudHMvY29sbGVjdGlvbnMtdmlld2VyL2NvbGxlY3Rpb25zLXZpZXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHtCYkNvbGxlY3Rpb25zUGFnZXJ9IGZyb20gJy4vY29tcG9uZW50cy9jb2xsZWN0aW9ucy1wYWdlci9jb2xsZWN0aW9ucy1wYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgLy8gQ29tcG9uZW50cy5cbiAgICAgICAgQmJDb2xsZWN0aW9uc1ZpZXdlcixcbiAgICAgICAgQmJDb2xsZWN0aW9uc1BhZ2VyLFxuICAgICAgICAvLyBEaXJlY3RpdmVzLlxuICAgICAgICBCYkNvbGxlY3Rpb25zRGF0YSxcbiAgICAgICAgQmJDb2xsZWN0aW9uc0VtcHR5LFxuICAgICAgICBCYkNvbGxlY3Rpb25zRXJyb3IsXG4gICAgICAgIEJiQ29sbGVjdGlvbnNJbml0aWFsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIC8vIENvbXBvbmVudHMuXG4gICAgICAgIEJiQ29sbGVjdGlvbnNWaWV3ZXIsXG4gICAgICAgIEJiQ29sbGVjdGlvbnNQYWdlcixcbiAgICAgICAgLy8gRGlyZWN0aXZlcy5cbiAgICAgICAgQmJDb2xsZWN0aW9uc0RhdGEsXG4gICAgICAgIEJiQ29sbGVjdGlvbnNFbXB0eSxcbiAgICAgICAgQmJDb2xsZWN0aW9uc0Vycm9yLFxuICAgICAgICBCYkNvbGxlY3Rpb25zSW5pdGlhbFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbnNNb2R1bGUge1xufVxuIl19
|