spiderly 19.0.0 → 19.0.1
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/eslint.config.js +32 -0
- package/ng-package.json +10 -0
- package/package.json +55 -67
- package/src/lib/components/auth/login/login.component.html +25 -0
- package/src/lib/components/auth/login/login.component.ts +77 -0
- package/src/lib/components/auth/partials/auth.component.html +29 -0
- package/src/lib/components/auth/partials/auth.component.ts +60 -0
- package/src/lib/components/auth/partials/login-verification.component.html +2 -0
- package/src/lib/components/auth/partials/login-verification.component.ts +41 -0
- package/src/lib/components/auth/partials/registration-verification.component.html +1 -0
- package/src/lib/components/auth/partials/registration-verification.component.ts +41 -0
- package/src/lib/components/auth/partials/verification-wrapper.component.html +39 -0
- package/src/lib/components/auth/partials/verification-wrapper.component.ts +68 -0
- package/src/lib/components/auth/registration/registration.component.html +31 -0
- package/src/lib/components/auth/registration/registration.component.ts +77 -0
- package/src/lib/components/base-details/role-base-details.component.html +33 -0
- package/src/lib/components/base-details/role-base-details.component.ts +194 -0
- package/src/lib/components/base-form/base-form copy.ts +356 -0
- package/src/lib/components/card-skeleton/card-skeleton.component.html +8 -0
- package/src/lib/components/card-skeleton/card-skeleton.component.ts +21 -0
- package/src/lib/components/footer/app.footer.component.ts +17 -0
- package/src/lib/components/footer/footer.component.html +3 -0
- package/src/lib/components/footer/footer.component.ts +17 -0
- package/src/lib/components/index-card/index-card.component.html +15 -0
- package/src/lib/components/index-card/index-card.component.ts +48 -0
- package/src/lib/components/info-card/info-card.component.html +18 -0
- package/src/lib/components/info-card/info-card.component.ts +29 -0
- package/src/lib/components/layout/layout-base.component.ts +140 -0
- package/src/lib/components/layout/sidebar/menuitem.component.html +40 -0
- package/src/lib/components/layout/sidebar/menuitem.component.ts +179 -0
- package/src/lib/components/layout/sidebar/sidebar-menu.component.html +6 -0
- package/src/lib/components/layout/sidebar/sidebar-menu.component.ts +44 -0
- package/src/lib/components/layout/sidebar/sidebar-menu.service.ts +22 -0
- package/src/lib/components/layout/sidebar/sidebar.component.html +1 -0
- package/src/lib/components/layout/sidebar/sidebar.component.ts +20 -0
- package/src/lib/components/layout/topbar/topbar.component.html +64 -0
- package/src/lib/components/layout/topbar/topbar.component.ts +137 -0
- package/src/lib/components/not-found/not-found.component.html +27 -0
- package/src/lib/components/not-found/not-found.component.ts +22 -0
- package/src/lib/components/required/required.component.html +1 -0
- package/src/lib/components/required/required.component.ts +13 -0
- package/src/lib/components/spiderly-buttons/google-button/google-button.component.html +5 -0
- package/src/lib/components/spiderly-buttons/google-button/google-button.component.ts +53 -0
- package/src/lib/components/spiderly-buttons/return-button/return-button.component.html +3 -0
- package/src/lib/components/spiderly-buttons/return-button/return-button.component.ts +35 -0
- package/src/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.html +14 -0
- package/src/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.ts +27 -0
- package/src/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.ts +61 -0
- package/src/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.html +15 -0
- package/src/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.ts +24 -0
- package/src/lib/components/spiderly-data-table/spiderly-data-table.component.html +93 -0
- package/{styles → src/lib}/components/spiderly-data-table/spiderly-data-table.component.scss +15 -0
- package/src/lib/components/spiderly-data-table/spiderly-data-table.component.ts +614 -0
- package/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.html +17 -0
- package/src/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.ts +39 -0
- package/src/lib/components/spiderly-form-control/spiderly-form-control.ts +60 -0
- package/src/lib/components/spiderly-panels/panel-body/panel-body.component.html +8 -0
- package/src/lib/components/spiderly-panels/panel-body/panel-body.component.ts +16 -0
- package/src/lib/components/spiderly-panels/panel-footer/panel-footer.component.html +8 -0
- package/{styles → src/lib}/components/spiderly-panels/panel-footer/panel-footer.component.scss +3 -3
- package/src/lib/components/spiderly-panels/panel-footer/panel-footer.component.ts +15 -0
- package/src/lib/components/spiderly-panels/panel-header/panel-header.component.html +25 -0
- package/src/lib/components/spiderly-panels/panel-header/panel-header.component.ts +69 -0
- package/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.html +7 -0
- package/src/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.ts +17 -0
- package/src/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.html +40 -0
- package/src/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.scss +11 -0
- package/src/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.ts +42 -0
- package/src/lib/components/spiderly-panels/spiderly-panels.module.ts +32 -0
- package/src/lib/controls/base-autocomplete-control.ts +17 -0
- package/src/lib/controls/base-control.ts +60 -0
- package/src/lib/controls/base-dropdown-control.ts +37 -0
- package/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.html +36 -0
- package/src/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.ts +56 -0
- package/src/lib/controls/spiderly-calendar/spiderly-calendar.component.html +21 -0
- package/src/lib/controls/spiderly-calendar/spiderly-calendar.component.ts +37 -0
- package/src/lib/controls/spiderly-checkbox/spiderly-checkbox.component.html +16 -0
- package/src/lib/controls/spiderly-checkbox/spiderly-checkbox.component.ts +38 -0
- package/src/lib/controls/spiderly-colorpick/spiderly-colorpick.component.html +33 -0
- package/src/lib/controls/spiderly-colorpick/spiderly-colorpick.component.ts +40 -0
- package/src/lib/controls/spiderly-controls.module.ts +61 -0
- package/src/lib/controls/spiderly-dropdown/spiderly-dropdown.component.html +27 -0
- package/src/lib/controls/spiderly-dropdown/spiderly-dropdown.component.ts +39 -0
- package/src/lib/controls/spiderly-editor/spiderly-editor.component.html +22 -0
- package/src/lib/controls/spiderly-editor/spiderly-editor.component.ts +58 -0
- package/src/lib/controls/spiderly-file/spiderly-file.component.html +54 -0
- package/src/lib/controls/spiderly-file/spiderly-file.component.ts +123 -0
- package/src/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.html +30 -0
- package/src/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.ts +38 -0
- package/src/lib/controls/spiderly-multiselect/spiderly-multiselect.component.html +23 -0
- package/src/lib/controls/spiderly-multiselect/spiderly-multiselect.component.ts +32 -0
- package/src/lib/controls/spiderly-number/spiderly-number.component.html +19 -0
- package/src/lib/controls/spiderly-number/spiderly-number.component.ts +37 -0
- package/src/lib/controls/spiderly-password/spiderly-password.component.html +17 -0
- package/src/lib/controls/spiderly-password/spiderly-password.component.ts +34 -0
- package/src/lib/controls/spiderly-textarea/spiderly-textarea.component.html +18 -0
- package/src/lib/controls/spiderly-textarea/spiderly-textarea.component.ts +32 -0
- package/src/lib/controls/spiderly-textbox/spiderly-textbox.component.html +23 -0
- package/src/lib/controls/spiderly-textbox/spiderly-textbox.component.ts +41 -0
- package/src/lib/entities/base-entity.ts +25 -0
- package/src/lib/entities/codebook.ts +23 -0
- package/src/lib/entities/init-company-auth-dialog-details.ts +22 -0
- package/src/lib/entities/init-top-bar-data.ts +35 -0
- package/src/lib/entities/is-authorized-for-save-event.ts +22 -0
- package/src/lib/entities/last-menu-icon-index-clicked.ts +18 -0
- package/src/lib/entities/lazy-load-selected-ids-result.ts +22 -0
- package/{lib/entities/menuchangeevent.d.ts → src/lib/entities/menuchangeevent.ts} +4 -4
- package/src/lib/entities/mime-type.ts +15 -0
- package/src/lib/entities/namebook.ts +22 -0
- package/src/lib/entities/primeng-option.ts +23 -0
- package/src/lib/entities/readonly-object.ts +1 -0
- package/src/lib/entities/security-entities.ts +548 -0
- package/src/lib/entities/simple-save-result.ts +19 -0
- package/src/lib/entities/spiderly-button.ts +30 -0
- package/{lib/entities/table-filter-context.d.ts → src/lib/entities/table-filter-context.ts} +6 -5
- package/src/lib/entities/table-filter-sort-meta.ts +5 -0
- package/{lib/entities/table-filter.d.ts → src/lib/entities/table-filter.ts} +48 -23
- package/src/lib/entities/table-response.ts +5 -0
- package/src/lib/enums/security-enums.ts +28 -0
- package/src/lib/enums/verification-type-codes.ts +5 -0
- package/src/lib/guards/auth.guard.ts +39 -0
- package/src/lib/guards/not-auth.guard.ts +32 -0
- package/src/lib/handlers/spiderly-error-handler.ts +32 -0
- package/src/lib/handlers/spiderly-transloco-fallback-strategy.ts +25 -0
- package/src/lib/interceptors/http-loading.interceptor.ts +21 -0
- package/src/lib/interceptors/json-parser.interceptor.ts +44 -0
- package/src/lib/interceptors/jwt.interceptor.ts +18 -0
- package/src/lib/interceptors/unauthorized.interceptor.ts +77 -0
- package/src/lib/modules/core.module.ts +22 -0
- package/src/lib/modules/primeng.module.ts +122 -0
- package/src/lib/modules/spiderly-transloco.module.ts +50 -0
- package/src/lib/services/api.service.security.ts +120 -0
- package/src/lib/services/app-initializer.ts +9 -0
- package/src/lib/services/app-layout-base.service.ts +184 -0
- package/src/lib/services/auth-base.service.ts +271 -0
- package/src/lib/services/base-form.service.ts +178 -0
- package/src/lib/services/config-base.service.ts +36 -0
- package/src/lib/services/helper-functions.ts +288 -0
- package/src/lib/services/spiderly-message.service.ts +66 -0
- package/src/lib/services/spiderly-transloco-loader.ts +15 -0
- package/src/lib/services/translate-labels-abstract.service.ts +13 -0
- package/src/lib/services/validator-abstract.service.ts +63 -0
- package/{styles → src/lib}/styles/layout/_config.scss +2 -2
- package/{styles → src/lib}/styles/layout/_content.scss +2 -0
- package/{styles → src/lib}/styles/layout/_footer.scss +2 -0
- package/{styles → src/lib}/styles/layout/_main.scss +6 -3
- package/{styles → src/lib}/styles/layout/_menu.scss +10 -7
- package/{styles → src/lib}/styles/layout/_mixins.scss +2 -2
- package/{styles → src/lib}/styles/layout/_preloading.scss +1 -1
- package/{styles → src/lib}/styles/layout/_responsive.scss +2 -0
- package/{styles → src/lib}/styles/layout/_spiderly-controls.scss +2 -0
- package/{styles → src/lib}/styles/layout/_topbar.scss +16 -11
- package/{styles → src/lib}/styles/layout/_typography.scss +1 -1
- package/{styles → src/lib}/styles/layout/_utils.scss +1 -1
- package/{styles → src/lib}/styles/layout/_variables.scss +59 -53
- package/src/lib/styles/layout/layout.scss +13 -0
- package/{styles → src/lib}/styles/shared.scss +70 -42
- package/src/lib/styles/styles.scss +3 -0
- package/{public-api.d.ts → src/public-api.ts} +103 -90
- package/tsconfig.lib.json +17 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/esm2022/lib/components/auth/auth.module.mjs +0 -65
- package/esm2022/lib/components/auth/login/login.component.mjs +0 -60
- package/esm2022/lib/components/auth/partials/auth.component.mjs +0 -53
- package/esm2022/lib/components/auth/partials/login-verification.component.mjs +0 -39
- package/esm2022/lib/components/auth/partials/registration-verification.component.mjs +0 -37
- package/esm2022/lib/components/auth/partials/verification-wrapper.component.mjs +0 -74
- package/esm2022/lib/components/auth/registration/registration.component.mjs +0 -59
- package/esm2022/lib/components/base-details/role-base-details.component.mjs +0 -171
- package/esm2022/lib/components/base-form/base-form copy.mjs +0 -247
- package/esm2022/lib/components/card-skeleton/card-skeleton.component.mjs +0 -25
- package/esm2022/lib/components/footer/footer.component.mjs +0 -16
- package/esm2022/lib/components/index-card/index-card.component.mjs +0 -57
- package/esm2022/lib/components/info-card/info-card.component.mjs +0 -29
- package/esm2022/lib/components/layout/layout-base.component.mjs +0 -121
- package/esm2022/lib/components/layout/sidebar/menuitem.component.mjs +0 -161
- package/esm2022/lib/components/layout/sidebar/sidebar-menu.component.mjs +0 -34
- package/esm2022/lib/components/layout/sidebar/sidebar-menu.service.mjs +0 -26
- package/esm2022/lib/components/layout/sidebar/sidebar.component.mjs +0 -21
- package/esm2022/lib/components/layout/topbar/topbar.component.mjs +0 -115
- package/esm2022/lib/components/not-found/not-found.component.mjs +0 -20
- package/esm2022/lib/components/required/required.component.mjs +0 -12
- package/esm2022/lib/components/spiderly-buttons/google-button/google-button.component.mjs +0 -43
- package/esm2022/lib/components/spiderly-buttons/return-button/return-button.component.mjs +0 -37
- package/esm2022/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.mjs +0 -20
- package/esm2022/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.mjs +0 -68
- package/esm2022/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.mjs +0 -22
- package/esm2022/lib/components/spiderly-data-table/spiderly-data-table.component.mjs +0 -501
- package/esm2022/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.mjs +0 -42
- package/esm2022/lib/components/spiderly-form-control/spiderly-form-control.mjs +0 -36
- package/esm2022/lib/components/spiderly-panels/panel-body/panel-body.component.mjs +0 -19
- package/esm2022/lib/components/spiderly-panels/panel-footer/panel-footer.component.mjs +0 -14
- package/esm2022/lib/components/spiderly-panels/panel-header/panel-header.component.mjs +0 -49
- package/esm2022/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.mjs +0 -20
- package/esm2022/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.mjs +0 -63
- package/esm2022/lib/components/spiderly-panels/spiderly-panels.module.mjs +0 -49
- package/esm2022/lib/controls/base-autocomplete-control.mjs +0 -18
- package/esm2022/lib/controls/base-control.mjs +0 -62
- package/esm2022/lib/controls/base-dropdown-control.mjs +0 -37
- package/esm2022/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.mjs +0 -60
- package/esm2022/lib/controls/spiderly-calendar/spiderly-calendar.component.mjs +0 -39
- package/esm2022/lib/controls/spiderly-checkbox/spiderly-checkbox.component.mjs +0 -45
- package/esm2022/lib/controls/spiderly-colorpick/spiderly-colorpick.component.mjs +0 -40
- package/esm2022/lib/controls/spiderly-controls.module.mjs +0 -112
- package/esm2022/lib/controls/spiderly-dropdown/spiderly-dropdown.component.mjs +0 -40
- package/esm2022/lib/controls/spiderly-editor/spiderly-editor.component.mjs +0 -59
- package/esm2022/lib/controls/spiderly-file/spiderly-file.component.mjs +0 -106
- package/esm2022/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.mjs +0 -38
- package/esm2022/lib/controls/spiderly-multiselect/spiderly-multiselect.component.mjs +0 -34
- package/esm2022/lib/controls/spiderly-number/spiderly-number.component.mjs +0 -44
- package/esm2022/lib/controls/spiderly-password/spiderly-password.component.mjs +0 -37
- package/esm2022/lib/controls/spiderly-textarea/spiderly-textarea.component.mjs +0 -34
- package/esm2022/lib/controls/spiderly-textbox/spiderly-textbox.component.mjs +0 -45
- package/esm2022/lib/entities/base-entity.mjs +0 -18
- package/esm2022/lib/entities/codebook.mjs +0 -10
- package/esm2022/lib/entities/init-company-auth-dialog-details.mjs +0 -9
- package/esm2022/lib/entities/init-top-bar-data.mjs +0 -12
- package/esm2022/lib/entities/is-authorized-for-save-event.mjs +0 -9
- package/esm2022/lib/entities/last-menu-icon-index-clicked.mjs +0 -8
- package/esm2022/lib/entities/lazy-load-selected-ids-result.mjs +0 -11
- package/esm2022/lib/entities/menuchangeevent.mjs +0 -3
- package/esm2022/lib/entities/mime-type.mjs +0 -15
- package/esm2022/lib/entities/namebook.mjs +0 -9
- package/esm2022/lib/entities/primeng-option.mjs +0 -9
- package/esm2022/lib/entities/security-entities.mjs +0 -169
- package/esm2022/lib/entities/simple-save-result.mjs +0 -9
- package/esm2022/lib/entities/spiderly-button.mjs +0 -11
- package/esm2022/lib/entities/table-filter-context.mjs +0 -3
- package/esm2022/lib/entities/table-filter-sort-meta.mjs +0 -3
- package/esm2022/lib/entities/table-filter.mjs +0 -15
- package/esm2022/lib/entities/table-response.mjs +0 -3
- package/esm2022/lib/enums/security-enums.mjs +0 -26
- package/esm2022/lib/enums/verification-type-codes.mjs +0 -6
- package/esm2022/lib/guards/auth.guard.mjs +0 -40
- package/esm2022/lib/guards/not-auth.guard.mjs +0 -32
- package/esm2022/lib/handlers/spiderly-error-handler.mjs +0 -30
- package/esm2022/lib/handlers/spiderly-transloco-fallback-strategy.mjs +0 -24
- package/esm2022/lib/interceptors/http-loading.interceptor.mjs +0 -27
- package/esm2022/lib/interceptors/json-parser.interceptor.mjs +0 -47
- package/esm2022/lib/interceptors/jwt.interceptor.mjs +0 -27
- package/esm2022/lib/interceptors/unauthorized.interceptor.mjs +0 -64
- package/esm2022/lib/modules/core.module.mjs +0 -140
- package/esm2022/lib/modules/primeng.module.mjs +0 -278
- package/esm2022/lib/modules/spiderly-transloco.module.mjs +0 -42
- package/esm2022/lib/services/api.service.security.mjs +0 -86
- package/esm2022/lib/services/app-initializer.mjs +0 -6
- package/esm2022/lib/services/app-layout-base.service.mjs +0 -132
- package/esm2022/lib/services/auth-base.service.mjs +0 -220
- package/esm2022/lib/services/base-form.service.mjs +0 -124
- package/esm2022/lib/services/config-base.service.mjs +0 -33
- package/esm2022/lib/services/helper-functions.mjs +0 -229
- package/esm2022/lib/services/spiderly-message.service.mjs +0 -64
- package/esm2022/lib/services/spiderly-transloco-loader.mjs +0 -20
- package/esm2022/lib/services/translate-labels-abstract.service.mjs +0 -15
- package/esm2022/lib/services/validator-abstract.service.mjs +0 -51
- package/esm2022/public-api.mjs +0 -94
- package/esm2022/spiderly.mjs +0 -5
- package/fesm2022/spiderly.mjs +0 -4805
- package/fesm2022/spiderly.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/components/auth/auth.module.d.ts +0 -17
- package/lib/components/auth/login/login.component.d.ts +0 -35
- package/lib/components/auth/partials/auth.component.d.ts +0 -21
- package/lib/components/auth/partials/login-verification.component.d.ts +0 -18
- package/lib/components/auth/partials/registration-verification.component.d.ts +0 -17
- package/lib/components/auth/partials/verification-wrapper.component.d.ts +0 -31
- package/lib/components/auth/registration/registration.component.d.ts +0 -34
- package/lib/components/base-details/role-base-details.component.d.ts +0 -50
- package/lib/components/base-form/base-form copy.d.ts +0 -54
- package/lib/components/card-skeleton/card-skeleton.component.d.ts +0 -12
- package/lib/components/footer/footer.component.d.ts +0 -9
- package/lib/components/index-card/index-card.component.d.ts +0 -22
- package/lib/components/info-card/info-card.component.d.ts +0 -11
- package/lib/components/layout/layout-base.component.d.ts +0 -37
- package/lib/components/layout/sidebar/menuitem.component.d.ts +0 -43
- package/lib/components/layout/sidebar/sidebar-menu.component.d.ts +0 -23
- package/lib/components/layout/sidebar/sidebar-menu.service.d.ts +0 -12
- package/lib/components/layout/sidebar/sidebar.component.d.ts +0 -11
- package/lib/components/layout/topbar/topbar.component.d.ts +0 -45
- package/lib/components/not-found/not-found.component.d.ts +0 -9
- package/lib/components/required/required.component.d.ts +0 -6
- package/lib/components/spiderly-buttons/google-button/google-button.component.d.ts +0 -17
- package/lib/components/spiderly-buttons/return-button/return-button.component.d.ts +0 -10
- package/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.d.ts +0 -6
- package/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.d.ts +0 -27
- package/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.d.ts +0 -8
- package/lib/components/spiderly-data-table/spiderly-data-table.component.d.ts +0 -157
- package/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.d.ts +0 -11
- package/lib/components/spiderly-form-control/spiderly-form-control.d.ts +0 -37
- package/lib/components/spiderly-panels/panel-body/panel-body.component.d.ts +0 -9
- package/lib/components/spiderly-panels/panel-footer/panel-footer.component.d.ts +0 -8
- package/lib/components/spiderly-panels/panel-header/panel-header.component.d.ts +0 -29
- package/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.d.ts +0 -10
- package/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.d.ts +0 -25
- package/lib/components/spiderly-panels/spiderly-panels.module.d.ts +0 -13
- package/lib/controls/base-autocomplete-control.d.ts +0 -9
- package/lib/controls/base-control.d.ts +0 -23
- package/lib/controls/base-dropdown-control.d.ts +0 -18
- package/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.d.ts +0 -18
- package/lib/controls/spiderly-calendar/spiderly-calendar.component.d.ts +0 -13
- package/lib/controls/spiderly-checkbox/spiderly-checkbox.component.d.ts +0 -14
- package/lib/controls/spiderly-colorpick/spiderly-colorpick.component.d.ts +0 -11
- package/lib/controls/spiderly-controls.module.d.ts +0 -22
- package/lib/controls/spiderly-dropdown/spiderly-dropdown.component.d.ts +0 -14
- package/lib/controls/spiderly-editor/spiderly-editor.component.d.ts +0 -16
- package/lib/controls/spiderly-file/spiderly-file.component.d.ts +0 -36
- package/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.d.ts +0 -13
- package/lib/controls/spiderly-multiselect/spiderly-multiselect.component.d.ts +0 -11
- package/lib/controls/spiderly-number/spiderly-number.component.d.ts +0 -15
- package/lib/controls/spiderly-password/spiderly-password.component.d.ts +0 -12
- package/lib/controls/spiderly-textarea/spiderly-textarea.component.d.ts +0 -11
- package/lib/controls/spiderly-textbox/spiderly-textbox.component.d.ts +0 -15
- package/lib/entities/base-entity.d.ts +0 -14
- package/lib/entities/codebook.d.ts +0 -9
- package/lib/entities/init-company-auth-dialog-details.d.ts +0 -9
- package/lib/entities/init-top-bar-data.d.ts +0 -16
- package/lib/entities/is-authorized-for-save-event.d.ts +0 -9
- package/lib/entities/last-menu-icon-index-clicked.d.ts +0 -7
- package/lib/entities/lazy-load-selected-ids-result.d.ts +0 -9
- package/lib/entities/mime-type.d.ts +0 -11
- package/lib/entities/namebook.d.ts +0 -9
- package/lib/entities/primeng-option.d.ts +0 -9
- package/lib/entities/security-entities.d.ts +0 -211
- package/lib/entities/simple-save-result.d.ts +0 -7
- package/lib/entities/spiderly-button.d.ts +0 -13
- package/lib/entities/table-filter-sort-meta.d.ts +0 -4
- package/lib/entities/table-response.d.ts +0 -4
- package/lib/enums/security-enums.d.ts +0 -22
- package/lib/enums/verification-type-codes.d.ts +0 -4
- package/lib/guards/auth.guard.d.ts +0 -15
- package/lib/guards/not-auth.guard.d.ts +0 -12
- package/lib/handlers/spiderly-error-handler.d.ts +0 -14
- package/lib/handlers/spiderly-transloco-fallback-strategy.d.ts +0 -13
- package/lib/interceptors/http-loading.interceptor.d.ts +0 -11
- package/lib/interceptors/json-parser.interceptor.d.ts +0 -11
- package/lib/interceptors/jwt.interceptor.d.ts +0 -11
- package/lib/interceptors/unauthorized.interceptor.d.ts +0 -16
- package/lib/modules/core.module.d.ts +0 -13
- package/lib/modules/primeng.module.d.ts +0 -42
- package/lib/modules/spiderly-transloco.module.d.ts +0 -14
- package/lib/services/api.service.security.d.ts +0 -35
- package/lib/services/app-initializer.d.ts +0 -4
- package/lib/services/app-layout-base.service.d.ts +0 -60
- package/lib/services/auth-base.service.d.ts +0 -55
- package/lib/services/base-form.service.d.ts +0 -27
- package/lib/services/config-base.service.d.ts +0 -24
- package/lib/services/helper-functions.d.ts +0 -37
- package/lib/services/spiderly-message.service.d.ts +0 -17
- package/lib/services/spiderly-transloco-loader.d.ts +0 -10
- package/lib/services/translate-labels-abstract.service.d.ts +0 -7
- package/lib/services/validator-abstract.service.d.ts +0 -13
- package/styles/styles/layout/layout.scss +0 -13
- package/styles/styles/styles.scss +0 -6
- package/styles/styles/theme/base/_colors.scss +0 -18
- package/styles/styles/theme/base/_common.scss +0 -75
- package/styles/styles/theme/base/_components.scss +0 -106
- package/styles/styles/theme/base/_mixins.scss +0 -343
- package/styles/styles/theme/base/components/button/_button.scss +0 -564
- package/styles/styles/theme/base/components/button/_speeddial.scss +0 -96
- package/styles/styles/theme/base/components/button/_splitbutton.scss +0 -381
- package/styles/styles/theme/base/components/data/_carousel.scss +0 -37
- package/styles/styles/theme/base/components/data/_datatable.scss +0 -338
- package/styles/styles/theme/base/components/data/_dataview.scss +0 -55
- package/styles/styles/theme/base/components/data/_filter.scss +0 -138
- package/styles/styles/theme/base/components/data/_orderlist.scss +0 -103
- package/styles/styles/theme/base/components/data/_organizationchart.scss +0 -50
- package/styles/styles/theme/base/components/data/_paginator.scss +0 -92
- package/styles/styles/theme/base/components/data/_picklist.scss +0 -103
- package/styles/styles/theme/base/components/data/_timeline.scss +0 -81
- package/styles/styles/theme/base/components/data/_tree.scss +0 -149
- package/styles/styles/theme/base/components/data/_treetable.scss +0 -256
- package/styles/styles/theme/base/components/data/_virtualscroller.scss +0 -28
- package/styles/styles/theme/base/components/file/_fileupload.scss +0 -64
- package/styles/styles/theme/base/components/input/_autocomplete.scss +0 -118
- package/styles/styles/theme/base/components/input/_calendar.scss +0 -263
- package/styles/styles/theme/base/components/input/_cascadeselect.scss +0 -130
- package/styles/styles/theme/base/components/input/_checkbox.scss +0 -90
- package/styles/styles/theme/base/components/input/_chips.scss +0 -55
- package/styles/styles/theme/base/components/input/_colorpicker.scss +0 -26
- package/styles/styles/theme/base/components/input/_dropdown.scss +0 -152
- package/styles/styles/theme/base/components/input/_editor.scss +0 -122
- package/styles/styles/theme/base/components/input/_inputgroup.scss +0 -75
- package/styles/styles/theme/base/components/input/_inputmask.scss +0 -16
- package/styles/styles/theme/base/components/input/_inputnumber.scss +0 -28
- package/styles/styles/theme/base/components/input/_inputswitch.scss +0 -60
- package/styles/styles/theme/base/components/input/_inputtext.scss +0 -100
- package/styles/styles/theme/base/components/input/_listbox.scss +0 -82
- package/styles/styles/theme/base/components/input/_multiselect.scss +0 -173
- package/styles/styles/theme/base/components/input/_password.scss +0 -52
- package/styles/styles/theme/base/components/input/_radiobutton.scss +0 -78
- package/styles/styles/theme/base/components/input/_rating.scss +0 -55
- package/styles/styles/theme/base/components/input/_selectbutton.scss +0 -50
- package/styles/styles/theme/base/components/input/_slider.scss +0 -71
- package/styles/styles/theme/base/components/input/_togglebutton.scss +0 -48
- package/styles/styles/theme/base/components/input/_treeselect.scss +0 -139
- package/styles/styles/theme/base/components/menu/_breadcrumb.scss +0 -42
- package/styles/styles/theme/base/components/menu/_contextmenu.scss +0 -39
- package/styles/styles/theme/base/components/menu/_dock.scss +0 -95
- package/styles/styles/theme/base/components/menu/_megamenu.scss +0 -55
- package/styles/styles/theme/base/components/menu/_menu.scss +0 -37
- package/styles/styles/theme/base/components/menu/_menubar.scss +0 -141
- package/styles/styles/theme/base/components/menu/_panelmenu.scss +0 -153
- package/styles/styles/theme/base/components/menu/_slidemenu.scss +0 -59
- package/styles/styles/theme/base/components/menu/_steps.scss +0 -56
- package/styles/styles/theme/base/components/menu/_tabmenu.scss +0 -74
- package/styles/styles/theme/base/components/menu/_tieredmenu.scss +0 -43
- package/styles/styles/theme/base/components/messages/_inlinemessage.scss +0 -69
- package/styles/styles/theme/base/components/messages/_message.scss +0 -107
- package/styles/styles/theme/base/components/messages/_toast.scss +0 -103
- package/styles/styles/theme/base/components/misc/_avatar.scss +0 -30
- package/styles/styles/theme/base/components/misc/_badge.scss +0 -48
- package/styles/styles/theme/base/components/misc/_blockui.scss +0 -0
- package/styles/styles/theme/base/components/misc/_chip.scss +0 -42
- package/styles/styles/theme/base/components/misc/_inplace.scss +0 -17
- package/styles/styles/theme/base/components/misc/_progressbar.scss +0 -17
- package/styles/styles/theme/base/components/misc/_scrolltop.scss +0 -25
- package/styles/styles/theme/base/components/misc/_skeleton.scss +0 -8
- package/styles/styles/theme/base/components/misc/_tag.scss +0 -40
- package/styles/styles/theme/base/components/misc/_terminal.scss +0 -12
- package/styles/styles/theme/base/components/multimedia/_galleria.scss +0 -155
- package/styles/styles/theme/base/components/multimedia/_image.scss +0 -49
- package/styles/styles/theme/base/components/overlay/_confirmpopup.scss +0 -72
- package/styles/styles/theme/base/components/overlay/_dialog.scss +0 -73
- package/styles/styles/theme/base/components/overlay/_overlaypanel.scss +0 -64
- package/styles/styles/theme/base/components/overlay/_sidebar.scss +0 -27
- package/styles/styles/theme/base/components/overlay/_tooltip.scss +0 -33
- package/styles/styles/theme/base/components/panel/_accordion.scss +0 -119
- package/styles/styles/theme/base/components/panel/_card.scss +0 -30
- package/styles/styles/theme/base/components/panel/_divider.scss +0 -31
- package/styles/styles/theme/base/components/panel/_fieldset.scss +0 -47
- package/styles/styles/theme/base/components/panel/_panel.scss +0 -58
- package/styles/styles/theme/base/components/panel/_scrollpanel.scss +0 -6
- package/styles/styles/theme/base/components/panel/_splitter.scss +0 -19
- package/styles/styles/theme/base/components/panel/_tabview.scss +0 -82
- package/styles/styles/theme/base/components/panel/_toolbar.scss +0 -11
- package/styles/styles/theme/saga/_extensions.scss +0 -27
- package/styles/styles/theme/saga/_variables.scss +0 -1
- package/styles/styles/theme/saga/saga-blue/_extensions.scss +0 -2
- package/styles/styles/theme/saga/saga-blue/_fonts.scss +0 -1
- package/styles/styles/theme/saga/saga-blue/_variables.scss +0 -1
- package/styles/styles/theme/saga/saga-blue/theme.scss +0 -4
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { provideTransloco, TranslocoModule } from '@jsverse/transloco';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { SpiderlyTranslocoLoader } from '../services/spiderly-transloco-loader';
|
|
4
|
-
import { provideTranslocoPreloadLangs } from '@jsverse/transloco-preload-langs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class SpiderlyTranslocoModule {
|
|
7
|
-
static forRoot(config) {
|
|
8
|
-
return {
|
|
9
|
-
ngModule: SpiderlyTranslocoModule,
|
|
10
|
-
providers: [
|
|
11
|
-
provideTranslocoPreloadLangs(['sr-Latn-RS']),
|
|
12
|
-
provideTransloco({
|
|
13
|
-
config: {
|
|
14
|
-
availableLangs: config?.availableLangs ?? [
|
|
15
|
-
'en', 'en.generated',
|
|
16
|
-
'sr-Latn-RS', 'sr-Latn-RS.generated',
|
|
17
|
-
],
|
|
18
|
-
defaultLang: config?.defaultLang ?? 'en',
|
|
19
|
-
fallbackLang: config?.fallbackLang ?? 'en.generated',
|
|
20
|
-
missingHandler: {
|
|
21
|
-
useFallbackTranslation: true,
|
|
22
|
-
logMissingKey: false,
|
|
23
|
-
},
|
|
24
|
-
reRenderOnLangChange: true,
|
|
25
|
-
},
|
|
26
|
-
loader: SpiderlyTranslocoLoader
|
|
27
|
-
}),
|
|
28
|
-
],
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
32
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, imports: [TranslocoModule], exports: [TranslocoModule] }); }
|
|
33
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, imports: [TranslocoModule, TranslocoModule] }); }
|
|
34
|
-
}
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, decorators: [{
|
|
36
|
-
type: NgModule,
|
|
37
|
-
args: [{
|
|
38
|
-
imports: [TranslocoModule],
|
|
39
|
-
exports: [TranslocoModule],
|
|
40
|
-
}]
|
|
41
|
-
}] });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVybHktdHJhbnNsb2NvLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvbW9kdWxlcy9zcGlkZXJseS10cmFuc2xvY28ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0YsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBTWhGLE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFnQztRQUM3QyxPQUFPO1lBQ0wsUUFBUSxFQUFFLHVCQUF1QjtZQUNqQyxTQUFTLEVBQUU7Z0JBQ1QsNEJBQTRCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDNUMsZ0JBQWdCLENBQUM7b0JBQ2YsTUFBTSxFQUFFO3dCQUNOLGNBQWMsRUFBRSxNQUFNLEVBQUUsY0FBYyxJQUFJOzRCQUN4QyxJQUFJLEVBQUUsY0FBYzs0QkFDcEIsWUFBWSxFQUFFLHNCQUFzQjt5QkFDckM7d0JBQ0QsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLElBQUksSUFBSTt3QkFDeEMsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksY0FBYzt3QkFDcEQsY0FBYyxFQUFFOzRCQUNkLHNCQUFzQixFQUFFLElBQUk7NEJBQzVCLGFBQWEsRUFBRSxLQUFLO3lCQUNyQjt3QkFDRCxvQkFBb0IsRUFBRSxJQUFJO3FCQUMzQjtvQkFDRCxNQUFNLEVBQUUsdUJBQXVCO2lCQUNoQyxDQUFDO2FBQ0g7U0FDRixDQUFDO0lBQ0osQ0FBQzsrR0F6QlUsdUJBQXVCO2dIQUF2Qix1QkFBdUIsWUFIeEIsZUFBZSxhQUNmLGVBQWU7Z0hBRWQsdUJBQXVCLFlBSHhCLGVBQWUsRUFDZixlQUFlOzs0RkFFZCx1QkFBdUI7a0JBSm5DLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvdmlkZVRyYW5zbG9jbywgcHJvdmlkZVRyYW5zbG9jb0xvYWRlciwgVHJhbnNsb2NvTW9kdWxlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcclxuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFNwaWRlcmx5VHJhbnNsb2NvTG9hZGVyIH0gZnJvbSAnLi4vc2VydmljZXMvc3BpZGVybHktdHJhbnNsb2NvLWxvYWRlcic7XHJcbmltcG9ydCB7IHByb3ZpZGVUcmFuc2xvY29QcmVsb2FkTGFuZ3MgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28tcHJlbG9hZC1sYW5ncyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtUcmFuc2xvY29Nb2R1bGVdLFxyXG4gIGV4cG9ydHM6IFtUcmFuc2xvY29Nb2R1bGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BpZGVybHlUcmFuc2xvY29Nb2R1bGUge1xyXG5cclxuICBzdGF0aWMgZm9yUm9vdChjb25maWc/OiBTcGlkZXJseVRyYW5zbG9jb0NvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8U3BpZGVybHlUcmFuc2xvY29Nb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBTcGlkZXJseVRyYW5zbG9jb01vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgcHJvdmlkZVRyYW5zbG9jb1ByZWxvYWRMYW5ncyhbJ3NyLUxhdG4tUlMnXSksXHJcbiAgICAgICAgcHJvdmlkZVRyYW5zbG9jbyh7XHJcbiAgICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3M6IGNvbmZpZz8uYXZhaWxhYmxlTGFuZ3MgPz8gW1xyXG4gICAgICAgICAgICAgICdlbicsICdlbi5nZW5lcmF0ZWQnLFxyXG4gICAgICAgICAgICAgICdzci1MYXRuLVJTJywgJ3NyLUxhdG4tUlMuZ2VuZXJhdGVkJywgXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGRlZmF1bHRMYW5nOiBjb25maWc/LmRlZmF1bHRMYW5nID8/ICdlbicsXHJcbiAgICAgICAgICAgIGZhbGxiYWNrTGFuZzogY29uZmlnPy5mYWxsYmFja0xhbmcgPz8gJ2VuLmdlbmVyYXRlZCcsXHJcbiAgICAgICAgICAgIG1pc3NpbmdIYW5kbGVyOiB7XHJcbiAgICAgICAgICAgICAgdXNlRmFsbGJhY2tUcmFuc2xhdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICBsb2dNaXNzaW5nS2V5OiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVSZW5kZXJPbkxhbmdDaGFuZ2U6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbG9hZGVyOiBTcGlkZXJseVRyYW5zbG9jb0xvYWRlclxyXG4gICAgICAgIH0pLFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNwaWRlcmx5VHJhbnNsb2NvQ29uZmlnIHtcclxuICBhdmFpbGFibGVMYW5nczogc3RyaW5nW107XHJcbiAgZGVmYXVsdExhbmc6IHN0cmluZztcclxuICBmYWxsYmFja0xhbmc6IHN0cmluZztcclxufSJdfQ==
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common/http";
|
|
4
|
-
import * as i2 from "./config-base.service";
|
|
5
|
-
export class ApiSecurityService {
|
|
6
|
-
constructor(http, config) {
|
|
7
|
-
this.http = http;
|
|
8
|
-
this.config = config;
|
|
9
|
-
//#region Authentication
|
|
10
|
-
this.register = (request) => {
|
|
11
|
-
return this.http.post(`${this.config.apiUrl}/Security/Register`, request, this.config.httpOptions);
|
|
12
|
-
};
|
|
13
|
-
this.sendRegistrationVerificationEmail = (registrationDTO) => {
|
|
14
|
-
return this.http.post(`${this.config.apiUrl}/Security/SendRegistrationVerificationEmail`, registrationDTO, this.config.httpOptions);
|
|
15
|
-
};
|
|
16
|
-
this.login = (request) => {
|
|
17
|
-
return this.http.post(`${this.config.apiUrl}/Security/Login`, request, this.config.httpOptions);
|
|
18
|
-
};
|
|
19
|
-
this.loginExternal = (externalProviderDTO) => {
|
|
20
|
-
return this.http.post(`${this.config.apiUrl}/Security/LoginExternal`, externalProviderDTO, this.config.httpOptions);
|
|
21
|
-
};
|
|
22
|
-
this.sendLoginVerificationEmail = (loginDTO) => {
|
|
23
|
-
return this.http.post(`${this.config.apiUrl}/Security/SendLoginVerificationEmail`, loginDTO, this.config.httpOptions);
|
|
24
|
-
};
|
|
25
|
-
this.logout = (browserId) => {
|
|
26
|
-
return this.http.get(`${this.config.apiUrl}/Security/Logout?browserId=${browserId}`);
|
|
27
|
-
};
|
|
28
|
-
this.refreshToken = (request) => {
|
|
29
|
-
return this.http.post(`${this.config.apiUrl}/Security/RefreshToken`, request, this.config.httpOptions);
|
|
30
|
-
};
|
|
31
|
-
//#endregion
|
|
32
|
-
//#region User
|
|
33
|
-
this.getCurrentUser = () => {
|
|
34
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUser`, this.config.httpSkipSpinnerOptions);
|
|
35
|
-
};
|
|
36
|
-
this.getCurrentUserPermissionCodes = () => {
|
|
37
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUserPermissionCodes`, this.config.httpSkipSpinnerOptions);
|
|
38
|
-
};
|
|
39
|
-
//#endregion
|
|
40
|
-
//#region Role
|
|
41
|
-
this.getRoleTableData = (dto) => {
|
|
42
|
-
return this.http.post(`${this.config.apiUrl}/Security/GetRoleTableData`, dto, this.config.httpSkipSpinnerOptions);
|
|
43
|
-
};
|
|
44
|
-
this.exportRoleTableDataToExcel = (dto) => {
|
|
45
|
-
return this.http.post(`${this.config.apiUrl}/Security/ExportRoleTableDataToExcel`, dto, this.config.httpOptions);
|
|
46
|
-
};
|
|
47
|
-
this.deleteRole = (id) => {
|
|
48
|
-
return this.http.delete(`${this.config.apiUrl}/Security/DeleteRole?id=${id}`);
|
|
49
|
-
};
|
|
50
|
-
this.getRoleMainUIFormDTO = (id) => {
|
|
51
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetRoleMainUIFormDTO?id=${id}`);
|
|
52
|
-
};
|
|
53
|
-
this.getRole = (id) => {
|
|
54
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetRole?id=${id}`);
|
|
55
|
-
};
|
|
56
|
-
this.saveRole = (dto) => {
|
|
57
|
-
return this.http.put(`${this.config.apiUrl}/Security/SaveRole`, dto, this.config.httpOptions);
|
|
58
|
-
};
|
|
59
|
-
this.getUsersNamebookListForRole = (roleId) => {
|
|
60
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetUsersNamebookListForRole?roleId=${roleId}`, this.config.httpSkipSpinnerOptions);
|
|
61
|
-
};
|
|
62
|
-
this.getPermissionsDropdownListForRole = () => {
|
|
63
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetPermissionsDropdownListForRole`, this.config.httpSkipSpinnerOptions);
|
|
64
|
-
};
|
|
65
|
-
this.getPermissionsNamebookListForRole = (roleId) => {
|
|
66
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetPermissionsNamebookListForRole?roleId=${roleId}`, this.config.httpSkipSpinnerOptions);
|
|
67
|
-
};
|
|
68
|
-
this.getUsersAutocompleteListForRole = (limit, query) => {
|
|
69
|
-
return this.http.get(`${this.config.apiUrl}/Security/GetUsersAutocompleteListForRole?limit=${limit}&query=${query}`, this.config.httpSkipSpinnerOptions);
|
|
70
|
-
};
|
|
71
|
-
//#endregion
|
|
72
|
-
//#region Notification
|
|
73
|
-
this.getUnreadNotificationsCountForCurrentUser = () => {
|
|
74
|
-
return this.http.get(`${this.config.apiUrl}/Notification/GetUnreadNotificationsCountForCurrentUser`, this.config.httpSkipSpinnerOptions);
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiSecurityService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
78
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiSecurityService, providedIn: 'root' }); }
|
|
79
|
-
}
|
|
80
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiSecurityService, decorators: [{
|
|
81
|
-
type: Injectable,
|
|
82
|
-
args: [{
|
|
83
|
-
providedIn: 'root'
|
|
84
|
-
}]
|
|
85
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigBaseService }] });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2Uuc2VjdXJpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnNlY3VyaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFXM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixZQUNjLElBQWdCLEVBQ2hCLE1BQXlCO1FBRHpCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFLdkMsd0JBQXdCO1FBRXhCLGFBQVEsR0FBRyxDQUFDLE9BQWlDLEVBQTBCLEVBQUU7WUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuSCxDQUFDLENBQUE7UUFFRCxzQ0FBaUMsR0FBRyxDQUFDLGVBQTZCLEVBQThDLEVBQUU7WUFDOUcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBaUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sNkNBQTZDLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEssQ0FBQyxDQUFBO1FBRUQsVUFBSyxHQUFHLENBQUMsT0FBaUMsRUFBMEIsRUFBRTtZQUNsRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hILENBQUMsQ0FBQTtRQUVELGtCQUFhLEdBQUcsQ0FB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TSxtREFBbUQsS0FBSyxVQUFVLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6SyxDQUFDLENBQUE7UUFFRCxZQUFZO1FBRVosc0JBQXNCO1FBRXRCLDhDQUF5QyxHQUFHLEdBQXVCLEVBQUU7WUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSx5REFBeUQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDckosQ0FBQyxDQUFBO0lBL0ZELENBQUM7K0dBUFEsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGZixNQUFNOzs0RkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5hbWVib29rIH0gZnJvbSAnLi4vZW50aXRpZXMvbmFtZWJvb2snO1xyXG5pbXBvcnQgeyBUYWJsZUZpbHRlciB9IGZyb20gJy4uL2VudGl0aWVzL3RhYmxlLWZpbHRlcic7XHJcbmltcG9ydCB7IExvZ2luLCBSZWdpc3RyYXRpb24sIFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlc3VsdCwgUmVmcmVzaFRva2VuUmVxdWVzdCwgQXV0aFJlc3VsdCwgUm9sZSwgVXNlciwgRXh0ZXJuYWxQcm92aWRlciwgVmVyaWZpY2F0aW9uVG9rZW5SZXF1ZXN0LCBSb2xlU2F2ZUJvZHksIFJvbGVNYWluVUlGb3JtIH0gZnJvbSAnLi4vZW50aXRpZXMvc2VjdXJpdHktZW50aXRpZXMnO1xyXG5pbXBvcnQgeyBDb25maWdCYXNlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlUmVzcG9uc2UgfSBmcm9tICcuLi9lbnRpdGllcy90YWJsZS1yZXNwb25zZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaVNlY3VyaXR5U2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNvbmZpZzogQ29uZmlnQmFzZVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vI3JlZ2lvbiBBdXRoZW50aWNhdGlvblxyXG5cclxuICAgIHJlZ2lzdGVyID0gKHJlcXVlc3Q6IFZlcmlmaWNhdGlvblRva2VuUmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aFJlc3VsdD4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXV0aFJlc3VsdD4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9SZWdpc3RlcmAsIHJlcXVlc3QsIHRoaXMuY29uZmlnLmh0dHBPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uRW1haWwgPSAocmVnaXN0cmF0aW9uRFRPOiBSZWdpc3RyYXRpb24pOiBPYnNlcnZhYmxlPFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlc3VsdD4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uUmVzdWx0PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L1NlbmRSZWdpc3RyYXRpb25WZXJpZmljYXRpb25FbWFpbGAsIHJlZ2lzdHJhdGlvbkRUTywgdGhpcy5jb25maWcuaHR0cE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBsb2dpbiA9IChyZXF1ZXN0OiBWZXJpZmljYXRpb25Ub2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhSZXN1bHQ+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEF1dGhSZXN1bHQ+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vU2VjdXJpdHkvTG9naW5gLCByZXF1ZXN0LCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW5FeHRlcm5hbCA9IChleHRlcm5hbFByb3ZpZGVyRFRPOiBFeHRlcm5hbFByb3ZpZGVyKTogT2JzZXJ2YWJsZTxBdXRoUmVzdWx0PiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBdXRoUmVzdWx0PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0xvZ2luRXh0ZXJuYWxgLCBleHRlcm5hbFByb3ZpZGVyRFRPLCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZExvZ2luVmVyaWZpY2F0aW9uRW1haWwgPSAobG9naW5EVE86IExvZ2luKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9TZW5kTG9naW5WZXJpZmljYXRpb25FbWFpbGAsIGxvZ2luRFRPLCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxvZ291dCA9IChicm93c2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9Mb2dvdXQ/YnJvd3NlcklkPSR7YnJvd3NlcklkfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2hUb2tlbiA9IChyZXF1ZXN0OiBSZWZyZXNoVG9rZW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoUmVzdWx0PiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBdXRoUmVzdWx0PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L1JlZnJlc2hUb2tlbmAsIHJlcXVlc3QsIHRoaXMuY29uZmlnLmh0dHBPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gVXNlclxyXG5cclxuICAgIGdldEN1cnJlbnRVc2VyID0gKCk6IE9ic2VydmFibGU8VXNlcj4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVc2VyPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldEN1cnJlbnRVc2VyYCwgdGhpcy5jb25maWcuaHR0cFNraXBTcGlubmVyT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMgPSAoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxzdHJpbmdbXT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlc2AsIHRoaXMuY29uZmlnLmh0dHBTa2lwU3Bpbm5lck9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBSb2xlXHJcblxyXG4gICAgZ2V0Um9sZVRhYmxlRGF0YSA9IChkdG86IFRhYmxlRmlsdGVyKTogT2JzZXJ2YWJsZTxUYWJsZVJlc3BvbnNlPiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUYWJsZVJlc3BvbnNlPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldFJvbGVUYWJsZURhdGFgLCBkdG8sIHRoaXMuY29uZmlnLmh0dHBTa2lwU3Bpbm5lck9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFJvbGVUYWJsZURhdGFUb0V4Y2VsID0gKGR0bzogVGFibGVGaWx0ZXIpOiBPYnNlcnZhYmxlPGFueT4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0V4cG9ydFJvbGVUYWJsZURhdGFUb0V4Y2VsYCwgZHRvLCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUm9sZSA9IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0RlbGV0ZVJvbGU/aWQ9JHtpZH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSb2xlTWFpblVJRm9ybURUTyA9IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxSb2xlTWFpblVJRm9ybT4gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJvbGVNYWluVUlGb3JtPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldFJvbGVNYWluVUlGb3JtRFRPP2lkPSR7aWR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9sZSA9IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxSb2xlPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Um9sZT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRSb2xlP2lkPSR7aWR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVJvbGUgPSAoZHRvOiBSb2xlU2F2ZUJvZHkpOiBPYnNlcnZhYmxlPFJvbGU+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Um9sZT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9TYXZlUm9sZWAsIGR0bywgdGhpcy5jb25maWcuaHR0cE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJzTmFtZWJvb2tMaXN0Rm9yUm9sZSA9IChyb2xlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8TmFtZWJvb2tbXT4gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5hbWVib29rW10+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vU2VjdXJpdHkvR2V0VXNlcnNOYW1lYm9va0xpc3RGb3JSb2xlP3JvbGVJZD0ke3JvbGVJZH1gLCB0aGlzLmNvbmZpZy5odHRwU2tpcFNwaW5uZXJPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uc0Ryb3Bkb3duTGlzdEZvclJvbGUgPSAoKTogT2JzZXJ2YWJsZTxOYW1lYm9va1tdPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TmFtZWJvb2tbXT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRQZXJtaXNzaW9uc0Ryb3Bkb3duTGlzdEZvclJvbGVgLCB0aGlzLmNvbmZpZy5odHRwU2tpcFNwaW5uZXJPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uc05hbWVib29rTGlzdEZvclJvbGUgPSAocm9sZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPE5hbWVib29rW10+ID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOYW1lYm9va1tdPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldFBlcm1pc3Npb25zTmFtZWJvb2tMaXN0Rm9yUm9sZT9yb2xlSWQ9JHtyb2xlSWR9YCwgdGhpcy5jb25maWcuaHR0cFNraXBTcGlubmVyT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcnNBdXRvY29tcGxldGVMaXN0Rm9yUm9sZSA9IChsaW1pdDogbnVtYmVyLCBxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxOYW1lYm9va1tdPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TmFtZWJvb2tbXT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRVc2Vyc0F1dG9jb21wbGV0ZUxpc3RGb3JSb2xlP2xpbWl0PSR7bGltaXR9JnF1ZXJ5PSR7cXVlcnl9YCwgdGhpcy5jb25maWcuaHR0cFNraXBTcGlubmVyT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIE5vdGlmaWNhdGlvblxyXG5cclxuICAgIGdldFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PG51bWJlcj4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9Ob3RpZmljYXRpb24vR2V0VW5yZWFkTm90aWZpY2F0aW9uc0NvdW50Rm9yQ3VycmVudFVzZXJgLCB0aGlzLmNvbmZpZy5odHRwU2tpcFNwaW5uZXJPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbn1cclxuXHJcbiJdfQ==
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export function authInitializer(authService) {
|
|
2
|
-
return () => {
|
|
3
|
-
return authService.refreshToken();
|
|
4
|
-
};
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWluaXRpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BpZGVybHkvc3JjL2xpYi9zZXJ2aWNlcy9hcHAtaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUE0QjtJQUMxRCxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEF1dGhCYXNlU2VydmljZSB9IGZyb20gJy4vYXV0aC1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoUmVzdWx0IH0gZnJvbSAnLi4vZW50aXRpZXMvc2VjdXJpdHktZW50aXRpZXMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGF1dGhJbml0aWFsaXplcihhdXRoU2VydmljZTogQXV0aEJhc2VTZXJ2aWNlKTogKCkgPT4gT2JzZXJ2YWJsZTxBdXRoUmVzdWx0PiB7XHJcbiAgcmV0dXJuICgpID0+IHtcclxuICAgIHJldHVybiBhdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oKTtcclxuICB9O1xyXG59Il19
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, combineLatest, delay, map, of, Subject, withLatestFrom } from 'rxjs';
|
|
3
|
-
import { InitTopBarData } from '../entities/init-top-bar-data';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./api.service.security";
|
|
6
|
-
import * as i2 from "./config-base.service";
|
|
7
|
-
import * as i3 from "./auth-base.service";
|
|
8
|
-
export class LayoutBaseService {
|
|
9
|
-
constructor(apiService, config, authService) {
|
|
10
|
-
this.apiService = apiService;
|
|
11
|
-
this.config = config;
|
|
12
|
-
this.authService = authService;
|
|
13
|
-
this._unreadNotificationsNumber = new BehaviorSubject(null);
|
|
14
|
-
this.unreadNotificationsCount$ = this._unreadNotificationsNumber.asObservable();
|
|
15
|
-
this.layoutConfig = {
|
|
16
|
-
ripple: false,
|
|
17
|
-
inputStyle: 'outlined',
|
|
18
|
-
menuMode: 'static',
|
|
19
|
-
colorScheme: 'light',
|
|
20
|
-
theme: 'lara-light-indigo',
|
|
21
|
-
scale: 14,
|
|
22
|
-
color: `var(--primary-color)`,
|
|
23
|
-
};
|
|
24
|
-
this.state = {
|
|
25
|
-
staticMenuDesktopInactive: false,
|
|
26
|
-
overlayMenuActive: false,
|
|
27
|
-
profileSidebarVisible: false,
|
|
28
|
-
profileDropdownSidebarVisible: false,
|
|
29
|
-
configSidebarVisible: false,
|
|
30
|
-
staticMenuMobileActive: false,
|
|
31
|
-
menuHoverActive: false
|
|
32
|
-
};
|
|
33
|
-
this.configUpdate = new Subject();
|
|
34
|
-
this.overlayOpen = new Subject();
|
|
35
|
-
this.configUpdate$ = this.configUpdate.asObservable();
|
|
36
|
-
this.overlayOpen$ = this.overlayOpen.asObservable();
|
|
37
|
-
this.initUnreadNotificationsCountForCurrentUser = () => {
|
|
38
|
-
this.initUnreadNotificationsCountForCurrentUserObservable().pipe(delay(1), // FT HACK: Adding delay so both additionalObservable and user emits single null value when logout
|
|
39
|
-
withLatestFrom(this.authService.user$) // Triggers when unread notifications change
|
|
40
|
-
).subscribe(([additionalObservable, user]) => {
|
|
41
|
-
if (user != null && additionalObservable !== undefined) {
|
|
42
|
-
this.setUnreadNotificationsCountForCurrentUser().subscribe();
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
this.initUnreadNotificationsCountForCurrentUserObservable = () => {
|
|
47
|
-
return this.authService.user$;
|
|
48
|
-
};
|
|
49
|
-
this.setUnreadNotificationsCountForCurrentUser = () => {
|
|
50
|
-
return this.apiService.getUnreadNotificationsCountForCurrentUser().pipe(map((unreadNotificationsCount) => {
|
|
51
|
-
this._unreadNotificationsNumber.next(unreadNotificationsCount);
|
|
52
|
-
}));
|
|
53
|
-
};
|
|
54
|
-
//#region Top Bar
|
|
55
|
-
this.initTopBarData = () => {
|
|
56
|
-
return combineLatest([this.authService.user$, this.unreadNotificationsCount$]).pipe(map(([currentUser, unreadNotificationsCount]) => {
|
|
57
|
-
return new InitTopBarData({
|
|
58
|
-
companyName: this.config.companyName,
|
|
59
|
-
userProfilePath: `/administration/users/${currentUser?.id}`,
|
|
60
|
-
unreadNotificationsCount: unreadNotificationsCount,
|
|
61
|
-
showProfileIcon: true,
|
|
62
|
-
currentUser: currentUser,
|
|
63
|
-
});
|
|
64
|
-
}));
|
|
65
|
-
};
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region Side Bar
|
|
68
|
-
this.searchPartners = (event) => {
|
|
69
|
-
return of();
|
|
70
|
-
};
|
|
71
|
-
this.partnersAutocompleteButtonClick = (selectedPartner) => { };
|
|
72
|
-
}
|
|
73
|
-
onMenuToggle() {
|
|
74
|
-
if (this.isOverlay()) {
|
|
75
|
-
this.state.overlayMenuActive = !this.state.overlayMenuActive;
|
|
76
|
-
if (this.state.overlayMenuActive) {
|
|
77
|
-
this.overlayOpen.next(null);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (this.isDesktop()) {
|
|
81
|
-
this.state.staticMenuDesktopInactive = !this.state.staticMenuDesktopInactive;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this.state.staticMenuMobileActive = !this.state.staticMenuMobileActive;
|
|
85
|
-
if (this.state.staticMenuMobileActive) {
|
|
86
|
-
this.overlayOpen.next(null);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
showProfileSidebar() {
|
|
91
|
-
this.state.profileSidebarVisible = !this.state.profileSidebarVisible;
|
|
92
|
-
if (this.state.profileSidebarVisible) {
|
|
93
|
-
this.overlayOpen.next(null);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
showProfileDropdownSidebar() {
|
|
97
|
-
this.state.profileDropdownSidebarVisible = !this.state.profileDropdownSidebarVisible;
|
|
98
|
-
if (this.state.profileDropdownSidebarVisible) {
|
|
99
|
-
this.overlayOpen.next(null);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
showConfigSidebar() {
|
|
103
|
-
this.state.configSidebarVisible = true;
|
|
104
|
-
}
|
|
105
|
-
isOverlay() {
|
|
106
|
-
return this.layoutConfig.menuMode === 'overlay';
|
|
107
|
-
}
|
|
108
|
-
isDesktop() {
|
|
109
|
-
return window.innerWidth > 991;
|
|
110
|
-
}
|
|
111
|
-
isMobile() {
|
|
112
|
-
return !this.isDesktop();
|
|
113
|
-
}
|
|
114
|
-
onConfigUpdate() {
|
|
115
|
-
this.configUpdate.next(this.layoutConfig);
|
|
116
|
-
}
|
|
117
|
-
//#endregion
|
|
118
|
-
ngOnDestroy() {
|
|
119
|
-
if (this.userSubscription) {
|
|
120
|
-
this.userSubscription.unsubscribe();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBaseService, deps: [{ token: i1.ApiSecurityService }, { token: i2.ConfigBaseService }, { token: i3.AuthBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
124
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBaseService, providedIn: 'root' }); }
|
|
125
|
-
}
|
|
126
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBaseService, decorators: [{
|
|
127
|
-
type: Injectable,
|
|
128
|
-
args: [{
|
|
129
|
-
providedIn: 'root',
|
|
130
|
-
}]
|
|
131
|
-
}], ctorParameters: () => [{ type: i1.ApiSecurityService }, { type: i2.ConfigBaseService }, { type: i3.AuthBaseService }] });
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxheW91dC1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL3NlcnZpY2VzL2FwcC1sYXlvdXQtYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFpQixHQUFHLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7QUE0Qi9ELE1BQU0sT0FBTyxpQkFBaUI7SUFrQzFCLFlBQ2MsVUFBOEIsRUFDOUIsTUFBeUIsRUFDekIsV0FBNEI7UUFGNUIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBbENoQywrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDaEYsOEJBQXlCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTNFLGlCQUFZLEdBQWM7WUFDdEIsTUFBTSxFQUFFLEtBQUs7WUFDYixVQUFVLEVBQUUsVUFBVTtZQUN0QixRQUFRLEVBQUUsUUFBUTtZQUNsQixXQUFXLEVBQUUsT0FBTztZQUNwQixLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLHNCQUFzQjtTQUNoQyxDQUFDO1FBRUYsVUFBSyxHQUFnQjtZQUNqQix5QkFBeUIsRUFBRSxLQUFLO1lBQ2hDLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIscUJBQXFCLEVBQUUsS0FBSztZQUM1Qiw2QkFBNkIsRUFB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LFNBQVMsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUE0QkQsWUFBWTtJQUVaLFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7SUFDTCxDQUFDOytHQXRKUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoQmFzZVNlcnZpY2UgfSBmcm9tICcuL2F1dGgtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZS5zZWN1cml0eSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlbGF5LCBsYXN0VmFsdWVGcm9tLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEluaXRUb3BCYXJEYXRhIH0gZnJvbSAnLi4vZW50aXRpZXMvaW5pdC10b3AtYmFyLWRhdGEnO1xyXG5pbXBvcnQgeyBDb25maWdCYXNlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByaW1lbmdPcHRpb24gfSBmcm9tICcuLi9lbnRpdGllcy9wcmltZW5nLW9wdGlvbic7XHJcbmltcG9ydCB7IEF1dG9Db21wbGV0ZUNvbXBsZXRlRXZlbnQgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwcENvbmZpZyB7XHJcbiAgICBpbnB1dFN0eWxlOiBzdHJpbmc7XHJcbiAgICBjb2xvclNjaGVtZTogc3RyaW5nOyBcclxuICAgIHRoZW1lOiBzdHJpbmc7XHJcbiAgICByaXBwbGU6IGJvb2xlYW47XHJcbiAgICBtZW51TW9kZTogc3RyaW5nO1xyXG4gICAgc2NhbGU6IG51bWJlcjtcclxuICAgIGNvbG9yOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBMYXlvdXRTdGF0ZSB7XHJcbiAgICBzdGF0aWNNZW51RGVza3RvcEluYWN0aXZlOiBib29sZWFuO1xyXG4gICAgb3ZlcmxheU1lbnVBY3RpdmU6IGJvb2xlYW47XHJcbiAgICBwcm9maWxlU2lkZWJhclZpc2libGU6IGJvb2xlYW47XHJcbiAgICBwcm9maWxlRHJvcGRvd25TaWRlYmFyVmlzaWJsZTpib29sZWFuO1xyXG4gICAgY29uZmlnU2lkZWJhclZpc2libGU6IGJvb2xlYW47XHJcbiAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlOiBib29sZWFuO1xyXG4gICAgbWVudUhvdmVyQWN0aXZlOiBib29sZWFuO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXRCYXNlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICB1c2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgcHJvdGVjdGVkIF91bnJlYWROb3RpZmljYXRpb25zTnVtYmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICAgIHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCQgPSB0aGlzLl91bnJlYWROb3RpZmljYXRpb25zTnVtYmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGxheW91dENvbmZpZzogQXBwQ29uZmlnID0ge1xyXG4gICAgICAgIHJpcHBsZTogZmFsc2UsXHJcbiAgICAgICAgaW5wdXRTdHlsZTogJ291dGxpbmVkJyxcclxuICAgICAgICBtZW51TW9kZTogJ3N0YXRpYycsXHJcbiAgICAgICAgY29sb3JTY2hlbWU6ICdsaWdodCcsXHJcbiAgICAgICAgdGhlbWU6ICdsYXJhLWxpZ2h0LWluZGlnbycsXHJcbiAgICAgICAgc2NhbGU6IDE0LFxyXG4gICAgICAgIGNvbG9yOiBgdmFyKC0tcHJpbWFyeS1jb2xvcilgLFxyXG4gICAgfTtcclxuXHJcbiAgICBzdGF0ZTogTGF5b3V0U3RhdGUgPSB7XHJcbiAgICAgICAgc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgb3ZlcmxheU1lbnVBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIHByb2ZpbGVTaWRlYmFyVmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgcHJvZmlsZURyb3Bkb3duU2lkZWJhclZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ1NpZGViYXJWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBtZW51SG92ZXJBY3RpdmU6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgY29uZmlnVXBkYXRlID0gbmV3IFN1YmplY3Q8QXBwQ29uZmlnPigpO1xyXG5cclxuICAgIHByaXZhdGUgb3ZlcmxheU9wZW4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gICAgY29uZmlnVXBkYXRlJCA9IHRoaXMuY29uZmlnVXBkYXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIG92ZXJsYXlPcGVuJCA9IHRoaXMub3ZlcmxheU9wZW4uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIGFwaVNlcnZpY2U6IEFwaVNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWdCYXNlU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgYXV0aFNlcnZpY2U6IEF1dGhCYXNlU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgIGRlbGF5KDEpLCAvLyBGVCBIQUNLOiBBZGRpbmcgZGVsYXkgc28gYm90aCBhZGRpdGlvbmFsT2JzZXJ2YWJsZSBhbmQgdXNlciBlbWl0cyBzaW5nbGUgbnVsbCB2YWx1ZSB3aGVuIGxvZ291dFxyXG4gICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkKSAvLyBUcmlnZ2VycyB3aGVuIHVucmVhZCBub3RpZmljYXRpb25zIGNoYW5nZVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChbYWRkaXRpb25hbE9ic2VydmFibGUsIHVzZXJdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICE9IG51bGwgJiYgYWRkaXRpb25hbE9ic2VydmFibGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnRGb3JDdXJyZW50VXNlcigpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyT2JzZXJ2YWJsZSA9ICgpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyID0gKCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5nZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnRGb3JDdXJyZW50VXNlcigpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgodW5yZWFkTm90aWZpY2F0aW9uc0NvdW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bnJlYWROb3RpZmljYXRpb25zTnVtYmVyLm5leHQodW5yZWFkTm90aWZpY2F0aW9uc0NvdW50KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudVRvZ2dsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc092ZXJsYXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLm92ZXJsYXlNZW51QWN0aXZlID0gIXRoaXMuc3RhdGUub3ZlcmxheU1lbnVBY3RpdmU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLm92ZXJsYXlNZW51QWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlPcGVuLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9ICF0aGlzLnN0YXRlLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhdGhpcy5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5T3Blbi5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dQcm9maWxlU2lkZWJhcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLnByb2ZpbGVTaWRlYmFyVmlzaWJsZSA9ICF0aGlzLnN0YXRlLnByb2ZpbGVTaWRlYmFyVmlzaWJsZTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5wcm9maWxlU2lkZWJhclZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5T3Blbi5uZXh0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93UHJvZmlsZURyb3Bkb3duU2lkZWJhcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLnByb2ZpbGVEcm9wZG93blNpZGViYXJWaXNpYmxlID0gIXRoaXMuc3RhdGUucHJvZmlsZURyb3Bkb3duU2lkZWJhclZpc2libGU7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUucHJvZmlsZURyb3Bkb3duU2lkZWJhclZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5T3Blbi5uZXh0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29uZmlnU2lkZWJhcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLmNvbmZpZ1NpZGViYXJWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc092ZXJsYXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0Q29uZmlnLm1lbnVNb2RlID09PSAnb3ZlcmxheSc7XHJcbiAgICB9XHJcblxyXG4gICAgaXNEZXNrdG9wKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDk5MTtcclxuICAgIH1cclxuXHJcbiAgICBpc01vYmlsZSgpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNEZXNrdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Db25maWdVcGRhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWdVcGRhdGUubmV4dCh0aGlzLmxheW91dENvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vI3JlZ2lvbiBUb3AgQmFyXHJcblxyXG4gICAgaW5pdFRvcEJhckRhdGEgPSAoKTogT2JzZXJ2YWJsZTxJbml0VG9wQmFyRGF0YT4gPT4ge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkLCB0aGlzLnVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCRdKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtjdXJyZW50VXNlciwgdW5yZWFkTm90aWZpY2F0aW9uc0NvdW50XSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbml0VG9wQmFyRGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFueU5hbWU6IHRoaXMuY29uZmlnLmNvbXBhbnlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJQcm9maWxlUGF0aDogYC9hZG1pbmlzdHJhdGlvbi91c2Vycy8ke2N1cnJlbnRVc2VyPy5pZH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudDogdW5yZWFkTm90aWZpY2F0aW9uc0NvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dQcm9maWxlSWNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBTaWRlIEJhclxyXG5cclxuICAgIHNlYXJjaFBhcnRuZXJzID0gKGV2ZW50OiBBdXRvQ29tcGxldGVDb21wbGV0ZUV2ZW50KTogT2JzZXJ2YWJsZTxQcmltZW5nT3B0aW9uW10+ID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJ0bmVyc0F1dG9jb21wbGV0ZUJ1dHRvbkNsaWNrID0gKHNlbGVjdGVkUGFydG5lcjogUHJpbWVuZ09wdGlvbikgPT4ge31cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy51c2VyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, of, Subject } from 'rxjs';
|
|
3
|
-
import { map, tap, delay, finalize } from 'rxjs/operators';
|
|
4
|
-
import { RefreshTokenRequest } from '../entities/security-entities';
|
|
5
|
-
import { InitCompanyAuthDialogDetails } from '../entities/init-company-auth-dialog-details';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/router";
|
|
8
|
-
import * as i2 from "@angular/common/http";
|
|
9
|
-
import * as i3 from "@abacritt/angularx-social-login";
|
|
10
|
-
import * as i4 from "./api.service.security";
|
|
11
|
-
import * as i5 from "./config-base.service";
|
|
12
|
-
export class AuthBaseService {
|
|
13
|
-
constructor(router, http, externalAuthService, apiService, config) {
|
|
14
|
-
this.router = router;
|
|
15
|
-
this.http = http;
|
|
16
|
-
this.externalAuthService = externalAuthService;
|
|
17
|
-
this.apiService = apiService;
|
|
18
|
-
this.config = config;
|
|
19
|
-
this.apiUrl = this.config.apiUrl;
|
|
20
|
-
this._currentUserPermissionCodes = new BehaviorSubject(undefined);
|
|
21
|
-
this.currentUserPermissionCodes$ = this._currentUserPermissionCodes.asObservable();
|
|
22
|
-
this._user = new BehaviorSubject(undefined);
|
|
23
|
-
this.user$ = this._user.asObservable();
|
|
24
|
-
// Google auth
|
|
25
|
-
this.authChangeSub = new Subject();
|
|
26
|
-
this.extAuthChangeSub = new Subject();
|
|
27
|
-
this.authChanged = this.authChangeSub.asObservable();
|
|
28
|
-
this.extAuthChanged = this.extAuthChangeSub.asObservable();
|
|
29
|
-
this.storageEventListener = (event) => {
|
|
30
|
-
if (event.storageArea === localStorage) {
|
|
31
|
-
if (event.key === 'logout-event') {
|
|
32
|
-
this.stopTokenTimer();
|
|
33
|
-
this._user.next(null);
|
|
34
|
-
this._currentUserPermissionCodes.next(null);
|
|
35
|
-
}
|
|
36
|
-
if (event.key === 'login-event') {
|
|
37
|
-
this.stopTokenTimer();
|
|
38
|
-
this.apiService.getCurrentUser().subscribe((user) => {
|
|
39
|
-
this._user.next({
|
|
40
|
-
id: user.id,
|
|
41
|
-
email: user.email
|
|
42
|
-
});
|
|
43
|
-
this.setCurrentUserPermissionCodes().subscribe();
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
this.onAfterLogout = () => {
|
|
49
|
-
this._currentUserPermissionCodes.next(null);
|
|
50
|
-
};
|
|
51
|
-
this.onAfterRefreshToken = () => {
|
|
52
|
-
this.setCurrentUserPermissionCodes().subscribe(); // FT: Needs to be after setting local storage
|
|
53
|
-
};
|
|
54
|
-
this.logoutGoogle = () => {
|
|
55
|
-
this.externalAuthService.signOut();
|
|
56
|
-
};
|
|
57
|
-
this.initCompanyAuthDialogDetails = () => {
|
|
58
|
-
return of(new InitCompanyAuthDialogDetails({
|
|
59
|
-
image: `assets/images/logo/logo.svg`,
|
|
60
|
-
companyName: this.config.companyName,
|
|
61
|
-
}));
|
|
62
|
-
};
|
|
63
|
-
this.onAfterNgOnDestroy = () => { };
|
|
64
|
-
window.addEventListener('storage', this.storageEventListener);
|
|
65
|
-
// Google auth
|
|
66
|
-
this.externalAuthService.authState.subscribe((user) => {
|
|
67
|
-
const externalAuth = {
|
|
68
|
-
// provider: user.provider,
|
|
69
|
-
idToken: user.idToken
|
|
70
|
-
};
|
|
71
|
-
this.loginExternal(externalAuth).subscribe(() => {
|
|
72
|
-
this.navigateToDashboard();
|
|
73
|
-
});
|
|
74
|
-
this.extAuthChangeSub.next(user);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
sendLoginVerificationEmail(body) {
|
|
78
|
-
const browserId = this.getBrowserId();
|
|
79
|
-
body.browserId = browserId;
|
|
80
|
-
return this.apiService.sendLoginVerificationEmail(body);
|
|
81
|
-
}
|
|
82
|
-
login(body) {
|
|
83
|
-
const browserId = this.getBrowserId();
|
|
84
|
-
body.browserId = browserId;
|
|
85
|
-
const loginResultObservable = this.http.post(`${this.apiUrl}/Security/Login`, body);
|
|
86
|
-
return this.handleLoginResult(loginResultObservable);
|
|
87
|
-
}
|
|
88
|
-
loginExternal(body) {
|
|
89
|
-
const browserId = this.getBrowserId();
|
|
90
|
-
body.browserId = browserId;
|
|
91
|
-
const loginResultObservable = this.http.post(`${this.apiUrl}/Security/LoginExternal`, body);
|
|
92
|
-
return this.handleLoginResult(loginResultObservable);
|
|
93
|
-
}
|
|
94
|
-
sendRegistrationVerificationEmail(body) {
|
|
95
|
-
const browserId = this.getBrowserId();
|
|
96
|
-
body.browserId = browserId;
|
|
97
|
-
return this.apiService.sendRegistrationVerificationEmail(body);
|
|
98
|
-
}
|
|
99
|
-
register(body) {
|
|
100
|
-
const browserId = this.getBrowserId();
|
|
101
|
-
body.browserId = browserId;
|
|
102
|
-
const loginResultObservable = this.apiService.register(body);
|
|
103
|
-
return this.handleLoginResult(loginResultObservable);
|
|
104
|
-
}
|
|
105
|
-
handleLoginResult(loginResultObservable) {
|
|
106
|
-
return loginResultObservable.pipe(map(async (loginResult) => {
|
|
107
|
-
this.setLocalStorage(loginResult);
|
|
108
|
-
this._user.next({
|
|
109
|
-
id: loginResult.userId,
|
|
110
|
-
email: loginResult.email,
|
|
111
|
-
});
|
|
112
|
-
this.startTokenTimer();
|
|
113
|
-
this.setCurrentUserPermissionCodes().subscribe();
|
|
114
|
-
return loginResult;
|
|
115
|
-
}));
|
|
116
|
-
}
|
|
117
|
-
logout() {
|
|
118
|
-
const browserId = this.getBrowserId();
|
|
119
|
-
this.http
|
|
120
|
-
.get(`${this.apiUrl}/Security/Logout?browserId=${browserId}`)
|
|
121
|
-
.pipe(finalize(() => {
|
|
122
|
-
this.clearLocalStorage();
|
|
123
|
-
this._user.next(null);
|
|
124
|
-
this.onAfterLogout();
|
|
125
|
-
this.stopTokenTimer();
|
|
126
|
-
this.router.navigate([this.config.loginSlug]);
|
|
127
|
-
}))
|
|
128
|
-
.subscribe();
|
|
129
|
-
}
|
|
130
|
-
refreshToken() {
|
|
131
|
-
let refreshToken = localStorage.getItem(this.config.refreshTokenKey);
|
|
132
|
-
if (!refreshToken) {
|
|
133
|
-
this.clearLocalStorage();
|
|
134
|
-
return of(null);
|
|
135
|
-
}
|
|
136
|
-
const browserId = this.getBrowserId();
|
|
137
|
-
let body = new RefreshTokenRequest();
|
|
138
|
-
body.browserId = browserId;
|
|
139
|
-
body.refreshToken = refreshToken;
|
|
140
|
-
return this.http
|
|
141
|
-
.post(`${this.apiUrl}/Security/RefreshToken`, body, this.config.httpSkipSpinnerOptions)
|
|
142
|
-
.pipe(map((loginResult) => {
|
|
143
|
-
this._user.next({
|
|
144
|
-
id: loginResult.userId,
|
|
145
|
-
email: loginResult.email
|
|
146
|
-
});
|
|
147
|
-
this.setLocalStorage(loginResult);
|
|
148
|
-
this.startTokenTimer();
|
|
149
|
-
this.onAfterRefreshToken();
|
|
150
|
-
return loginResult;
|
|
151
|
-
}));
|
|
152
|
-
}
|
|
153
|
-
setLocalStorage(loginResult) {
|
|
154
|
-
localStorage.setItem(this.config.accessTokenKey, loginResult.accessToken);
|
|
155
|
-
localStorage.setItem(this.config.refreshTokenKey, loginResult.refreshToken);
|
|
156
|
-
localStorage.setItem('login-event', 'login' + Math.random());
|
|
157
|
-
}
|
|
158
|
-
clearLocalStorage() {
|
|
159
|
-
localStorage.removeItem(this.config.accessTokenKey);
|
|
160
|
-
localStorage.removeItem(this.config.refreshTokenKey);
|
|
161
|
-
localStorage.setItem('logout-event', 'logout' + Math.random());
|
|
162
|
-
}
|
|
163
|
-
getBrowserId() {
|
|
164
|
-
let browserId = localStorage.getItem(this.config.browserIdKey); // FT: We don't need to remove this from the local storage ever, only if the user manuely deletes it, we will handle it
|
|
165
|
-
if (!browserId) {
|
|
166
|
-
browserId = crypto.randomUUID();
|
|
167
|
-
localStorage.setItem(this.config.browserIdKey, browserId);
|
|
168
|
-
}
|
|
169
|
-
return browserId;
|
|
170
|
-
}
|
|
171
|
-
isAccessTokenExpired() {
|
|
172
|
-
const expired = this.getTokenRemainingTime() < 5000;
|
|
173
|
-
return of(expired);
|
|
174
|
-
}
|
|
175
|
-
getTokenRemainingTime() {
|
|
176
|
-
const accessToken = this.getAccessToken();
|
|
177
|
-
if (!accessToken) {
|
|
178
|
-
return 0;
|
|
179
|
-
}
|
|
180
|
-
const jwtToken = JSON.parse(atob(accessToken.split('.')[1]));
|
|
181
|
-
const expires = new Date(jwtToken.exp * 1000);
|
|
182
|
-
return expires.getTime() - Date.now();
|
|
183
|
-
}
|
|
184
|
-
getAccessToken() {
|
|
185
|
-
return localStorage.getItem(this.config.accessTokenKey);
|
|
186
|
-
}
|
|
187
|
-
startTokenTimer() {
|
|
188
|
-
const timeout = this.getTokenRemainingTime();
|
|
189
|
-
this.timer = of(true)
|
|
190
|
-
.pipe(delay(timeout), tap({
|
|
191
|
-
next: () => this.refreshToken().subscribe(),
|
|
192
|
-
}))
|
|
193
|
-
.subscribe();
|
|
194
|
-
}
|
|
195
|
-
stopTokenTimer() {
|
|
196
|
-
this.timer?.unsubscribe();
|
|
197
|
-
}
|
|
198
|
-
navigateToDashboard() {
|
|
199
|
-
this.router.navigate(['/']);
|
|
200
|
-
}
|
|
201
|
-
setCurrentUserPermissionCodes() {
|
|
202
|
-
return this.apiService.getCurrentUserPermissionCodes().pipe(map(permissionCodes => {
|
|
203
|
-
this._currentUserPermissionCodes.next(permissionCodes);
|
|
204
|
-
return permissionCodes;
|
|
205
|
-
}));
|
|
206
|
-
}
|
|
207
|
-
ngOnDestroy() {
|
|
208
|
-
window.removeEventListener('storage', this.storageEventListener.bind(this));
|
|
209
|
-
this.onAfterNgOnDestroy();
|
|
210
|
-
}
|
|
211
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthBaseService, deps: [{ token: i1.Router }, { token: i2.HttpClient }, { token: i3.SocialAuthService }, { token: i4.ApiSecurityService }, { token: i5.ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
212
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthBaseService, providedIn: 'root' }); }
|
|
213
|
-
}
|
|
214
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthBaseService, decorators: [{
|
|
215
|
-
type: Injectable,
|
|
216
|
-
args: [{
|
|
217
|
-
providedIn: 'root'
|
|
218
|
-
}]
|
|
219
|
-
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.HttpClient }, { type: i3.SocialAuthService }, { type: i4.ApiSecurityService }, { type: i5.ConfigBaseService }] });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL3NlcnZpY2VzL2F1dGgtYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHdEQsT0FBTyxFQUFFLGVBQWUsRUFBOEIsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBK0csbUJBQW1CLEVBQVEsTUFBTSwrQkFBK0IsQ0FBQztBQUd2TCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7OztBQUs1RixNQUFNLE9BQU8sZUFBZTtJQWdCMUIsWUFDWSxNQUFjLEVBQ2QsSUFBZ0IsRUFDaEIsbUJBQXNDLEVBQ3RDLFVBQThCLEVBQzlCLE1BQXlCO1FBSnpCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBbUI7UUFDdEMsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFwQnBCLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUduQyxnQ0FBMkIsR0FBRyxJQUFJLGVBQWUsQ0FBa0IsU0FBUyxDQUFDLENBQUM7UUFDeEYsZ0NBQTJCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBFLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUM5RCxVQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZ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RUFBRTtZQUNwQixJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7K0dBN1BVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YXAsIGRlbGF5LCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU29jaWFsVXNlciwgU29jaWFsQXV0aFNlcnZpY2UgfSBmcm9tICdAYWJhY3JpdHQvYW5ndWxhcngtc29jaWFsLWxvZ2luJztcclxuaW1wb3J0IHsgRXh0ZXJuYWxQcm92aWRlciwgTG9naW4sIFZlcmlmaWNhdGlvblRva2VuUmVxdWVzdCwgQXV0aFJlc3VsdCwgUmVnaXN0cmF0aW9uLCBSZWdpc3RyYXRpb25WZXJpZmljYXRpb25SZXN1bHQsIFJlZnJlc2hUb2tlblJlcXVlc3QsIFVzZXIgfSBmcm9tICcuLi9lbnRpdGllcy9zZWN1cml0eS1lbnRpdGllcyc7XHJcbmltcG9ydCB7IENvbmZpZ0Jhc2VTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWctYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZS5zZWN1cml0eSc7XHJcbmltcG9ydCB7IEluaXRDb21wYW55QXV0aERpYWxvZ0RldGFpbHMgfSBmcm9tICcuLi9lbnRpdGllcy9pbml0LWNvbXBhbnktYXV0aC1kaWFsb2ctZGV0YWlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoQmFzZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsID0gdGhpcy5jb25maWcuYXBpVXJsO1xyXG4gIHByaXZhdGUgdGltZXI/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHByb3RlY3RlZCBfY3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdIHwgbnVsbD4odW5kZWZpbmVkKTtcclxuICBjdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcyQgPSB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJvdGVjdGVkIF91c2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyIHwgbnVsbD4odW5kZWZpbmVkKTtcclxuICB1c2VyJCA9IHRoaXMuX3VzZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8vIEdvb2dsZSBhdXRoXHJcbiAgcHJpdmF0ZSBhdXRoQ2hhbmdlU3ViID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcml2YXRlIGV4dEF1dGhDaGFuZ2VTdWIgPSBuZXcgU3ViamVjdDxTb2NpYWxVc2VyPigpO1xyXG4gIHB1YmxpYyBhdXRoQ2hhbmdlZCA9IHRoaXMuYXV0aENoYW5nZVN1Yi5hc09ic2VydmFibGUoKTtcclxuICBwdWJsaWMgZXh0QXV0aENoYW5nZWQgPSB0aGlzLmV4dEF1dGhDaGFuZ2VTdWIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByb3RlY3RlZCBleHRlcm5hbEF1dGhTZXJ2aWNlOiBTb2NpYWxBdXRoU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBhcGlTZXJ2aWNlOiBBcGlTZWN1cml0eVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWdCYXNlU2VydmljZSxcclxuICApIHtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5zdG9yYWdlRXZlbnRMaXN0ZW5lcik7XHJcblxyXG4gICAgLy8gR29vZ2xlIGF1dGhcclxuICAgIHRoaXMuZXh0ZXJuYWxBdXRoU2VydmljZS5hdXRoU3RhdGUuc3Vic2NyaWJlKCh1c2VyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4dGVybmFsQXV0aDogRXh0ZXJuYWxQcm92aWRlciA9IHtcclxuICAgICAgICAvLyBwcm92aWRlcjogdXNlci5wcm92aWRlcixcclxuICAgICAgICBpZFRva2VuOiB1c2VyLmlkVG9rZW5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvZ2luRXh0ZXJuYWwoZXh0ZXJuYWxBdXRoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb0Rhc2hib2FyZCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5leHRBdXRoQ2hhbmdlU3ViLm5leHQodXNlcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcmFnZUV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IFN0b3JhZ2VFdmVudCkgPT4ge1xyXG4gICAgaWYgKGV2ZW50LnN0b3JhZ2VBcmVhID09PSBsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2xvZ291dC1ldmVudCcpIHtcclxuICAgICAgICB0aGlzLnN0b3BUb2tlblRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5fdXNlci5uZXh0KG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5uZXh0KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdsb2dpbi1ldmVudCcpIHtcclxuICAgICAgICB0aGlzLnN0b3BUb2tlblRpbWVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnN1YnNjcmliZSgodXNlcjogVXNlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyLm5leHQoe1xyXG4gICAgICAgICAgICAgIGlkOiB1c2VyLmlkLFxyXG4gICAgICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcygpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbmRMb2dpblZlcmlmaWNhdGlvbkVtYWlsKGJvZHk6IExvZ2luKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2Uuc2VuZExvZ2luVmVyaWZpY2F0aW9uRW1haWwoYm9keSk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihib2R5OiBWZXJpZmljYXRpb25Ub2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPFByb21pc2U8QXV0aFJlc3VsdD4+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIGNvbnN0IGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSA9IHRoaXMuaHR0cC5wb3N0PEF1dGhSZXN1bHQ+KGAke3RoaXMuYXBpVXJsfS9TZWN1cml0eS9Mb2dpbmAsIGJvZHkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9naW5SZXN1bHQobG9naW5SZXN1bHRPYnNlcnZhYmxlKTtcclxuICB9XHJcblxyXG4gIGxvZ2luRXh0ZXJuYWwoYm9keTogRXh0ZXJuYWxQcm92aWRlcik6IE9ic2VydmFibGU8UHJvbWlzZTxBdXRoUmVzdWx0Pj4ge1xyXG4gICAgY29uc3QgYnJvd3NlcklkID0gdGhpcy5nZXRCcm93c2VySWQoKTtcclxuICAgIGJvZHkuYnJvd3NlcklkID0gYnJvd3NlcklkO1xyXG4gICAgY29uc3QgbG9naW5SZXN1bHRPYnNlcnZhYmxlID0gdGhpcy5odHRwLnBvc3Q8QXV0aFJlc3VsdD4oYCR7dGhpcy5hcGlVcmx9L1NlY3VyaXR5L0xvZ2luRXh0ZXJuYWxgLCBib2R5KTtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ2luUmVzdWx0KGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSk7XHJcbiAgfVxyXG5cclxuICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uRW1haWwoYm9keTogUmVnaXN0cmF0aW9uKTogT2JzZXJ2YWJsZTxSZWdpc3RyYXRpb25WZXJpZmljYXRpb25SZXN1bHQ+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2Uuc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbkVtYWlsKGJvZHkpO1xyXG4gIH1cclxuICBcclxuICByZWdpc3Rlcihib2R5OiBWZXJpZmljYXRpb25Ub2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPFByb21pc2U8QXV0aFJlc3VsdD4+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIGNvbnN0IGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSA9IHRoaXMuYXBpU2VydmljZS5yZWdpc3Rlcihib2R5KTtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ2luUmVzdWx0KGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVMb2dpblJlc3VsdChsb2dpblJlc3VsdE9ic2VydmFibGU6IE9ic2VydmFibGU8QXV0aFJlc3VsdD4pe1xyXG4gICAgcmV0dXJuIGxvZ2luUmVzdWx0T2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICBtYXAoYXN5bmMgKGxvZ2luUmVzdWx0OiBBdXRoUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRMb2NhbFN0b3JhZ2UobG9naW5SZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuX3VzZXIubmV4dCh7XHJcbiAgICAgICAgICBpZDogbG9naW5SZXN1bHQudXNlcklkLFxyXG4gICAgICAgICAgZW1haWw6IGxvZ2luUmVzdWx0LmVtYWlsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RhcnRUb2tlblRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcygpLnN1YnNjcmliZSgpXHJcbiAgICAgICAgcmV0dXJuIGxvZ2luUmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvZ291dCgpIHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLmdldChgJHt0aGlzLmFwaVVybH0vU2VjdXJpdHkvTG9nb3V0P2Jyb3dzZXJJZD0ke2Jyb3dzZXJJZH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgICB0aGlzLl91c2VyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICB0aGlzLm9uQWZ0ZXJMb2dvdXQoKTtcclxuICAgICAgICAgIHRoaXMuc3RvcFRva2VuVGltZXIoKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblNsdWddKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9uQWZ0ZXJMb2dvdXQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5uZXh0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8QXV0aFJlc3VsdD4ge1xyXG4gICAgbGV0IHJlZnJlc2hUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbktleSk7XHJcblxyXG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZSgpO1xyXG4gICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYnJvd3NlcklkID0gdGhpcy5nZXRCcm93c2VySWQoKTtcclxuICAgIGxldCBib2R5OiBSZWZyZXNoVG9rZW5SZXF1ZXN0ID0gbmV3IFJlZnJlc2hUb2tlblJlcXVlc3QoKTtcclxuICAgIGJvZHkuYnJvd3NlcklkID0gYnJvd3NlcklkO1xyXG4gICAgYm9keS5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW47XHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8QXV0aFJlc3VsdD4oYCR7dGhpcy5hcGlVcmx9L1NlY3VyaXR5L1JlZnJlc2hUb2tlbmAsIGJvZHksIHRoaXMuY29uZmlnLmh0dHBTa2lwU3Bpbm5lck9wdGlvbnMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgobG9naW5SZXN1bHQpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VzZXIubmV4dCh7XHJcbiAgICAgICAgICAgIGlkOiBsb2dpblJlc3VsdC51c2VySWQsXHJcbiAgICAgICAgICAgIGVtYWlsOiBsb2dpblJlc3VsdC5lbWFpbFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMuc2V0TG9jYWxTdG9yYWdlKGxvZ2luUmVzdWx0KTtcclxuICAgICAgICAgIHRoaXMuc3RhcnRUb2tlblRpbWVyKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQWZ0ZXJSZWZyZXNoVG9rZW4oKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuIGxvZ2luUmVzdWx0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkFmdGVyUmVmcmVzaFRva2VuID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcygpLnN1YnNjcmliZSgpOyAvLyBGVDogTmVlZHMgdG8gYmUgYWZ0ZXIgc2V0dGluZyBsb2NhbCBzdG9yYWdlXHJcbiAgfVxyXG5cclxuICBzZXRMb2NhbFN0b3JhZ2UobG9naW5SZXN1bHQ6IEF1dGhSZXN1bHQpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuS2V5LCBsb2dpblJlc3VsdC5hY2Nlc3NUb2tlbik7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5LZXksIGxvZ2luUmVzdWx0LnJlZnJlc2hUb2tlbik7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9naW4tZXZlbnQnLCAnbG9naW4nICsgTWF0aC5yYW5kb20oKSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckxvY2FsU3RvcmFnZSgpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuS2V5KTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbktleSk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9nb3V0LWV2ZW50JywgJ2xvZ291dCcgKyBNYXRoLnJhbmRvbSgpKTtcclxuICB9XHJcblxyXG4gIGdldEJyb3dzZXJJZCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJyb3dzZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLmJyb3dzZXJJZEtleSk7IC8vIEZUOiBXZSBkb24ndCBuZWVkIHRvIHJlbW92ZSB0aGlzIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2UgZXZlciwgb25seSBpZiB0aGUgdXNlciBtYW51ZWx5IGRlbGV0ZXMgaXQsIHdlIHdpbGwgaGFuZGxlIGl0XHJcbiAgICBpZiAoIWJyb3dzZXJJZCkge1xyXG4gICAgICBicm93c2VySWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbmZpZy5icm93c2VySWRLZXksIGJyb3dzZXJJZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnJvd3NlcklkO1xyXG4gIH1cclxuXHJcbiAgaXNBY2Nlc3NUb2tlbkV4cGlyZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBleHBpcmVkID0gdGhpcy5nZXRUb2tlblJlbWFpbmluZ1RpbWUoKSA8IDUwMDA7XHJcbiAgICBcclxuICAgIHJldHVybiBvZihleHBpcmVkKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuUmVtYWluaW5nVGltZSgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLmdldEFjY2Vzc1Rva2VuKCk7XHJcblxyXG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBqd3RUb2tlbiA9IEpTT04ucGFyc2UoYXRvYihhY2Nlc3NUb2tlbi5zcGxpdCgnLicpWzFdKSk7XHJcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUoand0VG9rZW4uZXhwICogMTAwMCk7XHJcbiAgICBcclxuICAgIHJldHVybiBleHBpcmVzLmdldFRpbWUoKSAtIERhdGUubm93KCk7XHJcbiAgfVxyXG5cclxuICBnZXRBY2Nlc3NUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRUb2tlblRpbWVyKCkge1xyXG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMuZ2V0VG9rZW5SZW1haW5pbmdUaW1lKCk7XHJcbiAgICB0aGlzLnRpbWVyID0gb2YodHJ1ZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVsYXkodGltZW91dCksXHJcbiAgICAgICAgdGFwKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHRoaXMucmVmcmVzaFRva2VuKCkuc3Vic2NyaWJlKCksXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0b3BUb2tlblRpbWVyKCkge1xyXG4gICAgdGhpcy50aW1lcj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9EYXNoYm9hcmQoKXtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcclxuICB9XHJcblxyXG4gIGxvZ291dEdvb2dsZSA9ICgpID0+IHtcclxuICAgIHRoaXMuZXh0ZXJuYWxBdXRoU2VydmljZS5zaWduT3V0KCk7XHJcbiAgfVxyXG5cclxuICBpbml0Q29tcGFueUF1dGhEaWFsb2dEZXRhaWxzID0gKCk6IE9ic2VydmFibGU8SW5pdENvbXBhbnlBdXRoRGlhbG9nRGV0YWlscz4gPT4ge1xyXG4gICAgcmV0dXJuIG9mKFxyXG4gICAgICBuZXcgSW5pdENvbXBhbnlBdXRoRGlhbG9nRGV0YWlscyAoe1xyXG4gICAgICAgIGltYWdlOiBgYXNzZXRzL2ltYWdlcy9sb2dvL2xvZ28uc3ZnYCwgXHJcbiAgICAgICAgY29tcGFueU5hbWU6IHRoaXMuY29uZmlnLmNvbXBhbnlOYW1lLFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEN1cnJlbnRVc2VyUGVybWlzc2lvbkNvZGVzKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMoKS5waXBlKFxyXG4gICAgICBtYXAocGVybWlzc2lvbkNvZGVzID0+IHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5uZXh0KHBlcm1pc3Npb25Db2Rlcyk7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25Db2RlcztcclxuICAgICAgfVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5zdG9yYWdlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMpKTtcclxuICAgIHRoaXMub25BZnRlck5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBvbkFmdGVyTmdPbkRlc3Ryb3kgPSAoKSA9PiB7fTtcclxufVxyXG4iXX0=
|