@inobeta/ui 18.0.1-build.1722007687
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/README.md +1 -0
- package/_index.scss +1 -0
- package/esm2022/inobeta-ui.mjs +5 -0
- package/esm2022/public_api.mjs +17 -0
- package/esm2022/src/app/inobeta-ui/core/filter.pipe.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/core/index.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/http/auth/guard.service.mjs +157 -0
- package/esm2022/src/app/inobeta-ui/http/auth/login.service.mjs +137 -0
- package/esm2022/src/app/inobeta-ui/http/auth/login.service.stub.spec.mjs +20 -0
- package/esm2022/src/app/inobeta-ui/http/auth/session.model.mjs +16 -0
- package/esm2022/src/app/inobeta-ui/http/http/auth.interceptor.mjs +79 -0
- package/esm2022/src/app/inobeta-ui/http/http/error.interceptor.mjs +76 -0
- package/esm2022/src/app/inobeta-ui/http/http/loader.interceptor.mjs +45 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton-container.component.mjs +36 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.component.mjs +34 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.mjs +66 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.mjs +22 -0
- package/esm2022/src/app/inobeta-ui/http/http/messages.decorator.mjs +42 -0
- package/esm2022/src/app/inobeta-ui/http/http/role-check.directive.mjs +45 -0
- package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.component.mjs +28 -0
- package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.mjs +15 -0
- package/esm2022/src/app/inobeta-ui/http/http-test.module.mjs +35 -0
- package/esm2022/src/app/inobeta-ui/http/http.module.mjs +178 -0
- package/esm2022/src/app/inobeta-ui/http/index.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/http/store/index.mjs +11 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/actions.mjs +7 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/interfaces.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/reducers.mjs +35 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/selectors.mjs +9 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/actions.mjs +17 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/effects.mjs +50 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/interfaces.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/reducers.mjs +12 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/selectors.mjs +22 -0
- package/esm2022/src/app/inobeta-ui/http/translations.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/hydration/actions.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/hydration/effects.mjs +45 -0
- package/esm2022/src/app/inobeta-ui/hydration/index.mjs +21 -0
- package/esm2022/src/app/inobeta-ui/hydration/reducer.mjs +36 -0
- package/esm2022/src/app/inobeta-ui/storage/index.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/storage/storage-test.module.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/storage/storage.module.mjs +22 -0
- package/esm2022/src/app/inobeta-ui/storage/storage.service.mjs +105 -0
- package/esm2022/src/app/inobeta-ui/storage/storage.stub.spec.mjs +8 -0
- package/esm2022/src/app/inobeta-ui/translate/index.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/translate/translate-loader.service.mjs +37 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.mjs +63 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.mjs +44 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/index.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.mjs +16 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.module.mjs +92 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.service.mjs +83 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.mjs +42 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.mjs +66 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/index.mjs +10 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/provider.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.mjs +113 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export.component.mjs +58 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/transformer.mjs +68 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/array/array.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/checkbox.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/dropdown.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/form-control-base.mjs +80 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/radio.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/textbox.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.mjs +118 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.mjs +46 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.mjs +28 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/form-control.service.mjs +57 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/forms.module.mjs +36 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/forms.pipes.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/forms.types.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/index.mjs +12 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.mjs +14 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.mjs +31 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.component.mjs +149 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.types.mjs +30 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.mjs +83 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.mjs +284 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.mjs +111 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.mjs +99 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.mjs +106 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.mjs +98 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.mjs +109 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.module.mjs +175 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/index.mjs +14 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/tokens.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/translations.mjs +51 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/action.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/cells.mjs +212 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/action-column.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/column.mjs +260 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/date-column.mjs +93 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/index.mjs +7 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/number-column.mjs +112 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/selection-column.mjs +149 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/text-column.mjs +90 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/index.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/paginator-intl.mjs +53 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/remote-data-source.mjs +73 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/rowgroup.mjs +17 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/sort-header.mjs +37 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/const.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/index.mjs +9 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.mjs +47 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.mjs +56 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.mjs +19 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table-data-source.mjs +450 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table-url.service.mjs +129 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table.component.mjs +260 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table.module.mjs +150 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table.types.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/tokens.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/translations.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.mjs +120 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.mjs +38 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.mjs +139 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/index.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.mjs +24 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu.module.mjs +63 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.mjs +108 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/button.mjs +80 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/checkbox.mjs +54 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/datepicker.mjs +96 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/dropdown.mjs +149 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/label.mjs +50 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/padding.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/radio.mjs +61 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.mjs +62 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textarea.mjs +63 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textbox.mjs +205 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/index.mjs +18 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.mjs +73 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.mjs +65 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.mjs +18 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.mjs +64 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-test.module.mjs +32 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form.module.mjs +168 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/translations.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/index.mjs +7 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.component.mjs +76 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.mjs +64 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.mjs +15 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-test.module.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal.module.mjs +46 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/translations.mjs +10 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/index.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast-test.module.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast.module.mjs +21 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.mjs +54 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/ui/uploader/index.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.component.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.module.mjs +42 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.mjs +20 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/index.mjs +6 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.mjs +37 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.mjs +186 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.mjs +110 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.mjs +43 -0
- package/esm2022/src/app/inobeta-ui/ui/views/index.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/actions.mjs +11 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/index.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/reducer.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/index.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/reducer.mjs +19 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/selectors.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/table-view.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/views/translations.mjs +34 -0
- package/esm2022/src/app/inobeta-ui/ui/views/view.module.mjs +98 -0
- package/esm2022/src/app/inobeta-ui/ui/views/view.service.mjs +137 -0
- package/fesm2022/inobeta-ui.mjs +8610 -0
- package/fesm2022/inobeta-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +55 -0
- package/public_api.d.ts +16 -0
- package/src/app/inobeta-ui/core/filter.pipe.d.ts +7 -0
- package/src/app/inobeta-ui/core/index.d.ts +1 -0
- package/src/app/inobeta-ui/http/auth/guard.service.d.ts +96 -0
- package/src/app/inobeta-ui/http/auth/login.service.d.ts +63 -0
- package/src/app/inobeta-ui/http/auth/login.service.stub.spec.d.ts +9 -0
- package/src/app/inobeta-ui/http/auth/session.model.d.ts +18 -0
- package/src/app/inobeta-ui/http/http/auth.interceptor.d.ts +21 -0
- package/src/app/inobeta-ui/http/http/error.interceptor.d.ts +18 -0
- package/src/app/inobeta-ui/http/http/loader.interceptor.d.ts +17 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton-container.component.d.ts +13 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton.component.d.ts +12 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton.directive.d.ts +27 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.d.ts +13 -0
- package/src/app/inobeta-ui/http/http/messages.decorator.d.ts +18 -0
- package/src/app/inobeta-ui/http/http/role-check.directive.d.ts +17 -0
- package/src/app/inobeta-ui/http/http/spinner-loading.component.d.ts +9 -0
- package/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.d.ts +5 -0
- package/src/app/inobeta-ui/http/http-test.module.d.ts +8 -0
- package/src/app/inobeta-ui/http/http.module.d.ts +20 -0
- package/src/app/inobeta-ui/http/index.d.ts +23 -0
- package/src/app/inobeta-ui/http/store/index.d.ts +10 -0
- package/src/app/inobeta-ui/http/store/loader/actions.d.ts +17 -0
- package/src/app/inobeta-ui/http/store/loader/interfaces.d.ts +8 -0
- package/src/app/inobeta-ui/http/store/loader/reducers.d.ts +3 -0
- package/src/app/inobeta-ui/http/store/loader/selectors.d.ts +5 -0
- package/src/app/inobeta-ui/http/store/session/actions.d.ts +20 -0
- package/src/app/inobeta-ui/http/store/session/effects.d.ts +16 -0
- package/src/app/inobeta-ui/http/store/session/interfaces.d.ts +4 -0
- package/src/app/inobeta-ui/http/store/session/reducers.d.ts +3 -0
- package/src/app/inobeta-ui/http/store/session/selectors.d.ts +4 -0
- package/src/app/inobeta-ui/http/translations.d.ts +12 -0
- package/src/app/inobeta-ui/hydration/actions.d.ts +1 -0
- package/src/app/inobeta-ui/hydration/effects.d.ts +13 -0
- package/src/app/inobeta-ui/hydration/index.d.ts +13 -0
- package/src/app/inobeta-ui/hydration/reducer.d.ts +2 -0
- package/src/app/inobeta-ui/storage/index.d.ts +3 -0
- package/src/app/inobeta-ui/storage/storage-test.module.d.ts +6 -0
- package/src/app/inobeta-ui/storage/storage.module.d.ts +6 -0
- package/src/app/inobeta-ui/storage/storage.service.d.ts +62 -0
- package/src/app/inobeta-ui/storage/storage.stub.spec.d.ts +5 -0
- package/src/app/inobeta-ui/translate/index.d.ts +1 -0
- package/src/app/inobeta-ui/translate/translate-loader.service.d.ts +11 -0
- package/src/app/inobeta-ui/ui/_index.scss +87 -0
- package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.d.ts +28 -0
- package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.d.ts +12 -0
- package/src/app/inobeta-ui/ui/breadcrumb/index.d.ts +3 -0
- package/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.d.ts +6 -0
- package/src/app/inobeta-ui/ui/data-export/data-export.module.d.ts +20 -0
- package/src/app/inobeta-ui/ui/data-export/data-export.service.d.ts +35 -0
- package/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.d.ts +19 -0
- package/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.d.ts +20 -0
- package/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.d.ts +14 -0
- package/src/app/inobeta-ui/ui/data-export/index.d.ts +9 -0
- package/src/app/inobeta-ui/ui/data-export/provider.d.ts +15 -0
- package/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.d.ts +23 -0
- package/src/app/inobeta-ui/ui/data-export/table-data-export.component.d.ts +13 -0
- package/src/app/inobeta-ui/ui/data-export/transformer.d.ts +50 -0
- package/src/app/inobeta-ui/ui/forms/array/array.d.ts +32 -0
- package/src/app/inobeta-ui/ui/forms/controls/checkbox.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/controls/dropdown.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/controls/form-control-base.d.ts +88 -0
- package/src/app/inobeta-ui/ui/forms/controls/radio.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/controls/textbox.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.d.ts +50 -0
- package/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.d.ts +18 -0
- package/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.d.ts +11 -0
- package/src/app/inobeta-ui/ui/forms/form-control.service.d.ts +13 -0
- package/src/app/inobeta-ui/ui/forms/forms.module.d.ts +12 -0
- package/src/app/inobeta-ui/ui/forms/forms.pipes.d.ts +20 -0
- package/src/app/inobeta-ui/ui/forms/forms.types.d.ts +3 -0
- package/src/app/inobeta-ui/ui/forms/index.d.ts +11 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.d.ts +5 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.d.ts +8 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter.component.d.ts +41 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter.types.d.ts +141 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.d.ts +42 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.d.ts +12 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.d.ts +56 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.d.ts +27 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.d.ts +28 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.d.ts +21 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters.module.d.ts +35 -0
- package/src/app/inobeta-ui/ui/kai-filter/index.d.ts +13 -0
- package/src/app/inobeta-ui/ui/kai-filter/tokens.d.ts +2 -0
- package/src/app/inobeta-ui/ui/kai-filter/translations.d.ts +50 -0
- package/src/app/inobeta-ui/ui/kai-table/_table-theme.scss +123 -0
- package/src/app/inobeta-ui/ui/kai-table/action.d.ts +19 -0
- package/src/app/inobeta-ui/ui/kai-table/cells.d.ts +88 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/action-column.d.ts +9 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/column.d.ts +87 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/date-column.d.ts +21 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/index.d.ts +6 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/number-column.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/selection-column.d.ts +26 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/text-column.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-table/index.d.ts +12 -0
- package/src/app/inobeta-ui/ui/kai-table/paginator-intl.d.ts +18 -0
- package/src/app/inobeta-ui/ui/kai-table/remote-data-source.d.ts +60 -0
- package/src/app/inobeta-ui/ui/kai-table/rowgroup.d.ts +8 -0
- package/src/app/inobeta-ui/ui/kai-table/sort-header.d.ts +20 -0
- package/src/app/inobeta-ui/ui/kai-table/store/const.d.ts +1 -0
- package/src/app/inobeta-ui/ui/kai-table/store/index.d.ts +8 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.d.ts +59 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.d.ts +15 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.d.ts +2 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.d.ts +3 -0
- package/src/app/inobeta-ui/ui/kai-table/table-data-source.d.ts +164 -0
- package/src/app/inobeta-ui/ui/kai-table/table-url.service.d.ts +51 -0
- package/src/app/inobeta-ui/ui/kai-table/table.component.d.ts +79 -0
- package/src/app/inobeta-ui/ui/kai-table/table.module.d.ts +30 -0
- package/src/app/inobeta-ui/ui/kai-table/table.types.d.ts +21 -0
- package/src/app/inobeta-ui/ui/kai-table/tokens.d.ts +22 -0
- package/src/app/inobeta-ui/ui/kai-table/translations.d.ts +40 -0
- package/src/app/inobeta-ui/ui/main-menu/_main-menu-theme.scss +226 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.d.ts +56 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.d.ts +18 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.d.ts +13 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.d.ts +9 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.d.ts +16 -0
- package/src/app/inobeta-ui/ui/main-menu/index.d.ts +10 -0
- package/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.d.ts +8 -0
- package/src/app/inobeta-ui/ui/main-menu/main-menu.module.d.ts +16 -0
- package/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.d.ts +8 -0
- package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.d.ts +14 -0
- package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.d.ts +4 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.d.ts +14 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/button.d.ts +28 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/checkbox.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/datepicker.d.ts +17 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/dropdown.d.ts +29 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/label.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/padding.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/radio.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/textarea.d.ts +17 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/textbox.d.ts +21 -0
- package/src/app/inobeta-ui/ui/material-forms/index.d.ts +17 -0
- package/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.d.ts +25 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.d.ts +26 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.d.ts +21 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.d.ts +6 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.d.ts +19 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form-test.module.d.ts +9 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form.module.d.ts +49 -0
- package/src/app/inobeta-ui/ui/material-forms/translations.d.ts +25 -0
- package/src/app/inobeta-ui/ui/modal/index.d.ts +6 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.component.d.ts +10 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.model.d.ts +32 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.service.d.ts +49 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.d.ts +6 -0
- package/src/app/inobeta-ui/ui/modal/modal-test.module.d.ts +7 -0
- package/src/app/inobeta-ui/ui/modal/modal.module.d.ts +11 -0
- package/src/app/inobeta-ui/ui/modal/translations.d.ts +9 -0
- package/src/app/inobeta-ui/ui/toast/_toast-theme.scss +56 -0
- package/src/app/inobeta-ui/ui/toast/index.d.ts +4 -0
- package/src/app/inobeta-ui/ui/toast/toast-test.module.d.ts +6 -0
- package/src/app/inobeta-ui/ui/toast/toast.module.d.ts +7 -0
- package/src/app/inobeta-ui/ui/toast/toast.service.d.ts +36 -0
- package/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.d.ts +3 -0
- package/src/app/inobeta-ui/ui/uploader/index.d.ts +2 -0
- package/src/app/inobeta-ui/ui/uploader/uploader.component.d.ts +12 -0
- package/src/app/inobeta-ui/ui/uploader/uploader.module.d.ts +10 -0
- package/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.d.ts +8 -0
- package/src/app/inobeta-ui/ui/views/components/index.d.ts +5 -0
- package/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.d.ts +14 -0
- package/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.d.ts +45 -0
- package/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.d.ts +22 -0
- package/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.d.ts +16 -0
- package/src/app/inobeta-ui/ui/views/index.d.ts +4 -0
- package/src/app/inobeta-ui/ui/views/store/actions.d.ts +27 -0
- package/src/app/inobeta-ui/ui/views/store/index.d.ts +2 -0
- package/src/app/inobeta-ui/ui/views/store/reducer.d.ts +7 -0
- package/src/app/inobeta-ui/ui/views/store/views/index.d.ts +3 -0
- package/src/app/inobeta-ui/ui/views/store/views/reducer.d.ts +3 -0
- package/src/app/inobeta-ui/ui/views/store/views/selectors.d.ts +4 -0
- package/src/app/inobeta-ui/ui/views/store/views/table-view.d.ts +22 -0
- package/src/app/inobeta-ui/ui/views/translations.d.ts +33 -0
- package/src/app/inobeta-ui/ui/views/view.module.d.ts +23 -0
- package/src/app/inobeta-ui/ui/views/view.service.d.ts +40 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
For usage information, refer to the [documentation](https://ui-docs.inobeta.net/current/?path=/docs/getting-started--docs)
|
package/_index.scss
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@forward './src/app/inobeta-ui/ui'
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public_api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5vYmV0YS11aS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2lub2JldGEtdWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './src/app/inobeta-ui/core';
|
|
2
|
+
export * from './src/app/inobeta-ui/http/index';
|
|
3
|
+
export * from './src/app/inobeta-ui/hydration/index';
|
|
4
|
+
export * from './src/app/inobeta-ui/storage/index';
|
|
5
|
+
export * from './src/app/inobeta-ui/translate/index';
|
|
6
|
+
export * from './src/app/inobeta-ui/ui/breadcrumb/index';
|
|
7
|
+
export * from './src/app/inobeta-ui/ui/data-export/index';
|
|
8
|
+
export * from './src/app/inobeta-ui/ui/forms/index';
|
|
9
|
+
export * from './src/app/inobeta-ui/ui/kai-filter/index';
|
|
10
|
+
export * from './src/app/inobeta-ui/ui/kai-table/index';
|
|
11
|
+
export * from './src/app/inobeta-ui/ui/main-menu/index';
|
|
12
|
+
export * from './src/app/inobeta-ui/ui/material-forms/index';
|
|
13
|
+
export * from './src/app/inobeta-ui/ui/modal/index';
|
|
14
|
+
export * from './src/app/inobeta-ui/ui/toast/index';
|
|
15
|
+
export * from './src/app/inobeta-ui/ui/uploader/index';
|
|
16
|
+
export * from './src/app/inobeta-ui/ui/views/index';
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9pbm9iZXRhLXVpL2NvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvaHR0cC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS9oeWRyYXRpb24vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvc3RvcmFnZS9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS90cmFuc2xhdGUvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvYnJlYWRjcnVtYi9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9kYXRhLWV4cG9ydC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9mb3Jtcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9rYWktZmlsdGVyL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9pbm9iZXRhLXVpL3VpL2thaS10YWJsZS9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9tYWluLW1lbnUvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvbWF0ZXJpYWwtZm9ybXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvbW9kYWwvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvdG9hc3QvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvdXBsb2FkZXIvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvdmlld3MvaW5kZXgnO1xuXG5cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Pipe } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class IbFilterPipe {
|
|
4
|
+
transform(items, query) {
|
|
5
|
+
if (!items) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
if (!query) {
|
|
9
|
+
return items;
|
|
10
|
+
}
|
|
11
|
+
return items.filter((i) => i.toLocaleLowerCase().includes(query.toLocaleLowerCase()));
|
|
12
|
+
}
|
|
13
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
14
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.1", ngImport: i0, type: IbFilterPipe, isStandalone: true, name: "filterBy" });
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbFilterPipe, decorators: [{
|
|
17
|
+
type: Pipe,
|
|
18
|
+
args: [{
|
|
19
|
+
name: "filterBy",
|
|
20
|
+
standalone: true,
|
|
21
|
+
}]
|
|
22
|
+
}] });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvY29yZS9maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFNcEQsTUFBTSxPQUFPLFlBQVk7SUFDdkIsU0FBUyxDQUFDLEtBQWUsRUFBRSxLQUFhO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3hCLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQzt1R0FiVSxZQUFZO3FHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AUGlwZSh7XG4gIG5hbWU6IFwiZmlsdGVyQnlcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSWJGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShpdGVtczogc3RyaW5nW10sIHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFpdGVtcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpKSA9PlxuICAgICAgaS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./filter.pipe";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvY29yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZpbHRlci5waXBlXCI7XG4iXX0=
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { Inject, Injectable, inject } from "@angular/core";
|
|
2
|
+
import { Store } from "@ngrx/store";
|
|
3
|
+
import { map, take } from "rxjs/operators";
|
|
4
|
+
import { ibSelectActiveSession } from "../store/session/selectors";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "./login.service";
|
|
8
|
+
/**
|
|
9
|
+
* Guard routes based on user authentication.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* - Include the `IbAuthGuard` in the `canActivate` route guard to protect routes.
|
|
13
|
+
* - If the user is not authenticated, they will be redirected to the login page provided by the `ibHttpGUILoginUrl` token.
|
|
14
|
+
*
|
|
15
|
+
* Example:
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const routes: Routes = [
|
|
18
|
+
* {
|
|
19
|
+
* path: 'dashboard',
|
|
20
|
+
* component: DashboardComponent,
|
|
21
|
+
* canActivate: [IbAuthGuard],
|
|
22
|
+
* },
|
|
23
|
+
* // ... other routes ...
|
|
24
|
+
* ];
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export class IbAuthGuard {
|
|
28
|
+
router;
|
|
29
|
+
ibHttpGUILoginUrl;
|
|
30
|
+
store = inject(Store);
|
|
31
|
+
session$ = this.store.select(ibSelectActiveSession());
|
|
32
|
+
constructor(router, ibHttpGUILoginUrl) {
|
|
33
|
+
this.router = router;
|
|
34
|
+
this.ibHttpGUILoginUrl = ibHttpGUILoginUrl;
|
|
35
|
+
}
|
|
36
|
+
canActivate() {
|
|
37
|
+
return this.session$.pipe(take(1), map((session) => {
|
|
38
|
+
const isAuth = session != null;
|
|
39
|
+
if (!isAuth) {
|
|
40
|
+
this.router.navigateByUrl(this.ibHttpGUILoginUrl);
|
|
41
|
+
}
|
|
42
|
+
return isAuth;
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthGuard, deps: [{ token: i1.Router }, { token: "ibHttpGUILoginUrl" }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
46
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthGuard, providedIn: "root" });
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthGuard, decorators: [{
|
|
49
|
+
type: Injectable,
|
|
50
|
+
args: [{ providedIn: "root" }]
|
|
51
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: undefined, decorators: [{
|
|
52
|
+
type: Inject,
|
|
53
|
+
args: ["ibHttpGUILoginUrl"]
|
|
54
|
+
}] }] });
|
|
55
|
+
/**
|
|
56
|
+
* Guard routes based on user login status.
|
|
57
|
+
* The opposite of IbAuthGuard, the route will activate if a user is NOT authenticated
|
|
58
|
+
*
|
|
59
|
+
* Usage:
|
|
60
|
+
* - Include the `IbLoginGuard` in the `canActivate` route guard to protect routes.
|
|
61
|
+
* - If the user is authenticated, they will be redirected to a page provided by the `ibHttpGUIDashboardUrl` token
|
|
62
|
+
*
|
|
63
|
+
* Example:
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const routes: Routes = [
|
|
66
|
+
* {
|
|
67
|
+
* path: 'login',
|
|
68
|
+
* component: LoginComponent,
|
|
69
|
+
* canActivate: [IbLoginGuard],
|
|
70
|
+
* },
|
|
71
|
+
* // ... other routes ...
|
|
72
|
+
* ];
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export class IbLoginGuard {
|
|
76
|
+
router;
|
|
77
|
+
ibHttpGUIDashboardUrl;
|
|
78
|
+
store = inject(Store);
|
|
79
|
+
session$ = this.store.select(ibSelectActiveSession());
|
|
80
|
+
path = "";
|
|
81
|
+
constructor(router, ibHttpGUIDashboardUrl) {
|
|
82
|
+
this.router = router;
|
|
83
|
+
this.ibHttpGUIDashboardUrl = ibHttpGUIDashboardUrl;
|
|
84
|
+
}
|
|
85
|
+
canActivate() {
|
|
86
|
+
return this.session$.pipe(take(1), map((session) => {
|
|
87
|
+
const isAuth = session != null;
|
|
88
|
+
if (isAuth) {
|
|
89
|
+
if (this.path !== "") {
|
|
90
|
+
this.router.navigateByUrl(this.path);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.router.navigateByUrl(this.ibHttpGUIDashboardUrl);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return !isAuth;
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginGuard, deps: [{ token: i1.Router }, { token: "ibHttpGUIDashboardUrl" }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
100
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginGuard, providedIn: "root" });
|
|
101
|
+
}
|
|
102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginGuard, decorators: [{
|
|
103
|
+
type: Injectable,
|
|
104
|
+
args: [{ providedIn: "root" }]
|
|
105
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: undefined, decorators: [{
|
|
106
|
+
type: Inject,
|
|
107
|
+
args: ["ibHttpGUIDashboardUrl"]
|
|
108
|
+
}] }] });
|
|
109
|
+
/**
|
|
110
|
+
* Guard routes based on user roles.
|
|
111
|
+
*
|
|
112
|
+
* Usage:
|
|
113
|
+
* - Include the `IbRoleGuard` in the `canActivate` route guard to protect routes based on user roles.
|
|
114
|
+
* - Specify the required roles in the route's data property.
|
|
115
|
+
* - If the user is not granted access, they will be redirected to a page provided by the `ibHttpGUIDashboardUrl` token
|
|
116
|
+
*
|
|
117
|
+
* Example:
|
|
118
|
+
* ```typescript
|
|
119
|
+
* const routes: Routes = [
|
|
120
|
+
* {
|
|
121
|
+
* path: 'admin',
|
|
122
|
+
* component: AdminComponent,
|
|
123
|
+
* canActivate: [IbRoleGuard],
|
|
124
|
+
* data: { roles: ['admin'] }
|
|
125
|
+
* },
|
|
126
|
+
* // ... other routes ...
|
|
127
|
+
* ];
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
export class IbRoleGuard {
|
|
131
|
+
router;
|
|
132
|
+
login;
|
|
133
|
+
ibHttpGUIDashboardUrl;
|
|
134
|
+
constructor(router, login, ibHttpGUIDashboardUrl) {
|
|
135
|
+
this.router = router;
|
|
136
|
+
this.login = login;
|
|
137
|
+
this.ibHttpGUIDashboardUrl = ibHttpGUIDashboardUrl;
|
|
138
|
+
}
|
|
139
|
+
canActivate(route) {
|
|
140
|
+
return this.login.hasRoles(route.data.roles).pipe(take(1), map((hasRole) => {
|
|
141
|
+
if (!hasRole) {
|
|
142
|
+
this.router.navigateByUrl(this.ibHttpGUIDashboardUrl);
|
|
143
|
+
}
|
|
144
|
+
return hasRole;
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbRoleGuard, deps: [{ token: i1.Router }, { token: i2.IbLoginService }, { token: "ibHttpGUIDashboardUrl" }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
148
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbRoleGuard, providedIn: "root" });
|
|
149
|
+
}
|
|
150
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbRoleGuard, decorators: [{
|
|
151
|
+
type: Injectable,
|
|
152
|
+
args: [{ providedIn: "root" }]
|
|
153
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.IbLoginService }, { type: undefined, decorators: [{
|
|
154
|
+
type: Inject,
|
|
155
|
+
args: ["ibHttpGUIDashboardUrl"]
|
|
156
|
+
}] }] });
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2F1dGgvZ3VhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBSW5FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxNQUFNLE9BQU8sV0FBVztJQU9aO0lBQzRCO0lBUHRDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsUUFBUSxHQUE4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDckUscUJBQXFCLEVBQWUsQ0FDckMsQ0FBQztJQUVGLFlBQ1UsTUFBYyxFQUNjLGlCQUF5QjtRQURyRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO0lBQzVELENBQUM7SUFFSixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3VHQXRCVSxXQUFXLHdDQVFaLG1CQUFtQjsyR0FSbEIsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBUzdCLE1BQU07MkJBQUMsbUJBQW1COztBQWlCL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVFiO0lBRUQ7SUFUVCxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsR0FBOEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3JFLHFCQUFxQixFQUFlLENBQ3JDLENBQUM7SUFFSyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLFlBQ1UsTUFBYyxFQUVmLHFCQUE2QjtRQUY1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRWYsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFRO0lBQ25DLENBQUM7SUFFSixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztZQUMvQixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3hELENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0E1QlUsWUFBWSx3Q0FTYix1QkFBdUI7MkdBVHRCLFlBQVksY0FEQyxNQUFNOzsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQVU3QixNQUFNOzJCQUFDLHVCQUF1Qjs7QUFzQm5DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBRVo7SUFDQTtJQUVEO0lBSlQsWUFDVSxNQUFjLEVBQ2QsS0FBa0MsRUFFbkMscUJBQTZCO1FBSDVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUE2QjtRQUVuQywwQkFBcUIsR0FBckIscUJBQXFCLENBQVE7SUFDbkMsQ0FBQztJQUVKLFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUMvQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3VHQWxCVSxXQUFXLHNFQUlaLHVCQUF1QjsyR0FKdEIsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBSzdCLE1BQU07MkJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgaWJTZWxlY3RBY3RpdmVTZXNzaW9uIH0gZnJvbSBcIi4uL3N0b3JlL3Nlc3Npb24vc2VsZWN0b3JzXCI7XG5pbXBvcnQgeyBJYkxvZ2luU2VydmljZSB9IGZyb20gXCIuL2xvZ2luLnNlcnZpY2VcIjtcbmltcG9ydCB7IEliQVBJVG9rZW5zLCBJYlNlc3Npb24gfSBmcm9tIFwiLi9zZXNzaW9uLm1vZGVsXCI7XG5cbi8qKlxuICogR3VhcmQgcm91dGVzIGJhc2VkIG9uIHVzZXIgYXV0aGVudGljYXRpb24uXG4gKlxuICogVXNhZ2U6XG4gKiAtIEluY2x1ZGUgdGhlIGBJYkF1dGhHdWFyZGAgaW4gdGhlIGBjYW5BY3RpdmF0ZWAgcm91dGUgZ3VhcmQgdG8gcHJvdGVjdCByb3V0ZXMuXG4gKiAtIElmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLCB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGUgbG9naW4gcGFnZSBwcm92aWRlZCBieSB0aGUgYGliSHR0cEdVSUxvZ2luVXJsYCB0b2tlbi5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnZGFzaGJvYXJkJyxcbiAqICAgICBjb21wb25lbnQ6IERhc2hib2FyZENvbXBvbmVudCxcbiAqICAgICBjYW5BY3RpdmF0ZTogW0liQXV0aEd1YXJkXSxcbiAqICAgfSxcbiAqICAgLy8gLi4uIG90aGVyIHJvdXRlcyAuLi5cbiAqIF07XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEliQXV0aEd1YXJkIHtcbiAgc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICBzZXNzaW9uJDogT2JzZXJ2YWJsZTxJYlNlc3Npb248SWJBUElUb2tlbnM+IHwgbnVsbD4gPSB0aGlzLnN0b3JlLnNlbGVjdChcbiAgICBpYlNlbGVjdEFjdGl2ZVNlc3Npb248SWJBUElUb2tlbnM+KClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlMb2dpblVybFwiKSBwdWJsaWMgaWJIdHRwR1VJTG9naW5Vcmw6IHN0cmluZ1xuICApIHt9XG5cbiAgY2FuQWN0aXZhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiQucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKHNlc3Npb24pID0+IHtcbiAgICAgICAgY29uc3QgaXNBdXRoID0gc2Vzc2lvbiAhPSBudWxsO1xuICAgICAgICBpZiAoIWlzQXV0aCkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5pYkh0dHBHVUlMb2dpblVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXV0aDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEd1YXJkIHJvdXRlcyBiYXNlZCBvbiB1c2VyIGxvZ2luIHN0YXR1cy5cbiAqIFRoZSBvcHBvc2l0ZSBvZiBJYkF1dGhHdWFyZCwgdGhlIHJvdXRlIHdpbGwgYWN0aXZhdGUgaWYgYSB1c2VyIGlzIE5PVCBhdXRoZW50aWNhdGVkXG4gKlxuICogVXNhZ2U6XG4gKiAtIEluY2x1ZGUgdGhlIGBJYkxvZ2luR3VhcmRgIGluIHRoZSBgY2FuQWN0aXZhdGVgIHJvdXRlIGd1YXJkIHRvIHByb3RlY3Qgcm91dGVzLlxuICogLSBJZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZCB0byBhIHBhZ2UgcHJvdmlkZWQgYnkgdGhlIGBpYkh0dHBHVUlEYXNoYm9hcmRVcmxgIHRva2VuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2xvZ2luJyxcbiAqICAgICBjb21wb25lbnQ6IExvZ2luQ29tcG9uZW50LFxuICogICAgIGNhbkFjdGl2YXRlOiBbSWJMb2dpbkd1YXJkXSxcbiAqICAgfSxcbiAqICAgLy8gLi4uIG90aGVyIHJvdXRlcyAuLi5cbiAqIF07XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEliTG9naW5HdWFyZCB7XG4gIHN0b3JlID0gaW5qZWN0KFN0b3JlKTtcbiAgc2Vzc2lvbiQ6IE9ic2VydmFibGU8SWJTZXNzaW9uPEliQVBJVG9rZW5zPiB8IG51bGw+ID0gdGhpcy5zdG9yZS5zZWxlY3QoXG4gICAgaWJTZWxlY3RBY3RpdmVTZXNzaW9uPEliQVBJVG9rZW5zPigpXG4gICk7XG5cbiAgcHVibGljIHBhdGggPSBcIlwiO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlEYXNoYm9hcmRVcmxcIilcbiAgICBwdWJsaWMgaWJIdHRwR1VJRGFzaGJvYXJkVXJsOiBzdHJpbmdcbiAgKSB7fVxuXG4gIGNhbkFjdGl2YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24kLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWFwKChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQXV0aCA9IHNlc3Npb24gIT0gbnVsbDtcbiAgICAgICAgaWYgKGlzQXV0aCkge1xuICAgICAgICAgIGlmICh0aGlzLnBhdGggIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5wYXRoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmliSHR0cEdVSURhc2hib2FyZFVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNBdXRoO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogR3VhcmQgcm91dGVzIGJhc2VkIG9uIHVzZXIgcm9sZXMuXG4gKlxuICogVXNhZ2U6XG4gKiAtIEluY2x1ZGUgdGhlIGBJYlJvbGVHdWFyZGAgaW4gdGhlIGBjYW5BY3RpdmF0ZWAgcm91dGUgZ3VhcmQgdG8gcHJvdGVjdCByb3V0ZXMgYmFzZWQgb24gdXNlciByb2xlcy5cbiAqIC0gU3BlY2lmeSB0aGUgcmVxdWlyZWQgcm9sZXMgaW4gdGhlIHJvdXRlJ3MgZGF0YSBwcm9wZXJ0eS5cbiAqIC0gSWYgdGhlIHVzZXIgaXMgbm90IGdyYW50ZWQgYWNjZXNzLCB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZCB0byBhIHBhZ2UgcHJvdmlkZWQgYnkgdGhlIGBpYkh0dHBHVUlEYXNoYm9hcmRVcmxgIHRva2VuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2FkbWluJyxcbiAqICAgICBjb21wb25lbnQ6IEFkbWluQ29tcG9uZW50LFxuICogICAgIGNhbkFjdGl2YXRlOiBbSWJSb2xlR3VhcmRdLFxuICogICAgIGRhdGE6IHsgcm9sZXM6IFsnYWRtaW4nXSB9XG4gKiAgIH0sXG4gKiAgIC8vIC4uLiBvdGhlciByb3V0ZXMgLi4uXG4gKiBdO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBJYlJvbGVHdWFyZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBsb2dpbjogSWJMb2dpblNlcnZpY2U8SWJBUElUb2tlbnM+LFxuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlEYXNoYm9hcmRVcmxcIilcbiAgICBwdWJsaWMgaWJIdHRwR1VJRGFzaGJvYXJkVXJsOiBzdHJpbmdcbiAgKSB7fVxuXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XG4gICAgcmV0dXJuIHRoaXMubG9naW4uaGFzUm9sZXMocm91dGUuZGF0YS5yb2xlcykucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKGhhc1JvbGUpID0+IHtcbiAgICAgICAgaWYgKCFoYXNSb2xlKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmliSHR0cEdVSURhc2hib2FyZFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc1JvbGU7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { jwtDecode } from "jwt-decode";
|
|
3
|
+
import { throwError } from "rxjs";
|
|
4
|
+
import { catchError, filter, map } from "rxjs/operators";
|
|
5
|
+
import { ibAuthActions } from "../store/session/actions";
|
|
6
|
+
import { ibSelectActiveSession } from "../store/session/selectors";
|
|
7
|
+
import { IbAuthTypes, IbSession, } from "./session.model";
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common/http";
|
|
10
|
+
import * as i2 from "@ngrx/store";
|
|
11
|
+
import * as i3 from "@angular/router";
|
|
12
|
+
import * as i4 from "@angular/material/snack-bar";
|
|
13
|
+
export class IbLoginService {
|
|
14
|
+
httpClient;
|
|
15
|
+
store;
|
|
16
|
+
srvRouter;
|
|
17
|
+
snackBar;
|
|
18
|
+
ibHttpGUILoginUrl;
|
|
19
|
+
ibHttpAPILoginUrl;
|
|
20
|
+
ibHttpAuthType;
|
|
21
|
+
ibHttpSessionStorageType;
|
|
22
|
+
ibHttpAPIRefreshUrl;
|
|
23
|
+
ibHttpJWTClaimsField;
|
|
24
|
+
ibHttpJWTRolesField;
|
|
25
|
+
constructor(httpClient, store, srvRouter, snackBar,
|
|
26
|
+
/** Login page path */
|
|
27
|
+
ibHttpGUILoginUrl,
|
|
28
|
+
/** API login endpoint */
|
|
29
|
+
ibHttpAPILoginUrl,
|
|
30
|
+
/** Authorizazion type. Either bearer token (JWT) or basic */
|
|
31
|
+
ibHttpAuthType,
|
|
32
|
+
/** Where to storage the user's access token */
|
|
33
|
+
ibHttpSessionStorageType,
|
|
34
|
+
/** Refresh access token API endpoint */
|
|
35
|
+
ibHttpAPIRefreshUrl,
|
|
36
|
+
/** Property name of additional data or claims within the JWT token */
|
|
37
|
+
ibHttpJWTClaimsField,
|
|
38
|
+
/** Property name of the user roles within the JWT claims field */
|
|
39
|
+
ibHttpJWTRolesField) {
|
|
40
|
+
this.httpClient = httpClient;
|
|
41
|
+
this.store = store;
|
|
42
|
+
this.srvRouter = srvRouter;
|
|
43
|
+
this.snackBar = snackBar;
|
|
44
|
+
this.ibHttpGUILoginUrl = ibHttpGUILoginUrl;
|
|
45
|
+
this.ibHttpAPILoginUrl = ibHttpAPILoginUrl;
|
|
46
|
+
this.ibHttpAuthType = ibHttpAuthType;
|
|
47
|
+
this.ibHttpSessionStorageType = ibHttpSessionStorageType;
|
|
48
|
+
this.ibHttpAPIRefreshUrl = ibHttpAPIRefreshUrl;
|
|
49
|
+
this.ibHttpJWTClaimsField = ibHttpJWTClaimsField;
|
|
50
|
+
this.ibHttpJWTRolesField = ibHttpJWTRolesField;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Attempts a login to the server by contacting the endpoint provided by the token {@link ibHttpAPILoginUrl}
|
|
54
|
+
*/
|
|
55
|
+
login(user) {
|
|
56
|
+
const activeSession = new IbSession();
|
|
57
|
+
if (user) {
|
|
58
|
+
if (this.ibHttpAuthType === IbAuthTypes.BASIC_AUTH) {
|
|
59
|
+
activeSession.serverData.accessToken = window.btoa(user.email + ":" + user.password);
|
|
60
|
+
}
|
|
61
|
+
activeSession.valid = false;
|
|
62
|
+
activeSession.user = {
|
|
63
|
+
...user,
|
|
64
|
+
password: "",
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return this.httpClient.post(this.ibHttpAPILoginUrl, user).pipe(map((token) => {
|
|
68
|
+
activeSession.valid = true;
|
|
69
|
+
activeSession.serverData = token;
|
|
70
|
+
this.store.dispatch(ibAuthActions.login({ activeSession: activeSession }));
|
|
71
|
+
return token;
|
|
72
|
+
}), catchError((err) => throwError(() => err)));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Refresh a token by contacting the endpoint provided by the token {@link ibHttpAPIRefreshUrl}
|
|
76
|
+
*/
|
|
77
|
+
refresh(token) {
|
|
78
|
+
return this.httpClient.post(this.ibHttpAPIRefreshUrl, {
|
|
79
|
+
token,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Logout the user, clear the session, and navigate back to {@link ibHttpGUILoginUrl}
|
|
84
|
+
* @param makeSnack Whether to show a snackbar message when logging out
|
|
85
|
+
*/
|
|
86
|
+
logout(makeSnack = true) {
|
|
87
|
+
this.store.dispatch(ibAuthActions.logout());
|
|
88
|
+
this.srvRouter.navigateByUrl(this.ibHttpGUILoginUrl);
|
|
89
|
+
if (makeSnack) {
|
|
90
|
+
this.snackBar.open("Logout completed", null, { duration: 2000 });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check whether the current user has at least one of the provided roles
|
|
95
|
+
* @param roles List of roles
|
|
96
|
+
* @returns true if the user has at least one of the provided roles
|
|
97
|
+
*/
|
|
98
|
+
hasRoles(roles) {
|
|
99
|
+
return this.store.select(ibSelectActiveSession()).pipe(filter((session) => session?.serverData?.accessToken !== undefined), map((session) => jwtDecode(session.serverData.accessToken)), map((decodedData) => {
|
|
100
|
+
const userRoles = decodedData?.[this.ibHttpJWTClaimsField]?.[this.ibHttpJWTRolesField] ?? [];
|
|
101
|
+
for (let r of roles) {
|
|
102
|
+
if (userRoles.findIndex((ur) => ur === r) >= 0) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginService, deps: [{ token: i1.HttpClient }, { token: i2.Store }, { token: i3.Router }, { token: i4.MatSnackBar }, { token: "ibHttpGUILoginUrl" }, { token: "ibHttpAPILoginUrl" }, { token: "ibHttpAuthType" }, { token: "ibHttpSessionStorageType" }, { token: "ibHttpAPIRefreshUrl" }, { token: "ibHttpJWTClaimsField" }, { token: "ibHttpJWTRolesField" }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
110
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginService, providedIn: "root" });
|
|
111
|
+
}
|
|
112
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginService, decorators: [{
|
|
113
|
+
type: Injectable,
|
|
114
|
+
args: [{ providedIn: "root" }]
|
|
115
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.Store }, { type: i3.Router }, { type: i4.MatSnackBar }, { type: undefined, decorators: [{
|
|
116
|
+
type: Inject,
|
|
117
|
+
args: ["ibHttpGUILoginUrl"]
|
|
118
|
+
}] }, { type: undefined, decorators: [{
|
|
119
|
+
type: Inject,
|
|
120
|
+
args: ["ibHttpAPILoginUrl"]
|
|
121
|
+
}] }, { type: undefined, decorators: [{
|
|
122
|
+
type: Inject,
|
|
123
|
+
args: ["ibHttpAuthType"]
|
|
124
|
+
}] }, { type: undefined, decorators: [{
|
|
125
|
+
type: Inject,
|
|
126
|
+
args: ["ibHttpSessionStorageType"]
|
|
127
|
+
}] }, { type: undefined, decorators: [{
|
|
128
|
+
type: Inject,
|
|
129
|
+
args: ["ibHttpAPIRefreshUrl"]
|
|
130
|
+
}] }, { type: undefined, decorators: [{
|
|
131
|
+
type: Inject,
|
|
132
|
+
args: ["ibHttpJWTClaimsField"]
|
|
133
|
+
}] }, { type: undefined, decorators: [{
|
|
134
|
+
type: Inject,
|
|
135
|
+
args: ["ibHttpJWTRolesField"]
|
|
136
|
+
}] }] });
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2F1dGgvbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFFTCxXQUFXLEVBQ1gsU0FBUyxHQUVWLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUd6QixNQUFNLE9BQU8sY0FBYztJQUVmO0lBQ0E7SUFDQTtJQUNBO0lBR0Q7SUFHQTtJQUdBO0lBR0E7SUFHQTtJQUdBO0lBR0E7SUF6QlQsWUFDVSxVQUFzQixFQUN0QixLQUFZLEVBQ1osU0FBaUIsRUFDakIsUUFBcUI7SUFDN0Isc0JBQXNCO0lBRWYsaUJBQWlCO0lBQ3hCLHlCQUF5QjtJQUVsQixpQkFBaUI7SUFDeEIsNkRBQTZEO0lBRXRELGNBQWM7SUFDckIsK0NBQStDO0lBRXhDLHdCQUF3QjtJQUMvQix3Q0FBd0M7SUFFakMsbUJBQW1CO0lBQzFCLHNFQUFzRTtJQUUvRCxvQkFBb0I7SUFDM0Isa0VBQWtFO0lBRTNELG1CQUFtQjtRQXhCbEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBR3RCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBQTtRQUdqQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQUE7UUFHakIsbUJBQWMsR0FBZCxjQUFjLENBQUE7UUFHZCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQUE7UUFHeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFBO1FBR25CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBQTtRQUdwQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQUE7SUFDekIsQ0FBQztJQUVKOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQWlCO1FBQzVCLE1BQU0sYUFBYSxHQUFHLElBQUksU0FBUyxFQUFLLENBQUM7UUFFekMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ25ELGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2pDLENBQUM7WUFDSixDQUFDO1lBQ0QsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDNUIsYUFBYSxDQUFDLElBQUksR0FBRztnQkFDbkIsR0FBRyxJQUFJO2dCQUNQLFFBQVEsRUFBRSxFQUFFO2FBQ2IsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDM0IsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ2pCLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FDdEQsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU8sQ0FBQyxLQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQWMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ2pFLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFlBQXFCLElBQUk7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxLQUFlO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDakUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFDbkUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUMzRCxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNsQixNQUFNLFNBQVMsR0FDYixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQ3pCLElBQUksRUFBRSxDQUFDO1lBQ1YsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQy9DLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0F4R1UsY0FBYyxrSEFPZixtQkFBbUIsYUFHbkIsbUJBQW1CLGFBR25CLGdCQUFnQixhQUdoQiwwQkFBMEIsYUFHMUIscUJBQXFCLGFBR3JCLHNCQUFzQixhQUd0QixxQkFBcUI7MkdBekJwQixjQUFjLGNBREQsTUFBTTs7MkZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFRN0IsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUcxQixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBRzFCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFHdkIsTUFBTTsyQkFBQywwQkFBMEI7OzBCQUdqQyxNQUFNOzJCQUFDLHFCQUFxQjs7MEJBRzVCLE1BQU07MkJBQUMsc0JBQXNCOzswQkFHN0IsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSBcImp3dC1kZWNvZGVcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IGliQXV0aEFjdGlvbnMgfSBmcm9tIFwiLi4vc3RvcmUvc2Vzc2lvbi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBpYlNlbGVjdEFjdGl2ZVNlc3Npb24gfSBmcm9tIFwiLi4vc3RvcmUvc2Vzc2lvbi9zZWxlY3RvcnNcIjtcbmltcG9ydCB7XG4gIEliQVBJVG9rZW5zLFxuICBJYkF1dGhUeXBlcyxcbiAgSWJTZXNzaW9uLFxuICBJYlVzZXJMb2dpbixcbn0gZnJvbSBcIi4vc2Vzc2lvbi5tb2RlbFwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSWJMb2dpblNlcnZpY2U8VCBleHRlbmRzIEliQVBJVG9rZW5zIHwgSWJBUElUb2tlbnM+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgc3J2Um91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgLyoqIExvZ2luIHBhZ2UgcGF0aCAqL1xuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlMb2dpblVybFwiKVxuICAgIHB1YmxpYyBpYkh0dHBHVUlMb2dpblVybCxcbiAgICAvKiogQVBJIGxvZ2luIGVuZHBvaW50ICovXG4gICAgQEluamVjdChcImliSHR0cEFQSUxvZ2luVXJsXCIpXG4gICAgcHVibGljIGliSHR0cEFQSUxvZ2luVXJsLFxuICAgIC8qKiBBdXRob3JpemF6aW9uIHR5cGUuIEVpdGhlciBiZWFyZXIgdG9rZW4gKEpXVCkgb3IgYmFzaWMgKi9cbiAgICBASW5qZWN0KFwiaWJIdHRwQXV0aFR5cGVcIilcbiAgICBwdWJsaWMgaWJIdHRwQXV0aFR5cGUsXG4gICAgLyoqIFdoZXJlIHRvIHN0b3JhZ2UgdGhlIHVzZXIncyBhY2Nlc3MgdG9rZW4gKi9cbiAgICBASW5qZWN0KFwiaWJIdHRwU2Vzc2lvblN0b3JhZ2VUeXBlXCIpXG4gICAgcHVibGljIGliSHR0cFNlc3Npb25TdG9yYWdlVHlwZSxcbiAgICAvKiogUmVmcmVzaCBhY2Nlc3MgdG9rZW4gQVBJIGVuZHBvaW50ICovXG4gICAgQEluamVjdChcImliSHR0cEFQSVJlZnJlc2hVcmxcIilcbiAgICBwdWJsaWMgaWJIdHRwQVBJUmVmcmVzaFVybCxcbiAgICAvKiogUHJvcGVydHkgbmFtZSBvZiBhZGRpdGlvbmFsIGRhdGEgb3IgY2xhaW1zIHdpdGhpbiB0aGUgSldUIHRva2VuICovXG4gICAgQEluamVjdChcImliSHR0cEpXVENsYWltc0ZpZWxkXCIpXG4gICAgcHVibGljIGliSHR0cEpXVENsYWltc0ZpZWxkLFxuICAgIC8qKiBQcm9wZXJ0eSBuYW1lIG9mIHRoZSB1c2VyIHJvbGVzIHdpdGhpbiB0aGUgSldUIGNsYWltcyBmaWVsZCAqL1xuICAgIEBJbmplY3QoXCJpYkh0dHBKV1RSb2xlc0ZpZWxkXCIpXG4gICAgcHVibGljIGliSHR0cEpXVFJvbGVzRmllbGRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyBhIGxvZ2luIHRvIHRoZSBzZXJ2ZXIgYnkgY29udGFjdGluZyB0aGUgZW5kcG9pbnQgcHJvdmlkZWQgYnkgdGhlIHRva2VuIHtAbGluayBpYkh0dHBBUElMb2dpblVybH1cbiAgICovXG4gIHB1YmxpYyBsb2dpbih1c2VyOiBJYlVzZXJMb2dpbikge1xuICAgIGNvbnN0IGFjdGl2ZVNlc3Npb24gPSBuZXcgSWJTZXNzaW9uPFQ+KCk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgaWYgKHRoaXMuaWJIdHRwQXV0aFR5cGUgPT09IEliQXV0aFR5cGVzLkJBU0lDX0FVVEgpIHtcbiAgICAgICAgYWN0aXZlU2Vzc2lvbi5zZXJ2ZXJEYXRhLmFjY2Vzc1Rva2VuID0gd2luZG93LmJ0b2EoXG4gICAgICAgICAgdXNlci5lbWFpbCArIFwiOlwiICsgdXNlci5wYXNzd29yZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYWN0aXZlU2Vzc2lvbi52YWxpZCA9IGZhbHNlO1xuICAgICAgYWN0aXZlU2Vzc2lvbi51c2VyID0ge1xuICAgICAgICAuLi51c2VyLFxuICAgICAgICBwYXNzd29yZDogXCJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PFQ+KHRoaXMuaWJIdHRwQVBJTG9naW5VcmwsIHVzZXIpLnBpcGUoXG4gICAgICBtYXAoKHRva2VuKSA9PiB7XG4gICAgICAgIGFjdGl2ZVNlc3Npb24udmFsaWQgPSB0cnVlO1xuICAgICAgICBhY3RpdmVTZXNzaW9uLnNlcnZlckRhdGEgPSB0b2tlbjtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBpYkF1dGhBY3Rpb25zLmxvZ2luKHsgYWN0aXZlU2Vzc2lvbjogYWN0aXZlU2Vzc2lvbiB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gdGhyb3dFcnJvcigoKSA9PiBlcnIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBhIHRva2VuIGJ5IGNvbnRhY3RpbmcgdGhlIGVuZHBvaW50IHByb3ZpZGVkIGJ5IHRoZSB0b2tlbiB7QGxpbmsgaWJIdHRwQVBJUmVmcmVzaFVybH1cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKHRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8SWJBUElUb2tlbnM+KHRoaXMuaWJIdHRwQVBJUmVmcmVzaFVybCwge1xuICAgICAgdG9rZW4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9nb3V0IHRoZSB1c2VyLCBjbGVhciB0aGUgc2Vzc2lvbiwgYW5kIG5hdmlnYXRlIGJhY2sgdG8ge0BsaW5rIGliSHR0cEdVSUxvZ2luVXJsfVxuICAgKiBAcGFyYW0gbWFrZVNuYWNrIFdoZXRoZXIgdG8gc2hvdyBhIHNuYWNrYmFyIG1lc3NhZ2Ugd2hlbiBsb2dnaW5nIG91dFxuICAgKi9cbiAgcHVibGljIGxvZ291dChtYWtlU25hY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChpYkF1dGhBY3Rpb25zLmxvZ291dCgpKTtcbiAgICB0aGlzLnNydlJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuaWJIdHRwR1VJTG9naW5VcmwpO1xuICAgIGlmIChtYWtlU25hY2spIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIkxvZ291dCBjb21wbGV0ZWRcIiwgbnVsbCwgeyBkdXJhdGlvbjogMjAwMCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCB1c2VyIGhhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIHByb3ZpZGVkIHJvbGVzXG4gICAqIEBwYXJhbSByb2xlcyBMaXN0IG9mIHJvbGVzXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgaGFzIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvdmlkZWQgcm9sZXNcbiAgICovXG4gIHB1YmxpYyBoYXNSb2xlcyhyb2xlczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoaWJTZWxlY3RBY3RpdmVTZXNzaW9uPEliQVBJVG9rZW5zPigpKS5waXBlKFxuICAgICAgZmlsdGVyKChzZXNzaW9uKSA9PiBzZXNzaW9uPy5zZXJ2ZXJEYXRhPy5hY2Nlc3NUb2tlbiAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIG1hcCgoc2Vzc2lvbikgPT4gand0RGVjb2RlKHNlc3Npb24uc2VydmVyRGF0YS5hY2Nlc3NUb2tlbikpLFxuICAgICAgbWFwKChkZWNvZGVkRGF0YSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyUm9sZXM6IHN0cmluZ1tdID1cbiAgICAgICAgICBkZWNvZGVkRGF0YT8uW3RoaXMuaWJIdHRwSldUQ2xhaW1zRmllbGRdPy5bXG4gICAgICAgICAgICB0aGlzLmliSHR0cEpXVFJvbGVzRmllbGRcbiAgICAgICAgICBdID8/IFtdO1xuICAgICAgICBmb3IgKGxldCByIG9mIHJvbGVzKSB7XG4gICAgICAgICAgaWYgKHVzZXJSb2xlcy5maW5kSW5kZXgoKHVyKSA9PiB1ciA9PT0gcikgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { of } from "rxjs";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class IbLoginServiceStub {
|
|
5
|
+
login(u) {
|
|
6
|
+
return of({
|
|
7
|
+
accessToken: '',
|
|
8
|
+
refreshToken: ''
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
logout() {
|
|
12
|
+
}
|
|
13
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginServiceStub, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
14
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginServiceStub, providedIn: 'root' });
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginServiceStub, decorators: [{
|
|
17
|
+
type: Injectable,
|
|
18
|
+
args: [{ providedIn: 'root' }]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5zdHViLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvaHR0cC9hdXRoL2xvZ2luLnNlcnZpY2Uuc3R1Yi5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLdEMsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixLQUFLLENBQUUsQ0FBYztRQUNuQixPQUFPLEVBQUUsQ0FBQztZQUNSLFdBQVcsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBa0IsQ0FBQTtJQUNyQixDQUFDO0lBRUQsTUFBTTtJQUNOLENBQUM7dUdBVlUsa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FETixNQUFNOzsyRkFDbEIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSWJBUElUb2tlbnMsIEliVXNlckxvZ2luIH0gZnJvbSBcIi4vc2Vzc2lvbi5tb2RlbFwiO1xuXG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEliTG9naW5TZXJ2aWNlU3R1YjxUIGV4dGVuZHMgSWJBUElUb2tlbnMgfCBJYkFQSVRva2VucyA+IHtcblxuICBsb2dpbiAodTogSWJVc2VyTG9naW4pOiBPYnNlcnZhYmxlPFQ+e1xuICAgIHJldHVybiBvZih7XG4gICAgICBhY2Nlc3NUb2tlbjogJycsXG4gICAgICByZWZyZXNoVG9rZW46ICcnXG4gICAgfSkgYXMgT2JzZXJ2YWJsZTxUPlxuICB9XG5cbiAgbG9nb3V0KCkge1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class IbSession {
|
|
2
|
+
user;
|
|
3
|
+
valid;
|
|
4
|
+
serverData;
|
|
5
|
+
}
|
|
6
|
+
export class IbUserLogin {
|
|
7
|
+
email;
|
|
8
|
+
password;
|
|
9
|
+
rememberMe;
|
|
10
|
+
}
|
|
11
|
+
export var IbAuthTypes;
|
|
12
|
+
(function (IbAuthTypes) {
|
|
13
|
+
IbAuthTypes[IbAuthTypes["BASIC_AUTH"] = 0] = "BASIC_AUTH";
|
|
14
|
+
IbAuthTypes[IbAuthTypes["JWT"] = 1] = "JWT";
|
|
15
|
+
})(IbAuthTypes || (IbAuthTypes = {}));
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2F1dGgvc2Vzc2lvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sU0FBUztJQUNwQixJQUFJLENBQWM7SUFDbEIsS0FBSyxDQUFVO0lBQ2YsVUFBVSxDQUFHO0NBQ2Q7QUFFRCxNQUFNLE9BQU8sV0FBVztJQUN0QixLQUFLLENBQVM7SUFDZCxRQUFRLENBQVM7SUFDakIsVUFBVSxDQUFVO0NBQ3JCO0FBRUQsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQix5REFBVSxDQUFBO0lBQ1YsMkNBQUcsQ0FBQTtBQUNMLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBJYlNlc3Npb248VCBleHRlbmRzIEliQVBJVG9rZW5zIHwgSWJBUElUb2tlbnM+IHtcbiAgdXNlcjogSWJVc2VyTG9naW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBzZXJ2ZXJEYXRhOiBUXG59XG5cbmV4cG9ydCBjbGFzcyBJYlVzZXJMb2dpbiB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlbWVtYmVyTWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEliQXV0aFR5cGVzIHtcbiAgQkFTSUNfQVVUSCxcbiAgSldUXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWJBUElUb2tlbnMge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Inject, Injectable, inject } from "@angular/core";
|
|
2
|
+
import { Store } from "@ngrx/store";
|
|
3
|
+
import { throwError } from "rxjs";
|
|
4
|
+
import { catchError, mergeMap, take } from "rxjs/operators";
|
|
5
|
+
import { IbAuthTypes } from "../auth/session.model";
|
|
6
|
+
import { ibSelectActiveSession } from "../store/session/selectors";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../ui/toast/toast.service";
|
|
9
|
+
import * as i2 from "../auth/login.service";
|
|
10
|
+
import * as i3 from "../auth/session.model";
|
|
11
|
+
export class IbAuthInterceptor {
|
|
12
|
+
ibToast;
|
|
13
|
+
login;
|
|
14
|
+
ibHttpEnableInterceptors;
|
|
15
|
+
ibHttpAPILoginUrl;
|
|
16
|
+
ibHttpToastOnLoginFailure;
|
|
17
|
+
ibHttpAuthType;
|
|
18
|
+
store = inject(Store);
|
|
19
|
+
session$ = this.store.select(ibSelectActiveSession());
|
|
20
|
+
constructor(ibToast, login, ibHttpEnableInterceptors, ibHttpAPILoginUrl, ibHttpToastOnLoginFailure, ibHttpAuthType) {
|
|
21
|
+
this.ibToast = ibToast;
|
|
22
|
+
this.login = login;
|
|
23
|
+
this.ibHttpEnableInterceptors = ibHttpEnableInterceptors;
|
|
24
|
+
this.ibHttpAPILoginUrl = ibHttpAPILoginUrl;
|
|
25
|
+
this.ibHttpToastOnLoginFailure = ibHttpToastOnLoginFailure;
|
|
26
|
+
this.ibHttpAuthType = ibHttpAuthType;
|
|
27
|
+
}
|
|
28
|
+
intercept(request, next) {
|
|
29
|
+
let authString = "";
|
|
30
|
+
let authReq = request.clone({
|
|
31
|
+
headers: request.headers.set("x-requested-with", "XMLHttpRequest"),
|
|
32
|
+
});
|
|
33
|
+
switch (this.ibHttpAuthType) {
|
|
34
|
+
case IbAuthTypes.JWT:
|
|
35
|
+
authString = "Bearer ";
|
|
36
|
+
break;
|
|
37
|
+
case IbAuthTypes.BASIC_AUTH:
|
|
38
|
+
authString = "Basic ";
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
return this.session$.pipe(take(1), mergeMap((session) => {
|
|
42
|
+
if (session?.valid && session?.serverData?.accessToken) {
|
|
43
|
+
authString += session.serverData.accessToken;
|
|
44
|
+
authReq = request.clone({
|
|
45
|
+
headers: request.headers.set("Authorization", authString),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return next.handle(authReq);
|
|
49
|
+
}), catchError((err) => {
|
|
50
|
+
if (!this.ibHttpEnableInterceptors) {
|
|
51
|
+
return throwError(() => err);
|
|
52
|
+
}
|
|
53
|
+
if (request.url !== this.ibHttpAPILoginUrl && err.status === 401) {
|
|
54
|
+
this.ibToast.open(this.ibHttpToastOnLoginFailure, "warning");
|
|
55
|
+
this.login.logout(false);
|
|
56
|
+
}
|
|
57
|
+
return throwError(() => err);
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthInterceptor, deps: [{ token: i1.IbToastNotification }, { token: i2.IbLoginService }, { token: "ibHttpEnableInterceptors" }, { token: "ibHttpAPILoginUrl" }, { token: "ibHttpToastOnLoginFailure" }, { token: "ibHttpAuthType" }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
61
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthInterceptor, providedIn: "root" });
|
|
62
|
+
}
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthInterceptor, decorators: [{
|
|
64
|
+
type: Injectable,
|
|
65
|
+
args: [{ providedIn: "root" }]
|
|
66
|
+
}], ctorParameters: () => [{ type: i1.IbToastNotification }, { type: i2.IbLoginService }, { type: undefined, decorators: [{
|
|
67
|
+
type: Inject,
|
|
68
|
+
args: ["ibHttpEnableInterceptors"]
|
|
69
|
+
}] }, { type: undefined, decorators: [{
|
|
70
|
+
type: Inject,
|
|
71
|
+
args: ["ibHttpAPILoginUrl"]
|
|
72
|
+
}] }, { type: undefined, decorators: [{
|
|
73
|
+
type: Inject,
|
|
74
|
+
args: ["ibHttpToastOnLoginFailure"]
|
|
75
|
+
}] }, { type: i3.IbAuthTypes, decorators: [{
|
|
76
|
+
type: Inject,
|
|
77
|
+
args: ["ibHttpAuthType"]
|
|
78
|
+
}] }] });
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2h0dHAvYXV0aC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVELE9BQU8sRUFBZSxXQUFXLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFHbkUsTUFBTSxPQUFPLGlCQUFpQjtJQU9sQjtJQUNBO0lBRUQ7SUFDNkI7SUFFN0I7SUFDMEI7SUFibkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixRQUFRLEdBQThDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNyRSxxQkFBcUIsRUFBZSxDQUNyQyxDQUFDO0lBRUYsWUFDVSxPQUE0QixFQUM1QixLQUFrQyxFQUVuQyx3QkFBaUMsRUFDSixpQkFBeUIsRUFFdEQseUJBQWlDLEVBQ1AsY0FBMkI7UUFQcEQsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBNkI7UUFFbkMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUFTO1FBQ0osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBRXRELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBUTtRQUNQLG1CQUFjLEdBQWQsY0FBYyxDQUFhO0lBQzNELENBQUM7SUFFSixTQUFTLENBQ1AsT0FBeUIsRUFDekIsSUFBaUI7UUFFakIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDMUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDO1NBQ25FLENBQUMsQ0FBQztRQUNILFFBQVEsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLEtBQUssV0FBVyxDQUFDLEdBQUc7Z0JBQ2xCLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQ3ZCLE1BQU07WUFDUixLQUFLLFdBQVcsQ0FBQyxVQUFVO2dCQUN6QixVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUN0QixNQUFNO1FBQ1YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3ZCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQixJQUFJLE9BQU8sRUFBRSxLQUFLLElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDdkQsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO2dCQUM3QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7aUJBQzFELENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0F4RFUsaUJBQWlCLG1GQVNsQiwwQkFBMEIsYUFFMUIsbUJBQW1CLGFBQ25CLDJCQUEyQixhQUUzQixnQkFBZ0I7MkdBZGYsaUJBQWlCLGNBREosTUFBTTs7MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQVU3QixNQUFNOzJCQUFDLDBCQUEwQjs7MEJBRWpDLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQywyQkFBMkI7OzBCQUVsQyxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1lcmdlTWFwLCB0YWtlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBJYlRvYXN0Tm90aWZpY2F0aW9uIH0gZnJvbSBcIi4uLy4uL3VpL3RvYXN0L3RvYXN0LnNlcnZpY2VcIjtcbmltcG9ydCB7IEliTG9naW5TZXJ2aWNlIH0gZnJvbSBcIi4uL2F1dGgvbG9naW4uc2VydmljZVwiO1xuaW1wb3J0IHsgSWJBUElUb2tlbnMsIEliQXV0aFR5cGVzLCBJYlNlc3Npb24gfSBmcm9tIFwiLi4vYXV0aC9zZXNzaW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBpYlNlbGVjdEFjdGl2ZVNlc3Npb24gfSBmcm9tIFwiLi4vc3RvcmUvc2Vzc2lvbi9zZWxlY3RvcnNcIjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEliQXV0aEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICBzZXNzaW9uJDogT2JzZXJ2YWJsZTxJYlNlc3Npb248SWJBUElUb2tlbnM+IHwgbnVsbD4gPSB0aGlzLnN0b3JlLnNlbGVjdChcbiAgICBpYlNlbGVjdEFjdGl2ZVNlc3Npb248SWJBUElUb2tlbnM+KClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGliVG9hc3Q6IEliVG9hc3ROb3RpZmljYXRpb24sXG4gICAgcHJpdmF0ZSBsb2dpbjogSWJMb2dpblNlcnZpY2U8SWJBUElUb2tlbnM+LFxuICAgIEBJbmplY3QoXCJpYkh0dHBFbmFibGVJbnRlcmNlcHRvcnNcIilcbiAgICBwdWJsaWMgaWJIdHRwRW5hYmxlSW50ZXJjZXB0b3JzOiBib29sZWFuLFxuICAgIEBJbmplY3QoXCJpYkh0dHBBUElMb2dpblVybFwiKSBwdWJsaWMgaWJIdHRwQVBJTG9naW5Vcmw6IHN0cmluZyxcbiAgICBASW5qZWN0KFwiaWJIdHRwVG9hc3RPbkxvZ2luRmFpbHVyZVwiKVxuICAgIHB1YmxpYyBpYkh0dHBUb2FzdE9uTG9naW5GYWlsdXJlOiBzdHJpbmcsXG4gICAgQEluamVjdChcImliSHR0cEF1dGhUeXBlXCIpIHB1YmxpYyBpYkh0dHBBdXRoVHlwZTogSWJBdXRoVHlwZXNcbiAgKSB7fVxuXG4gIGludGVyY2VwdChcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBsZXQgYXV0aFN0cmluZyA9IFwiXCI7XG5cbiAgICBsZXQgYXV0aFJlcSA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldChcIngtcmVxdWVzdGVkLXdpdGhcIiwgXCJYTUxIdHRwUmVxdWVzdFwiKSxcbiAgICB9KTtcbiAgICBzd2l0Y2ggKHRoaXMuaWJIdHRwQXV0aFR5cGUpIHtcbiAgICAgIGNhc2UgSWJBdXRoVHlwZXMuSldUOlxuICAgICAgICBhdXRoU3RyaW5nID0gXCJCZWFyZXIgXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJYkF1dGhUeXBlcy5CQVNJQ19BVVRIOlxuICAgICAgICBhdXRoU3RyaW5nID0gXCJCYXNpYyBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlc3Npb24kLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWVyZ2VNYXAoKHNlc3Npb24pID0+IHtcbiAgICAgICAgaWYgKHNlc3Npb24/LnZhbGlkICYmIHNlc3Npb24/LnNlcnZlckRhdGE/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgYXV0aFN0cmluZyArPSBzZXNzaW9uLnNlcnZlckRhdGEuYWNjZXNzVG9rZW47XG4gICAgICAgICAgYXV0aFJlcSA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldChcIkF1dGhvcml6YXRpb25cIiwgYXV0aFN0cmluZyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGF1dGhSZXEpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmliSHR0cEVuYWJsZUludGVyY2VwdG9ycykge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudXJsICE9PSB0aGlzLmliSHR0cEFQSUxvZ2luVXJsICYmIGVyci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIHRoaXMuaWJUb2FzdC5vcGVuKHRoaXMuaWJIdHRwVG9hc3RPbkxvZ2luRmFpbHVyZSwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgIHRoaXMubG9naW4ubG9nb3V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { throwError } from "rxjs";
|
|
3
|
+
import { catchError } from "rxjs/operators";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../ui/toast/toast.service";
|
|
6
|
+
import * as i2 from "@ngx-translate/core";
|
|
7
|
+
export class IbErrorInterceptor {
|
|
8
|
+
ibToast;
|
|
9
|
+
translate;
|
|
10
|
+
ibHttpEnableInterceptors;
|
|
11
|
+
ibHttpToastOnGenericFailure;
|
|
12
|
+
ibHttpToastErrorField;
|
|
13
|
+
ibHttpToastOnStatusCode;
|
|
14
|
+
ibHttpToastErrorCode;
|
|
15
|
+
constructor(ibToast, translate, ibHttpEnableInterceptors, ibHttpToastOnGenericFailure, ibHttpToastErrorField, ibHttpToastOnStatusCode, ibHttpToastErrorCode) {
|
|
16
|
+
this.ibToast = ibToast;
|
|
17
|
+
this.translate = translate;
|
|
18
|
+
this.ibHttpEnableInterceptors = ibHttpEnableInterceptors;
|
|
19
|
+
this.ibHttpToastOnGenericFailure = ibHttpToastOnGenericFailure;
|
|
20
|
+
this.ibHttpToastErrorField = ibHttpToastErrorField;
|
|
21
|
+
this.ibHttpToastOnStatusCode = ibHttpToastOnStatusCode;
|
|
22
|
+
this.ibHttpToastErrorCode = ibHttpToastErrorCode;
|
|
23
|
+
}
|
|
24
|
+
intercept(request, next) {
|
|
25
|
+
return next.handle(request).pipe(catchError((err) => {
|
|
26
|
+
if (!this.ibHttpEnableInterceptors) {
|
|
27
|
+
return throwError(() => err);
|
|
28
|
+
}
|
|
29
|
+
if ([200, 401].indexOf(err.status) === -1) {
|
|
30
|
+
let errorMessage = this.ibHttpToastOnGenericFailure;
|
|
31
|
+
if (this.ibHttpToastOnStatusCode[err.status]) {
|
|
32
|
+
errorMessage = this.ibHttpToastOnStatusCode[err.status];
|
|
33
|
+
}
|
|
34
|
+
if (this.ibHttpToastErrorField &&
|
|
35
|
+
err.error &&
|
|
36
|
+
err.error[this.ibHttpToastErrorField]) {
|
|
37
|
+
errorMessage = err.error[this.ibHttpToastErrorField];
|
|
38
|
+
}
|
|
39
|
+
if (this.ibHttpToastErrorCode &&
|
|
40
|
+
err.error &&
|
|
41
|
+
err.error[this.ibHttpToastErrorCode]) {
|
|
42
|
+
const codeError = `shared.ibHttp.error${err.error[this.ibHttpToastErrorCode]}`;
|
|
43
|
+
const instant = this.translate.instant(codeError);
|
|
44
|
+
if (instant !==
|
|
45
|
+
`shared.ibHttp.error${err.error[this.ibHttpToastErrorCode]}`) {
|
|
46
|
+
errorMessage = instant;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
this.ibToast.open(errorMessage, "error");
|
|
50
|
+
}
|
|
51
|
+
return throwError(() => err);
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbErrorInterceptor, deps: [{ token: i1.IbToastNotification }, { token: i2.TranslateService }, { token: "ibHttpEnableInterceptors" }, { token: "ibHttpToastOnGenericFailure" }, { token: "ibHttpToastErrorField" }, { token: "ibHttpToastOnStatusCode" }, { token: "ibHttpToastErrorCode" }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
55
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbErrorInterceptor, providedIn: "root" });
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbErrorInterceptor, decorators: [{
|
|
58
|
+
type: Injectable,
|
|
59
|
+
args: [{ providedIn: "root" }]
|
|
60
|
+
}], ctorParameters: () => [{ type: i1.IbToastNotification }, { type: i2.TranslateService }, { type: undefined, decorators: [{
|
|
61
|
+
type: Inject,
|
|
62
|
+
args: ["ibHttpEnableInterceptors"]
|
|
63
|
+
}] }, { type: undefined, decorators: [{
|
|
64
|
+
type: Inject,
|
|
65
|
+
args: ["ibHttpToastOnGenericFailure"]
|
|
66
|
+
}] }, { type: undefined, decorators: [{
|
|
67
|
+
type: Inject,
|
|
68
|
+
args: ["ibHttpToastErrorField"]
|
|
69
|
+
}] }, { type: undefined, decorators: [{
|
|
70
|
+
type: Inject,
|
|
71
|
+
args: ["ibHttpToastOnStatusCode"]
|
|
72
|
+
}] }, { type: undefined, decorators: [{
|
|
73
|
+
type: Inject,
|
|
74
|
+
args: ["ibHttpToastErrorCode"]
|
|
75
|
+
}] }] });
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvaHR0cC9odHRwL2Vycm9yLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSTVDLE1BQU0sT0FBTyxrQkFBa0I7SUFFbkI7SUFDQTtJQUVEO0lBRUE7SUFDaUM7SUFDRTtJQUNIO0lBVHpDLFlBQ1UsT0FBNEIsRUFDNUIsU0FBMkIsRUFFNUIsd0JBQWlDLEVBRWpDLDJCQUFtQyxFQUNGLHFCQUE2QixFQUMzQix1QkFBNEIsRUFDL0Isb0JBQTRCO1FBUjNELFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBRTVCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBUztRQUVqQyxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQVE7UUFDRiwwQkFBcUIsR0FBckIscUJBQXFCLENBQVE7UUFDM0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFLO1FBQy9CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBUTtJQUNsRSxDQUFDO0lBRUosU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzlCLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7Z0JBRXBELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUM3QyxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFFRCxJQUNFLElBQUksQ0FBQyxxQkFBcUI7b0JBQzFCLEdBQUcsQ0FBQyxLQUFLO29CQUNULEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQ3JDLENBQUM7b0JBQ0QsWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3ZELENBQUM7Z0JBRUQsSUFDRSxJQUFJLENBQUMsb0JBQW9CO29CQUN6QixHQUFHLENBQUMsS0FBSztvQkFDVCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUNwQyxDQUFDO29CQUNELE1BQU0sU0FBUyxHQUFHLHNCQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FDckMsRUFBRSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNsRCxJQUNFLE9BQU87d0JBQ1Asc0JBQXNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFDNUQsQ0FBQzt3QkFDRCxZQUFZLEdBQUcsT0FBTyxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0ExRFUsa0JBQWtCLHFGQUluQiwwQkFBMEIsYUFFMUIsNkJBQTZCLGFBRTdCLHVCQUF1QixhQUN2Qix5QkFBeUIsYUFDekIsc0JBQXNCOzJHQVZyQixrQkFBa0IsY0FETCxNQUFNOzsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBSzdCLE1BQU07MkJBQUMsMEJBQTBCOzswQkFFakMsTUFBTTsyQkFBQyw2QkFBNkI7OzBCQUVwQyxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBQzlCLE1BQU07MkJBQUMseUJBQXlCOzswQkFDaEMsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEliVG9hc3ROb3RpZmljYXRpb24gfSBmcm9tIFwiLi4vLi4vdWkvdG9hc3QvdG9hc3Quc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSWJFcnJvckludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpYlRvYXN0OiBJYlRvYXN0Tm90aWZpY2F0aW9uLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoXCJpYkh0dHBFbmFibGVJbnRlcmNlcHRvcnNcIilcbiAgICBwdWJsaWMgaWJIdHRwRW5hYmxlSW50ZXJjZXB0b3JzOiBib29sZWFuLFxuICAgIEBJbmplY3QoXCJpYkh0dHBUb2FzdE9uR2VuZXJpY0ZhaWx1cmVcIilcbiAgICBwdWJsaWMgaWJIdHRwVG9hc3RPbkdlbmVyaWNGYWlsdXJlOiBzdHJpbmcsXG4gICAgQEluamVjdChcImliSHR0cFRvYXN0RXJyb3JGaWVsZFwiKSBwdWJsaWMgaWJIdHRwVG9hc3RFcnJvckZpZWxkOiBzdHJpbmcsXG4gICAgQEluamVjdChcImliSHR0cFRvYXN0T25TdGF0dXNDb2RlXCIpIHB1YmxpYyBpYkh0dHBUb2FzdE9uU3RhdHVzQ29kZTogYW55LFxuICAgIEBJbmplY3QoXCJpYkh0dHBUb2FzdEVycm9yQ29kZVwiKSBwdWJsaWMgaWJIdHRwVG9hc3RFcnJvckNvZGU6IHN0cmluZ1xuICApIHt9XG5cbiAgaW50ZXJjZXB0KFxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pYkh0dHBFbmFibGVJbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbMjAwLCA0MDFdLmluZGV4T2YoZXJyLnN0YXR1cykgPT09IC0xKSB7XG4gICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IHRoaXMuaWJIdHRwVG9hc3RPbkdlbmVyaWNGYWlsdXJlO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaWJIdHRwVG9hc3RPblN0YXR1c0NvZGVbZXJyLnN0YXR1c10pIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHRoaXMuaWJIdHRwVG9hc3RPblN0YXR1c0NvZGVbZXJyLnN0YXR1c107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pYkh0dHBUb2FzdEVycm9yRmllbGQgJiZcbiAgICAgICAgICAgIGVyci5lcnJvciAmJlxuICAgICAgICAgICAgZXJyLmVycm9yW3RoaXMuaWJIdHRwVG9hc3RFcnJvckZpZWxkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLmVycm9yW3RoaXMuaWJIdHRwVG9hc3RFcnJvckZpZWxkXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmliSHR0cFRvYXN0RXJyb3JDb2RlICYmXG4gICAgICAgICAgICBlcnIuZXJyb3IgJiZcbiAgICAgICAgICAgIGVyci5lcnJvclt0aGlzLmliSHR0cFRvYXN0RXJyb3JDb2RlXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29kZUVycm9yID0gYHNoYXJlZC5pYkh0dHAuZXJyb3Ike1xuICAgICAgICAgICAgICBlcnIuZXJyb3JbdGhpcy5pYkh0dHBUb2FzdEVycm9yQ29kZV1cbiAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFudCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoY29kZUVycm9yKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaW5zdGFudCAhPT1cbiAgICAgICAgICAgICAgYHNoYXJlZC5pYkh0dHAuZXJyb3Ike2Vyci5lcnJvclt0aGlzLmliSHR0cFRvYXN0RXJyb3JDb2RlXX1gXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gaW5zdGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pYlRvYXN0Lm9wZW4oZXJyb3JNZXNzYWdlLCBcImVycm9yXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|