@bravobit/bb-foundation 0.45.4 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth/lib/auth.config.d.ts +0 -2
- package/auth/lib/auth.service.d.ts +1 -1
- package/auth/lib/directives/authenticated.directive.d.ts +1 -1
- package/collections/lib/directives/collections-data-row.directive.d.ts +1 -1
- package/collections/lib/directives/collections-data.directive.d.ts +1 -1
- package/collections/lib/directives/collections-empty.directive.d.ts +1 -1
- package/collections/lib/directives/collections-error.directive.d.ts +1 -1
- package/collections/lib/directives/collections-initial.directive.d.ts +1 -1
- package/collections/lib/directives/collections-item.directive.d.ts +1 -1
- package/dialog/lib/dialog-container/dialog-container.component.d.ts +1 -0
- package/dialog/lib/dialog-overlay/dialog-overlay.component.d.ts +1 -0
- package/fesm2022/bravobit-bb-foundation-auth.mjs +44 -50
- package/fesm2022/bravobit-bb-foundation-auth.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-collections.mjs +69 -75
- package/fesm2022/bravobit-bb-foundation-collections.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-combobox.mjs +21 -24
- package/fesm2022/bravobit-bb-foundation-combobox.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-dashboard.mjs +35 -35
- package/fesm2022/bravobit-bb-foundation-dashboard.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-dialog.mjs +63 -47
- package/fesm2022/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-elements.mjs +119 -131
- package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-http.mjs +10 -10
- package/fesm2022/bravobit-bb-foundation-http.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-localize.mjs +25 -32
- package/fesm2022/bravobit-bb-foundation-localize.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-masking.mjs +19 -22
- package/fesm2022/bravobit-bb-foundation-masking.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-notifications.mjs +15 -17
- package/fesm2022/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-permissions.mjs +11 -12
- package/fesm2022/bravobit-bb-foundation-permissions.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-recaptcha.mjs +11 -11
- package/fesm2022/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-rxjs.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-select.mjs +26 -30
- package/fesm2022/bravobit-bb-foundation-select.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-storage.mjs +16 -8
- package/fesm2022/bravobit-bb-foundation-storage.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-table.mjs +29 -31
- package/fesm2022/bravobit-bb-foundation-table.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-tooltip.mjs +12 -13
- package/fesm2022/bravobit-bb-foundation-tooltip.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-utils.mjs +20 -24
- package/fesm2022/bravobit-bb-foundation-utils.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation.mjs +21 -21
- package/fesm2022/bravobit-bb-foundation.mjs.map +1 -1
- package/localize/lib/localize.config.d.ts +0 -1
- package/localize/lib/localize.service.d.ts +1 -1
- package/localize/lib/views/localize-template.directive.d.ts +1 -1
- package/masking/lib/masking.service.d.ts +2 -2
- package/notifications/lib/notifications-list/notifications-list.component.d.ts +1 -2
- package/package.json +25 -63
- package/permissions/lib/directives/permission.directive.d.ts +1 -1
- package/storage/lib/interfaces/strategy.interface.d.ts +1 -1
- package/table/lib/components/table/table.component.d.ts +2 -2
- package/esm2022/auth/bravobit-bb-foundation-auth.mjs +0 -5
- package/esm2022/auth/lib/auth.config.mjs +0 -16
- package/esm2022/auth/lib/auth.interceptor.mjs +0 -87
- package/esm2022/auth/lib/auth.module.mjs +0 -25
- package/esm2022/auth/lib/auth.service.mjs +0 -261
- package/esm2022/auth/lib/auth.session.mjs +0 -142
- package/esm2022/auth/lib/directives/authenticated.directive.mjs +0 -78
- package/esm2022/auth/lib/guards/anonymous.guard.mjs +0 -29
- package/esm2022/auth/lib/guards/authenticated.guard.mjs +0 -32
- package/esm2022/auth/lib/helpers/jwt.helper.mjs +0 -67
- package/esm2022/auth/lib/interfaces/config.interface.mjs +0 -4
- package/esm2022/auth/lib/interfaces/provider.interface.mjs +0 -2
- package/esm2022/auth/lib/interfaces/token.interface.mjs +0 -2
- package/esm2022/auth/lib/providers/email.provider.mjs +0 -27
- package/esm2022/auth/lib/providers/verify.provider.mjs +0 -25
- package/esm2022/auth/lib/tokens/use-authorization.token.mjs +0 -3
- package/esm2022/auth/public_api.mjs +0 -15
- package/esm2022/bravobit-bb-foundation.mjs +0 -5
- package/esm2022/collections/bravobit-bb-foundation-collections.mjs +0 -5
- package/esm2022/collections/lib/classes/array.collection.mjs +0 -85
- package/esm2022/collections/lib/collection.mjs +0 -98
- package/esm2022/collections/lib/collections.module.mjs +0 -84
- package/esm2022/collections/lib/components/collections-actions/collections-actions.component.mjs +0 -37
- package/esm2022/collections/lib/components/collections-grid/collections-grid.component.mjs +0 -52
- package/esm2022/collections/lib/components/collections-pager/collections-pager.component.mjs +0 -114
- package/esm2022/collections/lib/components/collections-table/collections-table.component.mjs +0 -86
- package/esm2022/collections/lib/components/collections-table-label/collections-table-label.component.mjs +0 -30
- package/esm2022/collections/lib/components/collections-table-sorting/collections-table-sorting.component.mjs +0 -65
- package/esm2022/collections/lib/components/collections-viewer/collections-viewer.component.mjs +0 -37
- package/esm2022/collections/lib/directives/collections-data-row.directive.mjs +0 -29
- package/esm2022/collections/lib/directives/collections-data.directive.mjs +0 -29
- package/esm2022/collections/lib/directives/collections-empty.directive.mjs +0 -29
- package/esm2022/collections/lib/directives/collections-error.directive.mjs +0 -29
- package/esm2022/collections/lib/directives/collections-initial.directive.mjs +0 -23
- package/esm2022/collections/lib/directives/collections-item.directive.mjs +0 -29
- package/esm2022/collections/lib/interfaces/array-collection.interface.mjs +0 -2
- package/esm2022/collections/lib/interfaces/collection.interface.mjs +0 -2
- package/esm2022/collections/lib/providers/api-collection.provider.mjs +0 -103
- package/esm2022/collections/lib/providers/collection.provider.mjs +0 -39
- package/esm2022/collections/lib/providers/local-collection.provider.mjs +0 -25
- package/esm2022/collections/public_api.mjs +0 -22
- package/esm2022/combobox/bravobit-bb-foundation-combobox.mjs +0 -5
- package/esm2022/combobox/combobox/combobox-container.directive.mjs +0 -137
- package/esm2022/combobox/combobox/combobox.component.mjs +0 -118
- package/esm2022/combobox/combobox-label.directive.mjs +0 -14
- package/esm2022/combobox/combobox-option.directive.mjs +0 -17
- package/esm2022/combobox/combobox-panel/combobox-panel.animation.mjs +0 -11
- package/esm2022/combobox/combobox-panel/combobox-panel.component.mjs +0 -42
- package/esm2022/combobox/combobox.interface.mjs +0 -2
- package/esm2022/combobox/public_api.mjs +0 -4
- package/esm2022/dashboard/bravobit-bb-foundation-dashboard.mjs +0 -5
- package/esm2022/dashboard/lib/dashboard/dashboard.component.mjs +0 -50
- package/esm2022/dashboard/lib/dashboard-header/dashboard-header.component.mjs +0 -25
- package/esm2022/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +0 -28
- package/esm2022/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +0 -32
- package/esm2022/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +0 -75
- package/esm2022/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +0 -93
- package/esm2022/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +0 -60
- package/esm2022/dashboard/lib/dashboard.module.mjs +0 -50
- package/esm2022/dashboard/public_api.mjs +0 -9
- package/esm2022/dialog/bravobit-bb-foundation-dialog.mjs +0 -5
- package/esm2022/dialog/lib/dialog-actions/dialog-actions.component.mjs +0 -12
- package/esm2022/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +0 -44
- package/esm2022/dialog/lib/dialog-container/dialog-container.component.mjs +0 -58
- package/esm2022/dialog/lib/dialog-header/dialog-header.component.mjs +0 -15
- package/esm2022/dialog/lib/dialog-link/dialog-link.component.mjs +0 -11
- package/esm2022/dialog/lib/dialog-modal/dialog-modal.component.mjs +0 -57
- package/esm2022/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +0 -53
- package/esm2022/dialog/lib/dialog.config.mjs +0 -8
- package/esm2022/dialog/lib/dialog.insertion.mjs +0 -18
- package/esm2022/dialog/lib/dialog.interfaces.mjs +0 -9
- package/esm2022/dialog/lib/dialog.module.mjs +0 -64
- package/esm2022/dialog/lib/dialog.ref.mjs +0 -16
- package/esm2022/dialog/lib/dialog.service.mjs +0 -75
- package/esm2022/dialog/lib/directives/confirm.directive.mjs +0 -48
- package/esm2022/dialog/public_api.mjs +0 -12
- package/esm2022/elements/bravobit-bb-foundation-elements.mjs +0 -5
- package/esm2022/elements/lib/avatar/avatar.component.mjs +0 -175
- package/esm2022/elements/lib/button/button.component.mjs +0 -68
- package/esm2022/elements/lib/checkbox/checkbox.component.mjs +0 -116
- package/esm2022/elements/lib/checkbox-group/checkbox-group.component.mjs +0 -34
- package/esm2022/elements/lib/date-picker/date-picker.component.mjs +0 -323
- package/esm2022/elements/lib/directives/addon.directive.mjs +0 -27
- package/esm2022/elements/lib/directives/extra-error-controls.directive.mjs +0 -41
- package/esm2022/elements/lib/directives/file-drop.directive.mjs +0 -62
- package/esm2022/elements/lib/directives/form-submit.directive.mjs +0 -54
- package/esm2022/elements/lib/directives/form-submitter.directive.mjs +0 -24
- package/esm2022/elements/lib/directives/image-upload.directive.mjs +0 -143
- package/esm2022/elements/lib/directives/input.directive.mjs +0 -49
- package/esm2022/elements/lib/elements.config.mjs +0 -54
- package/esm2022/elements/lib/elements.interfaces.mjs +0 -5
- package/esm2022/elements/lib/elements.module.mjs +0 -146
- package/esm2022/elements/lib/file-picker/file-picker.component.mjs +0 -196
- package/esm2022/elements/lib/form-control/form-control.component.mjs +0 -46
- package/esm2022/elements/lib/form-error/form-error.component.mjs +0 -106
- package/esm2022/elements/lib/form-group/form-group.component.mjs +0 -19
- package/esm2022/elements/lib/icon/icon.component.mjs +0 -122
- package/esm2022/elements/lib/image-picker/image-picker.component.mjs +0 -126
- package/esm2022/elements/lib/multi-file-control/multi-file-control.component.mjs +0 -149
- package/esm2022/elements/lib/pipes/date.pipe.mjs +0 -28
- package/esm2022/elements/lib/pipes/file-image.pipe.mjs +0 -48
- package/esm2022/elements/lib/pipes/file-size.pipe.mjs +0 -27
- package/esm2022/elements/lib/pipes/relative-time.pipe.mjs +0 -99
- package/esm2022/elements/lib/radio-button/radio-button.component.mjs +0 -60
- package/esm2022/elements/lib/radio-group/radio-group.component.mjs +0 -103
- package/esm2022/elements/lib/spinner/spinner.component.mjs +0 -22
- package/esm2022/elements/public_api.mjs +0 -30
- package/esm2022/http/bravobit-bb-foundation-http.mjs +0 -5
- package/esm2022/http/lib/classes/http.config.mjs +0 -32
- package/esm2022/http/lib/classes/http.error.mjs +0 -20
- package/esm2022/http/lib/http.config.mjs +0 -18
- package/esm2022/http/lib/http.interfaces.mjs +0 -4
- package/esm2022/http/lib/http.module.mjs +0 -31
- package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +0 -60
- package/esm2022/http/lib/interceptors/error.interceptor.mjs +0 -31
- package/esm2022/http/public_api.mjs +0 -8
- package/esm2022/lib/core/functions/array.utils.mjs +0 -7
- package/esm2022/lib/core/functions/date.utils.mjs +0 -31
- package/esm2022/lib/core/functions/password.utils.mjs +0 -17
- package/esm2022/lib/core/functions/route-cache.utils.mjs +0 -23
- package/esm2022/lib/core/miscellaneous/coercion.mjs +0 -5
- package/esm2022/lib/core/miscellaneous/regex.mjs +0 -44
- package/esm2022/lib/core/miscellaneous/validator.mjs +0 -85
- package/esm2022/lib/core/services/exif.service.mjs +0 -165
- package/esm2022/lib/core/services/file-loader.service.mjs +0 -85
- package/esm2022/lib/core/services/files.service.mjs +0 -78
- package/esm2022/lib/core/services/image-converter.service.mjs +0 -126
- package/esm2022/lib/core/services/languages.service.mjs +0 -75
- package/esm2022/lib/core/services/network.service.mjs +0 -58
- package/esm2022/lib/core/services/patch.service.mjs +0 -66
- package/esm2022/lib/core/tokens/accept-language.token.mjs +0 -3
- package/esm2022/lib/core/tokens/base-url.token.mjs +0 -3
- package/esm2022/lib/core/tokens/cookie.token.mjs +0 -3
- package/esm2022/lib/core/tokens/global-focus-mode.token.mjs +0 -10
- package/esm2022/lib/core/tokens/location.token.mjs +0 -6
- package/esm2022/lib/core/tokens/navigator.token.mjs +0 -6
- package/esm2022/lib/core/tokens/window.token.mjs +0 -12
- package/esm2022/localize/bravobit-bb-foundation-localize.mjs +0 -5
- package/esm2022/localize/lib/dictionary/dictionary.class.mjs +0 -96
- package/esm2022/localize/lib/dictionary/dictionary.context.mjs +0 -24
- package/esm2022/localize/lib/dictionary/dictionary.data.mjs +0 -7
- package/esm2022/localize/lib/functions/date.function.mjs +0 -18
- package/esm2022/localize/lib/functions/lowercase.function.mjs +0 -13
- package/esm2022/localize/lib/functions/uppercase.function.mjs +0 -13
- package/esm2022/localize/lib/handlers/missing.handler.mjs +0 -13
- package/esm2022/localize/lib/interfaces/config.interfaces.mjs +0 -2
- package/esm2022/localize/lib/interfaces/functions.interfaces.mjs +0 -8
- package/esm2022/localize/lib/interfaces/handlers.interfaces.mjs +0 -2
- package/esm2022/localize/lib/interfaces/options.interfaces.mjs +0 -6
- package/esm2022/localize/lib/localizations/dutch.localization.mjs +0 -64
- package/esm2022/localize/lib/localizations/english.localization.mjs +0 -64
- package/esm2022/localize/lib/localizations/papiamento.localization.mjs +0 -64
- package/esm2022/localize/lib/localizations/spanish.localization.mjs +0 -64
- package/esm2022/localize/lib/localize.config.mjs +0 -43
- package/esm2022/localize/lib/localize.module.mjs +0 -39
- package/esm2022/localize/lib/localize.pipe.mjs +0 -48
- package/esm2022/localize/lib/localize.service.mjs +0 -172
- package/esm2022/localize/lib/localize.tokens.mjs +0 -18
- package/esm2022/localize/lib/transforms/abstract.transform.mjs +0 -30
- package/esm2022/localize/lib/transforms/interpolate.transform.mjs +0 -45
- package/esm2022/localize/lib/transforms/plural.transform.mjs +0 -49
- package/esm2022/localize/lib/transforms/reference.transform.mjs +0 -19
- package/esm2022/localize/lib/views/localize-string/localize-string.component.mjs +0 -89
- package/esm2022/localize/lib/views/localize-template.directive.mjs +0 -23
- package/esm2022/localize/public_api.mjs +0 -27
- package/esm2022/masking/bravobit-bb-foundation-masking.mjs +0 -5
- package/esm2022/masking/lib/directives/currency-mask.directive.mjs +0 -41
- package/esm2022/masking/lib/directives/date-mask.directive.mjs +0 -41
- package/esm2022/masking/lib/directives/input-mask.directive.mjs +0 -126
- package/esm2022/masking/lib/input-mask.interface.mjs +0 -2
- package/esm2022/masking/lib/masking.module.mjs +0 -30
- package/esm2022/masking/lib/masking.service.mjs +0 -104
- package/esm2022/masking/public_api.mjs +0 -7
- package/esm2022/notifications/bravobit-bb-foundation-notifications.mjs +0 -5
- package/esm2022/notifications/lib/notifications-item/notifications-item.component.mjs +0 -112
- package/esm2022/notifications/lib/notifications-list/notifications-list.component.mjs +0 -48
- package/esm2022/notifications/lib/notifications.animations.mjs +0 -28
- package/esm2022/notifications/lib/notifications.config.mjs +0 -8
- package/esm2022/notifications/lib/notifications.interfaces.mjs +0 -31
- package/esm2022/notifications/lib/notifications.module.mjs +0 -20
- package/esm2022/notifications/lib/notifications.service.mjs +0 -161
- package/esm2022/notifications/public_api.mjs +0 -5
- package/esm2022/permissions/bravobit-bb-foundation-permissions.mjs +0 -5
- package/esm2022/permissions/lib/directives/permission.directive.mjs +0 -95
- package/esm2022/permissions/lib/guards/permission.guard.mjs +0 -25
- package/esm2022/permissions/lib/handlers/abstract.handler.mjs +0 -3
- package/esm2022/permissions/lib/handlers/local.handler.mjs +0 -29
- package/esm2022/permissions/lib/permissions.config.mjs +0 -20
- package/esm2022/permissions/lib/permissions.interface.mjs +0 -8
- package/esm2022/permissions/lib/permissions.module.mjs +0 -25
- package/esm2022/permissions/lib/permissions.service.mjs +0 -100
- package/esm2022/permissions/public_api.mjs +0 -9
- package/esm2022/public_api.mjs +0 -25
- package/esm2022/recaptcha/bravobit-bb-foundation-recaptcha.mjs +0 -5
- package/esm2022/recaptcha/lib/recaptcha/recaptcha.component.mjs +0 -225
- package/esm2022/recaptcha/lib/recaptcha-loader.service.mjs +0 -80
- package/esm2022/recaptcha/lib/recaptcha.config.mjs +0 -8
- package/esm2022/recaptcha/lib/recaptcha.interface.mjs +0 -3
- package/esm2022/recaptcha/lib/recaptcha.module.mjs +0 -27
- package/esm2022/recaptcha/public_api.mjs +0 -6
- package/esm2022/rxjs/bravobit-bb-foundation-rxjs.mjs +0 -5
- package/esm2022/rxjs/lib/observables/get-control-value.observable.mjs +0 -6
- package/esm2022/rxjs/lib/observables/get-route-param.observable.mjs +0 -5
- package/esm2022/rxjs/lib/operators/combine-latest-map.operator.mjs +0 -10
- package/esm2022/rxjs/lib/operators/filter-nil.operator.mjs +0 -5
- package/esm2022/rxjs/public_api.mjs +0 -5
- package/esm2022/select/bravobit-bb-foundation-select.mjs +0 -5
- package/esm2022/select/lib/select/select.component.mjs +0 -289
- package/esm2022/select/lib/select-label.directive.mjs +0 -18
- package/esm2022/select/lib/select-multi-label.directive.mjs +0 -18
- package/esm2022/select/lib/select-option-group.directive.mjs +0 -18
- package/esm2022/select/lib/select-option.directive.mjs +0 -18
- package/esm2022/select/lib/select.config.mjs +0 -8
- package/esm2022/select/lib/select.module.mjs +0 -46
- package/esm2022/select/public_api.mjs +0 -8
- package/esm2022/storage/bravobit-bb-foundation-storage.mjs +0 -5
- package/esm2022/storage/lib/interfaces/attributes.interface.mjs +0 -2
- package/esm2022/storage/lib/interfaces/memory.interface.mjs +0 -2
- package/esm2022/storage/lib/interfaces/strategy.interface.mjs +0 -2
- package/esm2022/storage/lib/storage.service.mjs +0 -113
- package/esm2022/storage/lib/strategies/cookie-storage.strategy.mjs +0 -144
- package/esm2022/storage/lib/strategies/memory-storage.strategy.mjs +0 -54
- package/esm2022/storage/lib/strategies/polyfill-storage.strategy.mjs +0 -100
- package/esm2022/storage/public_api.mjs +0 -8
- package/esm2022/table/bravobit-bb-foundation-table.mjs +0 -5
- package/esm2022/table/lib/components/table/table.component.mjs +0 -200
- package/esm2022/table/lib/components/table-cell/table-cell.component.mjs +0 -11
- package/esm2022/table/lib/components/table-header-cell/table-header-cell.component.mjs +0 -135
- package/esm2022/table/lib/components/table-pager/table-pager.component.mjs +0 -136
- package/esm2022/table/lib/data/datasource.data.mjs +0 -30
- package/esm2022/table/lib/data/generic.data.mjs +0 -84
- package/esm2022/table/lib/interfaces/datasource.interface.mjs +0 -2
- package/esm2022/table/lib/interfaces/table.interfaces.mjs +0 -2
- package/esm2022/table/lib/table.module.mjs +0 -44
- package/esm2022/table/public_api.mjs +0 -10
- package/esm2022/tooltip/bravobit-bb-foundation-tooltip.mjs +0 -5
- package/esm2022/tooltip/lib/tooltip-container/tooltip-container.component.mjs +0 -23
- package/esm2022/tooltip/lib/tooltip.directive.mjs +0 -130
- package/esm2022/tooltip/lib/tooltip.interfaces.mjs +0 -4
- package/esm2022/tooltip/lib/tooltip.module.mjs +0 -16
- package/esm2022/tooltip/public_api.mjs +0 -5
- package/esm2022/utils/bravobit-bb-foundation-utils.mjs +0 -5
- package/esm2022/utils/lib/directives/autosize.directive.mjs +0 -76
- package/esm2022/utils/lib/directives/focus-trap.directive.mjs +0 -80
- package/esm2022/utils/lib/directives/focus.directive.mjs +0 -57
- package/esm2022/utils/lib/directives/template.directive.mjs +0 -33
- package/esm2022/utils/lib/utils.module.mjs +0 -35
- package/esm2022/utils/public_api.mjs +0 -6
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
import { AUTH_CONFIG, AUTH_REDIRECT_HANDLER } from './interfaces/config.interface';
|
|
2
|
-
import { inject, Injectable, Injector, makeStateKey, TransferState } from '@angular/core';
|
|
3
|
-
import { HttpClient, HttpContext } from '@angular/common/http';
|
|
4
|
-
import { Storage } from '@bravobit/bb-foundation/storage';
|
|
5
|
-
import { HTTP_CONFIG } from '@bravobit/bb-foundation/http';
|
|
6
|
-
import { USE_AUTHORIZATION } from './tokens/use-authorization.token';
|
|
7
|
-
import { AuthVerifyProvider } from './providers/verify.provider';
|
|
8
|
-
import { AuthEmailProvider } from './providers/email.provider';
|
|
9
|
-
import { firstValueFrom, of } from 'rxjs';
|
|
10
|
-
import { Platform } from '@angular/cdk/platform';
|
|
11
|
-
import { AuthSession } from './auth.session';
|
|
12
|
-
import { map, tap } from 'rxjs/operators';
|
|
13
|
-
import { Router } from '@angular/router';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
export class Auth {
|
|
16
|
-
// Dependencies.
|
|
17
|
-
_storage = inject(Storage);
|
|
18
|
-
_injector = inject(Injector);
|
|
19
|
-
_platform = inject(Platform);
|
|
20
|
-
_httpClient = inject(HttpClient);
|
|
21
|
-
_state = inject(TransferState, { optional: true });
|
|
22
|
-
_config = inject(AUTH_CONFIG, { optional: true });
|
|
23
|
-
_httpConfig = inject(HTTP_CONFIG, { optional: true });
|
|
24
|
-
_handler = inject(AUTH_REDIRECT_HANDLER, { optional: true });
|
|
25
|
-
// Readonly data.
|
|
26
|
-
_authStateKey = makeStateKey(`bbAuthStateKey`);
|
|
27
|
-
_httpAlias = this._httpConfig?.defaultAlias ?? null;
|
|
28
|
-
session;
|
|
29
|
-
user;
|
|
30
|
-
_refreshHandler = null;
|
|
31
|
-
constructor() {
|
|
32
|
-
// We select a storage strategy based on the server/browser.
|
|
33
|
-
// Only cookies CAN work on the server.
|
|
34
|
-
const storageStrategy = this._platform.isBrowser
|
|
35
|
-
? this._storage.select(["cookie" /* StorageOption.Cookie */, "local" /* StorageOption.Local */])
|
|
36
|
-
: this._storage.cookie;
|
|
37
|
-
// Starting the new session.
|
|
38
|
-
this.session = new AuthSession({
|
|
39
|
-
id: this._config?.applicationId,
|
|
40
|
-
storage: storageStrategy
|
|
41
|
-
});
|
|
42
|
-
this.user = this.session.user;
|
|
43
|
-
}
|
|
44
|
-
initialize() {
|
|
45
|
-
return async () => {
|
|
46
|
-
// Check if the app should bootstrap the authentication.
|
|
47
|
-
const shouldBootstrap = this._config?.bootstrap ?? true;
|
|
48
|
-
if (!shouldBootstrap) {
|
|
49
|
-
return this.handleAutoRefreshing();
|
|
50
|
-
}
|
|
51
|
-
// Only retrieve from the server when we are actually authenticated.
|
|
52
|
-
if (!this.session.authenticated()) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
// Get the key from the server state.
|
|
56
|
-
if (this._state && this._state?.hasKey(this._authStateKey)) {
|
|
57
|
-
const user = this._state?.get(this._authStateKey, null) ?? null;
|
|
58
|
-
return this.session.setUser(user);
|
|
59
|
-
}
|
|
60
|
-
// Try to fetch the user from the server.
|
|
61
|
-
const user$ = this.me();
|
|
62
|
-
const user = await firstValueFrom(user$, { defaultValue: null });
|
|
63
|
-
// Set the state if exists.
|
|
64
|
-
if (this._state) {
|
|
65
|
-
this._state?.set(this._authStateKey, user ?? null);
|
|
66
|
-
}
|
|
67
|
-
// Save the user in the storage and handle auto refreshing.
|
|
68
|
-
this.session.setUser(user);
|
|
69
|
-
this.handleAutoRefreshing();
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
me() {
|
|
73
|
-
const url = this.getUrl('auth/me');
|
|
74
|
-
return this._httpClient.get(url);
|
|
75
|
-
}
|
|
76
|
-
async signIn(provider, as) {
|
|
77
|
-
const { accessToken, refreshToken, user, ...result } = await provider.authenticate(this._httpClient);
|
|
78
|
-
// Check if the role matches.
|
|
79
|
-
const role = user?.role ?? null;
|
|
80
|
-
if (as && !as.includes(role)) {
|
|
81
|
-
throw new Error('Invalid role.');
|
|
82
|
-
}
|
|
83
|
-
// Validate if the provider is one of the available
|
|
84
|
-
// providers then return the user object and the provider.
|
|
85
|
-
const apiProvider = result?.provider ?? null;
|
|
86
|
-
const apiVerifyToken = result?.verifyToken ?? null;
|
|
87
|
-
const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];
|
|
88
|
-
if (availableProviders.includes(apiProvider)) {
|
|
89
|
-
return { user, provider: apiProvider, verifyToken: apiVerifyToken };
|
|
90
|
-
}
|
|
91
|
-
// Set the tokens in storage.
|
|
92
|
-
this.setTokens(accessToken, refreshToken);
|
|
93
|
-
// Set the user in storage.
|
|
94
|
-
this.session.setUser(user);
|
|
95
|
-
// Return the user.
|
|
96
|
-
return { user };
|
|
97
|
-
}
|
|
98
|
-
async signInWithEmail(email, password, as) {
|
|
99
|
-
const url = this.getUrl('auth/login');
|
|
100
|
-
return this.signIn(new AuthEmailProvider(email, password, url), as);
|
|
101
|
-
}
|
|
102
|
-
async signInWithVerifyCode(code, verifyToken) {
|
|
103
|
-
const url = this.getUrl('auth/verify');
|
|
104
|
-
return this.signIn(new AuthVerifyProvider(code, verifyToken, url));
|
|
105
|
-
}
|
|
106
|
-
async resendVerifyCode(verifyToken) {
|
|
107
|
-
const url = this.getUrl('auth/resend');
|
|
108
|
-
const result$ = this._httpClient.post(url, {
|
|
109
|
-
verify_token: verifyToken
|
|
110
|
-
});
|
|
111
|
-
return firstValueFrom(result$);
|
|
112
|
-
}
|
|
113
|
-
async register(data, options) {
|
|
114
|
-
// Execute API call.
|
|
115
|
-
const url = this.getUrl('auth/register');
|
|
116
|
-
const result$ = this._httpClient.post(url, data, options);
|
|
117
|
-
const result = await firstValueFrom(result$);
|
|
118
|
-
// Set the tokens in storage.
|
|
119
|
-
this.setTokens(result?.token, result?.refresh_token);
|
|
120
|
-
// Set the user in storage.
|
|
121
|
-
const user = result?.user;
|
|
122
|
-
this.session.setUser(user);
|
|
123
|
-
// Return the user.
|
|
124
|
-
return user;
|
|
125
|
-
}
|
|
126
|
-
logout() {
|
|
127
|
-
// If we don't have a refresh token just clear the session.
|
|
128
|
-
// Note: We do this because else we try to invalidate
|
|
129
|
-
// an "undefined" refresh token.
|
|
130
|
-
const refreshToken = this.session.refreshToken;
|
|
131
|
-
if (!refreshToken) {
|
|
132
|
-
return this.session.clear();
|
|
133
|
-
}
|
|
134
|
-
// We do have a refresh token, so try to
|
|
135
|
-
// invalidate it in the backend.
|
|
136
|
-
try {
|
|
137
|
-
const url = this.getUrl('auth/logout');
|
|
138
|
-
const headerName = this._config?.http?.header ?? 'Authorization';
|
|
139
|
-
const observable$ = this._httpClient.get(url, {
|
|
140
|
-
headers: { [headerName]: refreshToken }
|
|
141
|
-
});
|
|
142
|
-
firstValueFrom(observable$).then(_ => _).catch(_ => _);
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
// Do nothing because the tokens will be deleted anyways from the session.
|
|
146
|
-
}
|
|
147
|
-
// Delete the tokens from the session.
|
|
148
|
-
return this.session.clear();
|
|
149
|
-
}
|
|
150
|
-
refresh() {
|
|
151
|
-
// If the refresh token does
|
|
152
|
-
// not exist just return an observable of null.
|
|
153
|
-
const refreshToken = this.session.refreshToken;
|
|
154
|
-
if (!refreshToken) {
|
|
155
|
-
return of(null);
|
|
156
|
-
}
|
|
157
|
-
// Perform the refresh call.
|
|
158
|
-
const headerName = this._config?.http?.header ?? 'Authorization';
|
|
159
|
-
const scheme = this._config?.http?.scheme ?? 'Bearer';
|
|
160
|
-
const url = this.getUrl('auth/refresh');
|
|
161
|
-
const context = new HttpContext().set(USE_AUTHORIZATION, false);
|
|
162
|
-
return this._httpClient.get(url, {
|
|
163
|
-
headers: { [headerName]: `${scheme} ${refreshToken}` },
|
|
164
|
-
context: context
|
|
165
|
-
}).pipe(tap(({ token, refresh_token }) => this.setTokens(token, refresh_token)), map(({ token }) => token));
|
|
166
|
-
}
|
|
167
|
-
async requestPassword(email, extraParams = {}) {
|
|
168
|
-
const url = this.getUrl('auth/reset');
|
|
169
|
-
const observable$ = this._httpClient.post(url, { ...extraParams, email });
|
|
170
|
-
return firstValueFrom(observable$);
|
|
171
|
-
}
|
|
172
|
-
async resetPassword(token, newPassword, extraParams = {}) {
|
|
173
|
-
const url = this.getUrl('auth/reset-password');
|
|
174
|
-
const observable$ = this._httpClient.post(url, { ...extraParams, token, password: newPassword });
|
|
175
|
-
return firstValueFrom(observable$);
|
|
176
|
-
}
|
|
177
|
-
clearAndRedirect() {
|
|
178
|
-
// 1. Delete the tokens from the session.
|
|
179
|
-
this.session.clear();
|
|
180
|
-
if (this._handler) {
|
|
181
|
-
const urlTree = this._handler.onFailedAuthenticated();
|
|
182
|
-
if (typeof urlTree === 'boolean' || urlTree === null || urlTree === undefined) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
this.router.navigateByUrl(urlTree).then(_ => _);
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
// 2. Compose the route url.
|
|
189
|
-
const redirectUrl = this._config?.redirects.unauthenticated ?? null;
|
|
190
|
-
// 3. Route back if the user provided a redirect url.
|
|
191
|
-
if (this.router && redirectUrl) {
|
|
192
|
-
const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];
|
|
193
|
-
this.router.navigate(commands).then(_ => _);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
setTokens(accessToken, refreshToken) {
|
|
197
|
-
// Set the tokens in our session.
|
|
198
|
-
this.session.setTokens(accessToken, refreshToken);
|
|
199
|
-
// We need to update the auto refresh of the refresh token.
|
|
200
|
-
this.handleAutoRefreshing();
|
|
201
|
-
}
|
|
202
|
-
handleAutoRefreshing() {
|
|
203
|
-
const shouldAutoRefresh = this._config?.autoRefresh ?? false;
|
|
204
|
-
if (!shouldAutoRefresh) {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;
|
|
208
|
-
if (expiresAt === null || !this._platform.isBrowser) {
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
const differenceInMilliseconds = expiresAt.getTime() - Date.now();
|
|
212
|
-
const offsetInMilliseconds = 10_000; // 10 seconds.
|
|
213
|
-
// We want to start the refresh 10 seconds before it expires.
|
|
214
|
-
const actualTiming = differenceInMilliseconds - offsetInMilliseconds;
|
|
215
|
-
if (actualTiming <= 0) {
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
// We need to cap the timings because if
|
|
219
|
-
// we get large numbers it might cause unwanted results.
|
|
220
|
-
const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.
|
|
221
|
-
const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));
|
|
222
|
-
try {
|
|
223
|
-
if (this._refreshHandler !== null) {
|
|
224
|
-
clearTimeout?.(this._refreshHandler);
|
|
225
|
-
this._refreshHandler = null;
|
|
226
|
-
}
|
|
227
|
-
this._refreshHandler = window?.setTimeout?.(() => this.autoRefresh(), cappedTiming);
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
// Just ignore it.
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
async autoRefresh() {
|
|
234
|
-
try {
|
|
235
|
-
// We just need to wait for it to refresh.
|
|
236
|
-
const refresh$ = this.refresh();
|
|
237
|
-
await firstValueFrom(refresh$);
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
// Something went wrong refreshing, we need to clear.
|
|
241
|
-
this.clearAndRedirect();
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
get router() {
|
|
245
|
-
return this._injector.get(Router);
|
|
246
|
-
}
|
|
247
|
-
getUrl(endpoint) {
|
|
248
|
-
return [this._httpAlias, endpoint]
|
|
249
|
-
.filter(item => !!item)
|
|
250
|
-
.join('/');
|
|
251
|
-
}
|
|
252
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Auth, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
253
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Auth, providedIn: 'root' });
|
|
254
|
-
}
|
|
255
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Auth, decorators: [{
|
|
256
|
-
type: Injectable,
|
|
257
|
-
args: [{
|
|
258
|
-
providedIn: 'root'
|
|
259
|
-
}]
|
|
260
|
-
}], ctorParameters: () => [] });
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUUscUJBQXFCLEVBQWtDLE1BQU0sK0JBQStCLENBQUM7QUFDbEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBWSxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFFdEYsT0FBTyxFQUFDLE9BQU8sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLdkMsTUFBTSxPQUFPLElBQUk7SUFFYixnQkFBZ0I7SUFDQyxRQUFRLEdBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLFNBQVMsR0FBYSxNQUFNLENB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RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFBTSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNMLHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVksTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxRQUFnQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQzt3R0F0U1EsSUFBSTs0R0FBSixJQUFJLGNBRkQsTUFBTTs7NEZBRVQsSUFBSTtrQkFIaEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FVVEhfQ09ORklHLCBBVVRIX1JFRElSRUNUX0hBTkRMRVIsIEF1dGhDb25maWcsIEF1dGhSZWRpcmVjdEhhbmRsZXJ9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgbWFrZVN0YXRlS2V5LCBTdGF0ZUtleSwgVHJhbnNmZXJTdGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBDb250ZXh0LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtBdXRoUHJvdmlkZXIsIEF1dGhTaWduSW5SZXNwb25zZX0gZnJvbSAnLi9pbnRlcmZhY2VzL3Byb3ZpZGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1N0b3JhZ2UsIFN0b3JhZ2VPcHRpb259IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtIdHRwQ29uZmlnLCBIVFRQX0NPTkZJR30gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vaHR0cCc7XG5pbXBvcnQge1VTRV9BVVRIT1JJWkFUSU9OfSBmcm9tICcuL3Rva2Vucy91c2UtYXV0aG9yaXphdGlvbi50b2tlbic7XG5pbXBvcnQge0F1dGhWZXJpZnlQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvdmVyaWZ5LnByb3ZpZGVyJztcbmltcG9ydCB7QXV0aEVtYWlsUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2VtYWlsLnByb3ZpZGVyJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0F1dGhTZXNzaW9ufSBmcm9tICcuL2F1dGguc2Vzc2lvbic7XG5pbXBvcnQge21hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoIHtcblxuICAgIC8vIERlcGVuZGVuY2llcy5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yYWdlOiBTdG9yYWdlID0gaW5qZWN0KFN0b3JhZ2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm06IFBsYXRmb3JtID0gaW5qZWN0KFBsYXRmb3JtKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlPzogVHJhbnNmZXJTdGF0ZSA9IGluamVjdChUcmFuc2ZlclN0YXRlLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc/OiBBdXRoQ29uZmlnID0gaW5qZWN0KEFVVEhfQ09ORklHLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQ29uZmlnPzogSHR0cENvbmZpZyA9IGluamVjdChIVFRQX0NPTkZJRywge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlcj86IEF1dGhSZWRpcmVjdEhhbmRsZXIgPSBpbmplY3QoQVVUSF9SRURJUkVDVF9IQU5ETEVSLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aFN0YXRlS2V5OiBTdGF0ZUtleTxhbnkgfCBudWxsPiA9IG1ha2VTdGF0ZUtleShgYmJBdXRoU3RhdGVLZXlgKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQWxpYXM6IHN0cmluZyB8IG51bGwgPSB0aGlzLl9odHRwQ29uZmlnPy5kZWZhdWx0QWxpYXMgPz8gbnVsbDtcblxuICAgIHJlYWRvbmx5IHNlc3Npb246IEF1dGhTZXNzaW9uO1xuICAgIHJlYWRvbmx5IHVzZXI6IE9ic2VydmFibGU8YW55IHwgbnVsbD47XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoSGFuZGxlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gV2Ugc2VsZWN0IGEgc3RvcmFnZSBzdHJhdGVneSBiYXNlZCBvbiB0aGUgc2VydmVyL2Jyb3dzZXIuXG4gICAgICAgIC8vIE9ubHkgY29va2llcyBDQU4gd29yayBvbiB0aGUgc2VydmVyLlxuICAgICAgICBjb25zdCBzdG9yYWdlU3RyYXRlZ3kgPSB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJcbiAgICAgICAgICAgID8gdGhpcy5fc3RvcmFnZS5zZWxlY3QoW1N0b3JhZ2VPcHRpb24uQ29va2llLCBTdG9yYWdlT3B0aW9uLkxvY2FsXSlcbiAgICAgICAgICAgIDogdGhpcy5fc3RvcmFnZS5jb29raWU7XG5cbiAgICAgICAgLy8gU3RhcnRpbmcgdGhlIG5ldyBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24gPSBuZXcgQXV0aFNlc3Npb24oe1xuICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbmZpZz8uYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIHN0b3JhZ2U6IHN0b3JhZ2VTdHJhdGVneVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51c2VyID0gdGhpcy5zZXNzaW9uLnVzZXI7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcHAgc2hvdWxkIGJvb3RzdHJhcCB0aGUgYXV0aGVudGljYXRpb24uXG4gICAgICAgICAgICBjb25zdCBzaG91bGRCb290c3RyYXAgPSB0aGlzLl9jb25maWc/LmJvb3RzdHJhcCA/PyB0cnVlO1xuICAgICAgICAgICAgaWYgKCFzaG91bGRCb290c3RyYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPbmx5IHJldHJpZXZlIGZyb20gdGhlIHNlcnZlciB3aGVuIHdlIGFyZSBhY3R1YWxseSBhdXRoZW50aWNhdGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24uYXV0aGVudGljYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGtleSBmcm9tIHRoZSBzZXJ2ZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiYgdGhpcy5fc3RhdGU/Lmhhc0tleSh0aGlzLl9hdXRoU3RhdGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3N0YXRlPy5nZXQodGhpcy5fYXV0aFN0YXRlS2V5LCBudWxsKSA/PyBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVHJ5IHRvIGZldGNoIHRoZSB1c2VyIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICAgIGNvbnN0IHVzZXIkID0gdGhpcy5tZSgpO1xuICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHVzZXIkLCB7ZGVmYXVsdFZhbHVlOiBudWxsfSk7XG5cbiAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhdGUgaWYgZXhpc3RzLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGU/LnNldDxhbnk+KHRoaXMuX2F1dGhTdGF0ZUtleSwgdXNlciA/PyBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbiB0aGUgc3RvcmFnZSBhbmQgaGFuZGxlIGF1dG8gcmVmcmVzaGluZy5cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1lPFQgPSBhbnk+KCkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9tZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8VD4odXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW4ocHJvdmlkZXI6IEF1dGhQcm92aWRlciwgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB7YWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbiwgdXNlciwgLi4ucmVzdWx0fSA9IGF3YWl0IHByb3ZpZGVyLmF1dGhlbnRpY2F0ZSh0aGlzLl9odHRwQ2xpZW50KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcm9sZSBtYXRjaGVzLlxuICAgICAgICBjb25zdCByb2xlID0gdXNlcj8ucm9sZSA/PyBudWxsO1xuICAgICAgICBpZiAoYXMgJiYgIWFzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm9sZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGlmIHRoZSBwcm92aWRlciBpcyBvbmUgb2YgdGhlIGF2YWlsYWJsZVxuICAgICAgICAvLyBwcm92aWRlcnMgdGhlbiByZXR1cm4gdGhlIHVzZXIgb2JqZWN0IGFuZCB0aGUgcHJvdmlkZXIuXG4gICAgICAgIGNvbnN0IGFwaVByb3ZpZGVyID0gcmVzdWx0Py5wcm92aWRlciA/PyBudWxsO1xuICAgICAgICBjb25zdCBhcGlWZXJpZnlUb2tlbiA9IHJlc3VsdD8udmVyaWZ5VG9rZW4gPz8gbnVsbDtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUHJvdmlkZXJzID0gdGhpcy5fY29uZmlnPy5wcm92aWRlcnMgPz8gWydlbWFpbCcsICdzbXMnLCAndG90cCddO1xuICAgICAgICBpZiAoYXZhaWxhYmxlUHJvdmlkZXJzLmluY2x1ZGVzKGFwaVByb3ZpZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXIsIHByb3ZpZGVyOiBhcGlQcm92aWRlciwgdmVyaWZ5VG9rZW46IGFwaVZlcmlmeVRva2VufTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdXNlciBpbiBzdG9yYWdlLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHVzZXIuXG4gICAgICAgIHJldHVybiA8QXV0aFNpZ25JblJlc3BvbnNlPnt1c2VyfTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW5XaXRoRW1haWwoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dpbicpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhFbWFpbFByb3ZpZGVyKGVtYWlsLCBwYXNzd29yZCwgdXJsKSwgYXMpO1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhWZXJpZnlDb2RlKGNvZGU6IHN0cmluZywgdmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC92ZXJpZnknKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lnbkluKG5ldyBBdXRoVmVyaWZ5UHJvdmlkZXIoY29kZSwgdmVyaWZ5VG9rZW4sIHVybCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2VuZFZlcmlmeUNvZGUodmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNlbmQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHtcbiAgICAgICAgICAgIHZlcmlmeV90b2tlbjogdmVyaWZ5VG9rZW5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZ2lzdGVyPFQgPSBhbnk+KGRhdGE6IGFueSwgb3B0aW9ucz86IHtcbiAgICAgICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIHBhcmFtcz86IEh0dHBQYXJhbXMgfCB7XG4gICAgICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuICAgICAgICB9O1xuICAgIH0pIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBBUEkgY2FsbC5cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVnaXN0ZXInKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdDx7IHRva2VuOiBzdHJpbmcsIHJlZnJlc2hfdG9rZW46IHN0cmluZywgdXNlcjogYW55IH0+KHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKHJlc3VsdD8udG9rZW4sIHJlc3VsdD8ucmVmcmVzaF90b2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIGNvbnN0IHVzZXIgPSByZXN1bHQ/LnVzZXI7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxUPnVzZXI7XG4gICAgfVxuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVmcmVzaCB0b2tlbiBqdXN0IGNsZWFyIHRoZSBzZXNzaW9uLlxuICAgICAgICAvLyBOb3RlOiBXZSBkbyB0aGlzIGJlY2F1c2UgZWxzZSB3ZSB0cnkgdG8gaW52YWxpZGF0ZVxuICAgICAgICAvLyBhbiBcInVuZGVmaW5lZFwiIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW47XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBkbyBoYXZlIGEgcmVmcmVzaCB0b2tlbiwgc28gdHJ5IHRvXG4gICAgICAgIC8vIGludmFsaWRhdGUgaXQgaW4gdGhlIGJhY2tlbmQuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dvdXQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlck5hbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LmhlYWRlciA/PyAnQXV0aG9yaXphdGlvbic7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQuZ2V0KHVybCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtbaGVhZGVyTmFtZV06IHJlZnJlc2hUb2tlbn1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpLnRoZW4oXyA9PiBfKS5jYXRjaChfID0+IF8pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSB0aGUgdG9rZW5zIHdpbGwgYmUgZGVsZXRlZCBhbnl3YXlzIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHJlZnJlc2ggdG9rZW4gZG9lc1xuICAgICAgICAvLyBub3QgZXhpc3QganVzdCByZXR1cm4gYW4gb2JzZXJ2YWJsZSBvZiBudWxsLlxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnNlc3Npb24ucmVmcmVzaFRva2VuO1xuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgcmVmcmVzaCBjYWxsLlxuICAgICAgICBjb25zdCBoZWFkZXJOYW1lID0gdGhpcy5fY29uZmlnPy5odHRwPy5oZWFkZXIgPz8gJ0F1dGhvcml6YXRpb24nO1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LnNjaGVtZSA/PyAnQmVhcmVyJztcblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWZyZXNoJyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKS5zZXQoVVNFX0FVVEhPUklaQVRJT04sIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8eyB0b2tlbjogc3RyaW5nLCByZWZyZXNoX3Rva2VuOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7W2hlYWRlck5hbWVdOiBgJHtzY2hlbWV9ICR7cmVmcmVzaFRva2VufWB9LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgdGFwKCh7dG9rZW4sIHJlZnJlc2hfdG9rZW59KSA9PiB0aGlzLnNldFRva2Vucyh0b2tlbiwgcmVmcmVzaF90b2tlbikpLFxuICAgICAgICAgICAgbWFwKCh7dG9rZW59KSA9PiB0b2tlbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXF1ZXN0UGFzc3dvcmQoZW1haWw6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgZW1haWx9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldFBhc3N3b3JkKHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGV4dHJhUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVzZXQtcGFzc3dvcmQnKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLl9odHRwQ2xpZW50LnBvc3QodXJsLCB7Li4uZXh0cmFQYXJhbXMsIHRva2VuLCBwYXNzd29yZDogbmV3UGFzc3dvcmR9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBjbGVhckFuZFJlZGlyZWN0KCkge1xuICAgICAgICAvLyAxLiBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoKTtcblxuICAgICAgICBpZiAodGhpcy5faGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuX2hhbmRsZXIub25GYWlsZWRBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFRyZWUgPT09ICdib29sZWFuJyB8fCB1cmxUcmVlID09PSBudWxsIHx8IHVybFRyZWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxUcmVlKS50aGVuKF8gPT4gXyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBDb21wb3NlIHRoZSByb3V0ZSB1cmwuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5fY29uZmlnPy5yZWRpcmVjdHMudW5hdXRoZW50aWNhdGVkID8/IG51bGw7XG5cbiAgICAgICAgLy8gMy4gUm91dGUgYmFjayBpZiB0aGUgdXNlciBwcm92aWRlZCBhIHJlZGlyZWN0IHVybC5cbiAgICAgICAgaWYgKHRoaXMucm91dGVyICYmIHJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmlzQXJyYXkocmVkaXJlY3RVcmwpID8gcmVkaXJlY3RVcmwgOiBbcmVkaXJlY3RVcmxdO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpLnRoZW4oXyA9PiBfKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9rZW5zKGFjY2Vzc1Rva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIG91ciBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBhdXRvIHJlZnJlc2ggb2YgdGhlIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUF1dG9SZWZyZXNoaW5nKCkge1xuICAgICAgICBjb25zdCBzaG91bGRBdXRvUmVmcmVzaCA9IHRoaXMuX2NvbmZpZz8uYXV0b1JlZnJlc2ggPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2hvdWxkQXV0b1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW5QYXlsb2FkPy5leHBpcmVzQXQgPz8gbnVsbDtcbiAgICAgICAgaWYgKGV4cGlyZXNBdCA9PT0gbnVsbCB8fCAhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgPSBleHBpcmVzQXQuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0SW5NaWxsaXNlY29uZHMgPSAxMF8wMDA7IC8vIDEwIHNlY29uZHMuXG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byBzdGFydCB0aGUgcmVmcmVzaCAxMCBzZWNvbmRzIGJlZm9yZSBpdCBleHBpcmVzLlxuICAgICAgICBjb25zdCBhY3R1YWxUaW1pbmcgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgLSBvZmZzZXRJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgaWYgKGFjdHVhbFRpbWluZyA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhcCB0aGUgdGltaW5ncyBiZWNhdXNlIGlmXG4gICAgICAgIC8vIHdlIGdldCBsYXJnZSBudW1iZXJzIGl0IG1pZ2h0IGNhdXNlIHVud2FudGVkIHJlc3VsdHMuXG4gICAgICAgIGNvbnN0IG1heFRpbWluZyA9IDEwMDAgKiA2MCAqIDYwICogMjQ7IC8vIDI0IGhvdXJzLlxuICAgICAgICBjb25zdCBjYXBwZWRUaW1pbmcgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihhY3R1YWxUaW1pbmcsIG1heFRpbWluZykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZnJlc2hIYW5kbGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0Py4odGhpcy5fcmVmcmVzaEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gd2luZG93Py5zZXRUaW1lb3V0Py4oKCkgPT4gdGhpcy5hdXRvUmVmcmVzaCgpLCBjYXBwZWRUaW1pbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0LlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvUmVmcmVzaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciBpdCB0byByZWZyZXNoLlxuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCQgPSB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlZnJlc2gkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyByZWZyZXNoaW5nLCB3ZSBuZWVkIHRvIGNsZWFyLlxuICAgICAgICAgICAgdGhpcy5jbGVhckFuZFJlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybChlbmRwb2ludDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5faHR0cEFsaWFzLCBlbmRwb2ludF1cbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgIH1cblxufVxuIl19
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { JwtHelper } from './helpers/jwt.helper';
|
|
2
|
-
import { shareReplay } from 'rxjs/operators';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
export class AuthSession {
|
|
5
|
-
// Readonly data.
|
|
6
|
-
_jwt = new JwtHelper();
|
|
7
|
-
_storage;
|
|
8
|
-
_accessTokenStorageKey;
|
|
9
|
-
_refreshTokenStorageKey;
|
|
10
|
-
_userStorageKey;
|
|
11
|
-
// Token strings.
|
|
12
|
-
_accessTokenString = null;
|
|
13
|
-
_refreshTokenString = null;
|
|
14
|
-
// Token payloads.
|
|
15
|
-
_accessTokenPayload = null;
|
|
16
|
-
_refreshTokenPayload = null;
|
|
17
|
-
// Private user data.
|
|
18
|
-
_user$ = new BehaviorSubject(null);
|
|
19
|
-
// Public user data.
|
|
20
|
-
user = this._user$.pipe(shareReplay({ refCount: true, bufferSize: 1 }));
|
|
21
|
-
constructor(options) {
|
|
22
|
-
const applicationId = options?.id ?? 'ng';
|
|
23
|
-
// Setting up the readonly storage keys.
|
|
24
|
-
this._accessTokenStorageKey = this.generateKey(applicationId, 'au_act');
|
|
25
|
-
this._refreshTokenStorageKey = this.generateKey(applicationId, 'au_rft');
|
|
26
|
-
this._userStorageKey = this.generateKey(applicationId, 'au_usr');
|
|
27
|
-
// Setting up the storage.
|
|
28
|
-
this._storage = options?.storage ?? null;
|
|
29
|
-
// Init methods.
|
|
30
|
-
this.restoreFromStorage();
|
|
31
|
-
}
|
|
32
|
-
get snapshot() {
|
|
33
|
-
return {
|
|
34
|
-
user: this._user$.getValue(),
|
|
35
|
-
accessToken: this.accessToken,
|
|
36
|
-
refreshToken: this.refreshToken
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
get accessToken() {
|
|
40
|
-
return this.isTokenValid(this._accessTokenPayload)
|
|
41
|
-
? this._accessTokenString
|
|
42
|
-
: null;
|
|
43
|
-
}
|
|
44
|
-
get refreshToken() {
|
|
45
|
-
return this.isTokenValid(this.refreshTokenPayload)
|
|
46
|
-
? this._refreshTokenString
|
|
47
|
-
: null;
|
|
48
|
-
}
|
|
49
|
-
get accessTokenPayload() {
|
|
50
|
-
return this._accessTokenPayload ?? null;
|
|
51
|
-
}
|
|
52
|
-
get refreshTokenPayload() {
|
|
53
|
-
return this._refreshTokenPayload ?? null;
|
|
54
|
-
}
|
|
55
|
-
authenticated() {
|
|
56
|
-
return this.isTokenValid(this._accessTokenPayload) || this.isTokenValid(this._refreshTokenPayload);
|
|
57
|
-
}
|
|
58
|
-
setTokens(accessToken, refreshToken) {
|
|
59
|
-
this.setAccessToken(accessToken);
|
|
60
|
-
this.setRefreshToken(refreshToken);
|
|
61
|
-
this.syncTokensInStorage();
|
|
62
|
-
}
|
|
63
|
-
setUser(user) {
|
|
64
|
-
this._user$.next(user ?? null);
|
|
65
|
-
this.syncUserInStorage();
|
|
66
|
-
}
|
|
67
|
-
clear() {
|
|
68
|
-
this.setTokens(null, null);
|
|
69
|
-
this.setUser(null);
|
|
70
|
-
}
|
|
71
|
-
restoreFromStorage() {
|
|
72
|
-
if (!this._storage) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
// Set the access token.
|
|
76
|
-
const accessToken = this._storage.get(this._accessTokenStorageKey);
|
|
77
|
-
this.setAccessToken(accessToken);
|
|
78
|
-
// Set the refresh token.
|
|
79
|
-
const refreshToken = this._storage.get(this._refreshTokenStorageKey);
|
|
80
|
-
this.setRefreshToken(refreshToken);
|
|
81
|
-
// Set the user if we have any correct token payloads.
|
|
82
|
-
if (this._accessTokenPayload || this._refreshTokenPayload) {
|
|
83
|
-
const user = this._storage.get(this._userStorageKey);
|
|
84
|
-
this._user$.next(user ?? null); // Note: just settings here instead of setUser() because of syncing to the storage.
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
syncTokensInStorage() {
|
|
88
|
-
if (!this._storage) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
// Set the access token if completely valid.
|
|
92
|
-
if (!!this.accessToken) {
|
|
93
|
-
this._storage.set(this._accessTokenStorageKey, this._accessTokenString, {
|
|
94
|
-
expires: this._accessTokenPayload?.expiresAt
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
this._storage.remove(this._accessTokenStorageKey);
|
|
99
|
-
}
|
|
100
|
-
// Set the refresh token if completely valid.
|
|
101
|
-
if (!!this.refreshToken) {
|
|
102
|
-
this._storage.set(this._refreshTokenStorageKey, this._refreshTokenString, {
|
|
103
|
-
expires: this._refreshTokenPayload?.expiresAt
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
this._storage.remove(this._refreshTokenStorageKey);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
syncUserInStorage() {
|
|
111
|
-
if (!this._storage) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const user = this._user$.getValue();
|
|
115
|
-
if (!user) {
|
|
116
|
-
return this._storage.remove(this._userStorageKey);
|
|
117
|
-
}
|
|
118
|
-
const date = new Date();
|
|
119
|
-
date.setFullYear(date.getFullYear() + 1);
|
|
120
|
-
this._storage.set(this._userStorageKey, user, {
|
|
121
|
-
expires: new Date(date.getTime())
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
setAccessToken(value) {
|
|
125
|
-
this._accessTokenString = value ?? null;
|
|
126
|
-
this._accessTokenPayload = this._jwt.decode(this._accessTokenString);
|
|
127
|
-
}
|
|
128
|
-
setRefreshToken(value) {
|
|
129
|
-
this._refreshTokenString = value ?? null;
|
|
130
|
-
this._refreshTokenPayload = this._jwt.decode(this._refreshTokenString);
|
|
131
|
-
}
|
|
132
|
-
generateKey = (applicationId, key) => {
|
|
133
|
-
return [applicationId, key].join('_');
|
|
134
|
-
};
|
|
135
|
-
isTokenValid = (token) => {
|
|
136
|
-
if (!token) {
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
return token?.expiresAt?.getTime() > Date.now();
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVyQyxNQUFNLE9BQU8sV0FBVztJQUVwQixpQkFBaUI7SUFDQSxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUN2QixRQUFRLENBQXlCO0lBQ2pDLHNCQUFzQixDQUFTO0lBQy9CLHVCQUF1QixDQUFTO0lBQ2hDLGVBQWUsQ0FBUztJQUV6QyxpQkFBaUI7SUFDVCxrQkFBa0IsR0FBa0IsSUFBSSxDQUFDO0lBQ3pDLG1CQUFtQixHQUFrQixJQUFJLENBQUM7SUFFbEQsa0JBQWtCO0lBQ1YsbUJBQW1CLEdBQXFCLElBQUksQ0FBQztJQUM3QyxvQkFBb0IsR0FBcUIsSUFBSSxDQUFDO0lBRXRELHFCQUFxQjtJQUNiLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBYSxJQUFJLENBQUMsQ0FBQztJQUV2RCxvQkFBb0I7SUFDcEIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuQixXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUMvQyxDQUFDO0lBRUYsWUFBWSxPQUFvRDtRQUM1RCxNQUFNLGFBQWEsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztRQUUxQyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxD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SSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0NBRUwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0b3JhZ2VTdHJhdGVneX0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vc3RvcmFnZSc7XG5pbXBvcnQge0F1dGhUb2tlbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3Rva2VuLmludGVyZmFjZSc7XG5pbXBvcnQge0p3dEhlbHBlcn0gZnJvbSAnLi9oZWxwZXJzL2p3dC5oZWxwZXInO1xuaW1wb3J0IHtzaGFyZVJlcGxheX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgQXV0aFNlc3Npb24ge1xuXG4gICAgLy8gUmVhZG9ubHkgZGF0YS5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9qd3QgPSBuZXcgSnd0SGVscGVyKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3RvcmFnZTogU3RvcmFnZVN0cmF0ZWd5IHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9hY2Nlc3NUb2tlblN0b3JhZ2VLZXk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoVG9rZW5TdG9yYWdlS2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdXNlclN0b3JhZ2VLZXk6IHN0cmluZztcblxuICAgIC8vIFRva2VuIHN0cmluZ3MuXG4gICAgcHJpdmF0ZSBfYWNjZXNzVG9rZW5TdHJpbmc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3JlZnJlc2hUb2tlblN0cmluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBUb2tlbiBwYXlsb2Fkcy5cbiAgICBwcml2YXRlIF9hY2Nlc3NUb2tlblBheWxvYWQ6IEF1dGhUb2tlbiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX3JlZnJlc2hUb2tlblBheWxvYWQ6IEF1dGhUb2tlbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gUHJpdmF0ZSB1c2VyIGRhdGEuXG4gICAgcHJpdmF0ZSBfdXNlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueSB8IG51bGw+KG51bGwpO1xuXG4gICAgLy8gUHVibGljIHVzZXIgZGF0YS5cbiAgICB1c2VyID0gdGhpcy5fdXNlciQucGlwZShcbiAgICAgICAgc2hhcmVSZXBsYXkoe3JlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxfSlcbiAgICApO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IHsgaWQ/OiBzdHJpbmcsIHN0b3JhZ2U/OiBTdG9yYWdlU3RyYXRlZ3kgfSkge1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucz8uaWQgPz8gJ25nJztcblxuICAgICAgICAvLyBTZXR0aW5nIHVwIHRoZSByZWFkb25seSBzdG9yYWdlIGtleXMuXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuU3RvcmFnZUtleSA9IHRoaXMuZ2VuZXJhdGVLZXkoYXBwbGljYXRpb25JZCwgJ2F1X2FjdCcpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoVG9rZW5TdG9yYWdlS2V5ID0gdGhpcy5nZW5lcmF0ZUtleShhcHBsaWNhdGlvbklkLCAnYXVfcmZ0Jyk7XG4gICAgICAgIHRoaXMuX3VzZXJTdG9yYWdlS2V5ID0gdGhpcy5nZW5lcmF0ZUtleShhcHBsaWNhdGlvbklkLCAnYXVfdXNyJyk7XG5cbiAgICAgICAgLy8gU2V0dGluZyB1cCB0aGUgc3RvcmFnZS5cbiAgICAgICAgdGhpcy5fc3RvcmFnZSA9IG9wdGlvbnM/LnN0b3JhZ2UgPz8gbnVsbDtcblxuICAgICAgICAvLyBJbml0IG1ldGhvZHMuXG4gICAgICAgIHRoaXMucmVzdG9yZUZyb21TdG9yYWdlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNuYXBzaG90KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXNlcjogdGhpcy5fdXNlciQuZ2V0VmFsdWUoKSxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0aGlzLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuOiB0aGlzLnJlZnJlc2hUb2tlblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldCBhY2Nlc3NUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUb2tlblZhbGlkKHRoaXMuX2FjY2Vzc1Rva2VuUGF5bG9hZClcbiAgICAgICAgICAgID8gdGhpcy5fYWNjZXNzVG9rZW5TdHJpbmdcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgcmVmcmVzaFRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1Rva2VuVmFsaWQodGhpcy5yZWZyZXNoVG9rZW5QYXlsb2FkKVxuICAgICAgICAgICAgPyB0aGlzLl9yZWZyZXNoVG9rZW5TdHJpbmdcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgYWNjZXNzVG9rZW5QYXlsb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWNjZXNzVG9rZW5QYXlsb2FkID8/IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IHJlZnJlc2hUb2tlblBheWxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZyZXNoVG9rZW5QYXlsb2FkID8/IG51bGw7XG4gICAgfVxuXG4gICAgYXV0aGVudGljYXRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUb2tlblZhbGlkKHRoaXMuX2FjY2Vzc1Rva2VuUGF5bG9hZCkgfHwgdGhpcy5pc1Rva2VuVmFsaWQodGhpcy5fcmVmcmVzaFRva2VuUGF5bG9hZCk7XG4gICAgfVxuXG4gICAgc2V0VG9rZW5zKGFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsLCByZWZyZXNoVG9rZW46IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZXRBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbik7XG4gICAgICAgIHRoaXMuc2V0UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbik7XG4gICAgICAgIHRoaXMuc3luY1Rva2Vuc0luU3RvcmFnZSgpO1xuICAgIH1cblxuICAgIHNldFVzZXIodXNlcjogdW5rbm93bikge1xuICAgICAgICB0aGlzLl91c2VyJC5uZXh0KHVzZXIgPz8gbnVsbCk7XG4gICAgICAgIHRoaXMuc3luY1VzZXJJblN0b3JhZ2UoKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5zZXRUb2tlbnMobnVsbCwgbnVsbCk7XG4gICAgICAgIHRoaXMuc2V0VXNlcihudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RvcmVGcm9tU3RvcmFnZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIGFjY2VzcyB0b2tlbi5cbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLl9zdG9yYWdlLmdldDxzdHJpbmc+KHRoaXMuX2FjY2Vzc1Rva2VuU3RvcmFnZUtleSk7XG4gICAgICAgIHRoaXMuc2V0QWNjZXNzVG9rZW4oYWNjZXNzVG9rZW4pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy5fc3RvcmFnZS5nZXQ8c3RyaW5nPih0aGlzLl9yZWZyZXNoVG9rZW5TdG9yYWdlS2V5KTtcbiAgICAgICAgdGhpcy5zZXRSZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuKTtcblxuICAgICAgICAvLyBTZXQgdGhlIHVzZXIgaWYgd2UgaGF2ZSBhbnkgY29ycmVjdCB0b2tlbiBwYXlsb2Fkcy5cbiAgICAgICAgaWYgKHRoaXMuX2FjY2Vzc1Rva2VuUGF5bG9hZCB8fCB0aGlzLl9yZWZyZXNoVG9rZW5QYXlsb2FkKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fc3RvcmFnZS5nZXQ8dW5rbm93bj4odGhpcy5fdXNlclN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgdGhpcy5fdXNlciQubmV4dCh1c2VyID8/IG51bGwpOyAvLyBOb3RlOiBqdXN0IHNldHRpbmdzIGhlcmUgaW5zdGVhZCBvZiBzZXRVc2VyKCkgYmVjYXVzZSBvZiBzeW5jaW5nIHRvIHRoZSBzdG9yYWdlLlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jVG9rZW5zSW5TdG9yYWdlKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3N0b3JhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgYWNjZXNzIHRva2VuIGlmIGNvbXBsZXRlbHkgdmFsaWQuXG4gICAgICAgIGlmICghIXRoaXMuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2Uuc2V0PHN0cmluZz4odGhpcy5fYWNjZXNzVG9rZW5TdG9yYWdlS2V5LCB0aGlzLl9hY2Nlc3NUb2tlblN0cmluZywge1xuICAgICAgICAgICAgICAgIGV4cGlyZXM6IHRoaXMuX2FjY2Vzc1Rva2VuUGF5bG9hZD8uZXhwaXJlc0F0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2UucmVtb3ZlKHRoaXMuX2FjY2Vzc1Rva2VuU3RvcmFnZUtleSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIHJlZnJlc2ggdG9rZW4gaWYgY29tcGxldGVseSB2YWxpZC5cbiAgICAgICAgaWYgKCEhdGhpcy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2Uuc2V0PHN0cmluZz4odGhpcy5fcmVmcmVzaFRva2VuU3RvcmFnZUtleSwgdGhpcy5fcmVmcmVzaFRva2VuU3RyaW5nLCB7XG4gICAgICAgICAgICAgICAgZXhwaXJlczogdGhpcy5fcmVmcmVzaFRva2VuUGF5bG9hZD8uZXhwaXJlc0F0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2UucmVtb3ZlKHRoaXMuX3JlZnJlc2hUb2tlblN0b3JhZ2VLZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jVXNlckluU3RvcmFnZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlciQuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5yZW1vdmUodGhpcy5fdXNlclN0b3JhZ2VLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgMSk7XG4gICAgICAgIHRoaXMuX3N0b3JhZ2Uuc2V0PHVua25vd24+KHRoaXMuX3VzZXJTdG9yYWdlS2V5LCB1c2VyLCB7XG4gICAgICAgICAgICBleHBpcmVzOiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRBY2Nlc3NUb2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlblN0cmluZyA9IHZhbHVlID8/IG51bGw7XG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuUGF5bG9hZCA9IHRoaXMuX2p3dC5kZWNvZGUodGhpcy5fYWNjZXNzVG9rZW5TdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UmVmcmVzaFRva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblN0cmluZyA9IHZhbHVlID8/IG51bGw7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblBheWxvYWQgPSB0aGlzLl9qd3QuZGVjb2RlKHRoaXMuX3JlZnJlc2hUb2tlblN0cmluZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUtleSA9IChhcHBsaWNhdGlvbklkOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBbYXBwbGljYXRpb25JZCwga2V5XS5qb2luKCdfJyk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaXNUb2tlblZhbGlkID0gKHRva2VuOiBBdXRoVG9rZW4pID0+IHtcbiAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRva2VuPy5leHBpcmVzQXQ/LmdldFRpbWUoKSA+IERhdGUubm93KCk7XG4gICAgfTtcblxufVxuIl19
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
3
|
-
import { Subscription } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../auth.service";
|
|
6
|
-
export class BbAuthenticated {
|
|
7
|
-
_auth;
|
|
8
|
-
_templateRef;
|
|
9
|
-
_viewContainerRef;
|
|
10
|
-
// Data.
|
|
11
|
-
_valid = false;
|
|
12
|
-
// Templates.
|
|
13
|
-
_elseTemplateRef = null;
|
|
14
|
-
// View refs.
|
|
15
|
-
_thenViewRef = null;
|
|
16
|
-
_elseViewRef = null;
|
|
17
|
-
// Subscriptions.
|
|
18
|
-
_subscription = new Subscription();
|
|
19
|
-
set bbAuthenticatedElse(templateRef) {
|
|
20
|
-
this.assertTemplate('bbAuthenticatedElse', templateRef);
|
|
21
|
-
this._elseTemplateRef = templateRef;
|
|
22
|
-
this.updateView();
|
|
23
|
-
}
|
|
24
|
-
constructor(_auth, _templateRef, _viewContainerRef) {
|
|
25
|
-
this._auth = _auth;
|
|
26
|
-
this._templateRef = _templateRef;
|
|
27
|
-
this._viewContainerRef = _viewContainerRef;
|
|
28
|
-
}
|
|
29
|
-
ngOnInit() {
|
|
30
|
-
const subscription = this._auth.user.pipe(map(user => !!user), distinctUntilChanged()).subscribe(valid => {
|
|
31
|
-
this._valid = valid;
|
|
32
|
-
this.updateView();
|
|
33
|
-
});
|
|
34
|
-
this._subscription.add(subscription);
|
|
35
|
-
}
|
|
36
|
-
ngOnDestroy() {
|
|
37
|
-
this._subscription?.unsubscribe();
|
|
38
|
-
}
|
|
39
|
-
updateView() {
|
|
40
|
-
if (this._valid) {
|
|
41
|
-
if (!this._thenViewRef) {
|
|
42
|
-
this._viewContainerRef.clear();
|
|
43
|
-
this._elseViewRef = null;
|
|
44
|
-
if (this._templateRef) {
|
|
45
|
-
this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
if (!this._elseViewRef) {
|
|
51
|
-
this._viewContainerRef.clear();
|
|
52
|
-
this._thenViewRef = null;
|
|
53
|
-
if (this._elseTemplateRef) {
|
|
54
|
-
this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
assertTemplate(property, templateRef) {
|
|
60
|
-
const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
|
|
61
|
-
if (!isTemplateRefOrNull) {
|
|
62
|
-
throw new Error(`${property} must be a TemplateRef.`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
static ngAcceptInputType_bbAuthenticatedElse;
|
|
66
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BbAuthenticated, deps: [{ token: i1.Auth }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
67
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: BbAuthenticated, isStandalone: true, selector: "[bbAuthenticated]", inputs: { bbAuthenticatedElse: "bbAuthenticatedElse" }, ngImport: i0 });
|
|
68
|
-
}
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BbAuthenticated, decorators: [{
|
|
70
|
-
type: Directive,
|
|
71
|
-
args: [{
|
|
72
|
-
selector: '[bbAuthenticated]',
|
|
73
|
-
standalone: true
|
|
74
|
-
}]
|
|
75
|
-
}], ctorParameters: () => [{ type: i1.Auth }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }], propDecorators: { bbAuthenticatedElse: [{
|
|
76
|
-
type: Input
|
|
77
|
-
}] } });
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dGhlbnRpY2F0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQW1CLEtBQUssRUFBbUQsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7OztBQU1sQyxNQUFNLE9BQU8sZUFBZTtJQXNCSjtJQUNBO0lBQ0E7SUF0QnBCLFFBQVE7SUFDQSxNQUFNLEdBQVksS0FBSyxDQUFDO0lBRWhDLGFBQWE7SUFDTCxnQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO0lBRXpELGFBQWE7SUFDTCxZQUFZLEdBQWdDLElBQUksQ0FBQztJQUNqRCxZQUFZLEdBQWdDLElBQUksQ0FBQztJQUV6RCxpQkFBaUI7SUFDVCxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUzQyxJQUNJLG1CQUFtQixDQUFDLFdBQTZCO1FBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQW9CLEtBQVcsRUFDWCxZQUE4QixFQUM5QixpQkFBbUM7UUFGbkMsVUFBSyxHQUFMLEtBQUssQ0FBTTtRQUNYLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO0lBQ3ZELENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ25CLG9CQUFvQixFQUFFLENBQ3pCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU8sVUFBVTtRQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDckYsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN6RixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQWdCLEVBQUUsV0FBb0M7UUFDekUsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLHFDQUFxQyxDQUFtQjt3R0FyRXRELGVBQWU7NEZBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFKM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7a0lBaUJPLG1CQUFtQjtzQkFEdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbWJlZGRlZFZpZXdSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0F1dGh9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2JiQXV0aGVudGljYXRlZF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQmJBdXRoZW50aWNhdGVkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLy8gRGF0YS5cbiAgICBwcml2YXRlIF92YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gVGVtcGxhdGVzLlxuICAgIHByaXZhdGUgX2Vsc2VUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gVmlldyByZWZzLlxuICAgIHByaXZhdGUgX3RoZW5WaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2Vsc2VWaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gU3Vic2NyaXB0aW9ucy5cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBiYkF1dGhlbnRpY2F0ZWRFbHNlKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0VGVtcGxhdGUoJ2JiQXV0aGVudGljYXRlZEVsc2UnLCB0ZW1wbGF0ZVJlZik7XG4gICAgICAgIHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoOiBBdXRoLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fYXV0aC51c2VyLnBpcGUoXG4gICAgICAgICAgICBtYXAodXNlciA9PiAhIXVzZXIpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApLnN1YnNjcmliZSh2YWxpZCA9PiB7XG4gICAgICAgICAgICB0aGlzLl92YWxpZCA9IHZhbGlkO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZpZXcoKSB7XG4gICAgICAgIGlmICh0aGlzLl92YWxpZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl90aGVuVmlld1JlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbHNlVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RoZW5WaWV3UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZWxzZVZpZXdSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGhlblZpZXdSZWYgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxzZVZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXNzZXJ0VGVtcGxhdGUocHJvcGVydHk6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGlzVGVtcGxhdGVSZWZPck51bGwgPSAhISghdGVtcGxhdGVSZWYgfHwgdGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KTtcbiAgICAgICAgaWYgKCFpc1RlbXBsYXRlUmVmT3JOdWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvcGVydHl9IG11c3QgYmUgYSBUZW1wbGF0ZVJlZi5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9iYkF1dGhlbnRpY2F0ZWRFbHNlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG59XG4iXX0=
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Router } from '@angular/router';
|
|
2
|
-
import { AUTH_CONFIG, AUTH_REDIRECT_HANDLER } from '../interfaces/config.interface';
|
|
3
|
-
import { inject } from '@angular/core';
|
|
4
|
-
import { Auth } from '../auth.service';
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
6
|
-
import { first } from 'rxjs';
|
|
7
|
-
export const bbAnonymousGuard = (route, state) => {
|
|
8
|
-
const auth = inject(Auth);
|
|
9
|
-
const router = inject(Router);
|
|
10
|
-
const config = inject(AUTH_CONFIG, { optional: true });
|
|
11
|
-
const redirectHandler = inject(AUTH_REDIRECT_HANDLER, { optional: true });
|
|
12
|
-
return auth.user.pipe(map(user => !!user), map(authenticated => {
|
|
13
|
-
if (!authenticated) {
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
if (redirectHandler) {
|
|
17
|
-
return redirectHandler.onFailedAnonymous(route, state);
|
|
18
|
-
}
|
|
19
|
-
// If we don't have a URL to go to we can just say
|
|
20
|
-
// the user is not allowed in this route by returning false.
|
|
21
|
-
const nextUrl = config?.redirects?.authenticated ?? null;
|
|
22
|
-
if (!nextUrl) {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
const commands = Array.isArray(nextUrl) ? nextUrl : [nextUrl];
|
|
26
|
-
return router.createUrlTree(commands);
|
|
27
|
-
}), first());
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5vbnltb3VzLmd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvZ3VhcmRzL2Fub255bW91cy5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXdDLE1BQU0sRUFBc0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRyxPQUFPLEVBQUMsV0FBVyxFQUFFLHFCQUFxQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEYsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFM0IsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWtCLENBQUMsS0FBNkIsRUFBRSxLQUEwQixFQUFFLEVBQUU7SUFDekcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFeEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDakIsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUNuQixHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sZUFBZSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsa0RBQWtEO1FBQ2xELDREQUE0RDtRQUM1RCxNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ1YsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGVGbiwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBVVRIX0NPTkZJRywgQVVUSF9SRURJUkVDVF9IQU5ETEVSfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBdXRofSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Zmlyc3R9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY29uc3QgYmJBbm9ueW1vdXNHdWFyZDogQ2FuQWN0aXZhdGVGbiA9IChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpID0+IHtcbiAgICBjb25zdCBhdXRoID0gaW5qZWN0KEF1dGgpO1xuICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdChBVVRIX0NPTkZJRywge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgY29uc3QgcmVkaXJlY3RIYW5kbGVyID0gaW5qZWN0KEFVVEhfUkVESVJFQ1RfSEFORExFUiwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICByZXR1cm4gYXV0aC51c2VyLnBpcGUoXG4gICAgICAgIG1hcCh1c2VyID0+ICEhdXNlciksXG4gICAgICAgIG1hcChhdXRoZW50aWNhdGVkID0+IHtcbiAgICAgICAgICAgIGlmICghYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVkaXJlY3RIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0SGFuZGxlci5vbkZhaWxlZEFub255bW91cyhyb3V0ZSwgc3RhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgVVJMIHRvIGdvIHRvIHdlIGNhbiBqdXN0IHNheVxuICAgICAgICAgICAgLy8gdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByb3V0ZSBieSByZXR1cm5pbmcgZmFsc2UuXG4gICAgICAgICAgICBjb25zdCBuZXh0VXJsID0gY29uZmlnPy5yZWRpcmVjdHM/LmF1dGhlbnRpY2F0ZWQgPz8gbnVsbDtcbiAgICAgICAgICAgIGlmICghbmV4dFVybCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29tbWFuZHMgPSBBcnJheS5pc0FycmF5KG5leHRVcmwpID8gbmV4dFVybCA6IFtuZXh0VXJsXTtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZXIuY3JlYXRlVXJsVHJlZShjb21tYW5kcyk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaXJzdCgpXG4gICAgKTtcbn07XG4iXX0=
|