@alfresco/adf-core 8.1.0-16295066092 → 8.1.0-16320806191
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/bundles/assets/adf-core/i18n/de.json +1 -1
- package/bundles/assets/adf-core/i18n/es.json +1 -1
- package/bundles/assets/adf-core/i18n/fr.json +1 -1
- package/bundles/assets/adf-core/i18n/it.json +1 -1
- package/bundles/assets/adf-core/i18n/pl.json +1 -1
- package/bundles/assets/adf-core/i18n/pt.json +1 -1
- package/esm2022/adf-core.mjs +5 -0
- package/esm2022/api/alfresco-adf-core-api.mjs +5 -0
- package/esm2022/api/index.mjs +20 -0
- package/esm2022/api/lib/adf-http-client.service.mjs +311 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.param-encoder.mjs +33 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.response-error.mjs +25 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.utils.mjs +80 -0
- package/esm2022/api/lib/interfaces.mjs +18 -0
- package/esm2022/api/lib/types.mjs +18 -0
- package/esm2022/auth/alfresco-adf-core-auth.mjs +5 -0
- package/esm2022/auth/authentication-interceptor/authentication.interceptor.mjs +56 -0
- package/esm2022/auth/authentication.mjs +19 -0
- package/esm2022/auth/index.mjs +19 -0
- package/esm2022/breadcrumbs/alfresco-adf-core-breadcrumbs.mjs +5 -0
- package/esm2022/breadcrumbs/components/breadcrumb/breadcrumb.component.mjs +82 -0
- package/esm2022/breadcrumbs/components/breadcrumb-item/breadcrumb-item.component.mjs +42 -0
- package/esm2022/breadcrumbs/directives/breadcrumb-focus.directive.mjs +44 -0
- package/esm2022/breadcrumbs/index.mjs +19 -0
- package/esm2022/feature-flags/alfresco-adf-core-feature-flags.mjs +5 -0
- package/esm2022/feature-flags/index.mjs +29 -0
- package/esm2022/feature-flags/lib/components/feature-flags-wrapper.mjs +36 -0
- package/esm2022/feature-flags/lib/components/feature-override-indicator.component.mjs +56 -0
- package/esm2022/feature-flags/lib/components/flags/flags.component.mjs +129 -0
- package/esm2022/feature-flags/lib/directives/features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/directives/not-features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/guards/is-feature-off.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-feature-on.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-flags-override-on.guard.mjs +40 -0
- package/esm2022/feature-flags/lib/interfaces/features.interface.mjs +24 -0
- package/esm2022/feature-flags/lib/mocks/features-service-mock.factory.mjs +62 -0
- package/esm2022/feature-flags/lib/providers/debug-feature-flags.provider.mjs +51 -0
- package/esm2022/feature-flags/lib/providers/dummy-feature-flags.provider.mjs +36 -0
- package/esm2022/feature-flags/lib/services/debug-features.service.mjs +94 -0
- package/esm2022/feature-flags/lib/services/dummy-features.service.mjs +40 -0
- package/esm2022/feature-flags/lib/services/flagset.parser.mjs +38 -0
- package/esm2022/feature-flags/lib/services/qa-features.helper.mjs +62 -0
- package/esm2022/feature-flags/lib/services/storage-features.service.mjs +126 -0
- package/esm2022/lib/about/about-extension-list/about-extension-list.component.mjs +51 -0
- package/esm2022/lib/about/about-license-list/about-license-list.component.mjs +51 -0
- package/esm2022/lib/about/about-module-list/module-list.component.mjs +51 -0
- package/esm2022/lib/about/about-package/package-list.component.mjs +65 -0
- package/esm2022/lib/about/about-panel.directive.mjs +37 -0
- package/esm2022/lib/about/about-repository-info/about-repository-info.component.mjs +59 -0
- package/esm2022/lib/about/about-repository-info/repository-info.interface.mjs +18 -0
- package/esm2022/lib/about/about-server-settings/about-server-settings.component.mjs +42 -0
- package/esm2022/lib/about/about-status-list/about-status-list.component.mjs +51 -0
- package/esm2022/lib/about/about.component.mjs +35 -0
- package/esm2022/lib/about/about.module.mjs +75 -0
- package/esm2022/lib/about/index.mjs +18 -0
- package/esm2022/lib/about/interfaces.mjs +18 -0
- package/esm2022/lib/about/public-api.mjs +28 -0
- package/esm2022/lib/app-config/app-config-storage-prefix.factory.mjs +51 -0
- package/esm2022/lib/app-config/app-config.loader.mjs +41 -0
- package/esm2022/lib/app-config/app-config.module.mjs +33 -0
- package/esm2022/lib/app-config/app-config.pipe.mjs +38 -0
- package/esm2022/lib/app-config/app-config.service.mjs +243 -0
- package/esm2022/lib/app-config/debug-app-config.service.mjs +44 -0
- package/esm2022/lib/app-config/index.mjs +18 -0
- package/esm2022/lib/app-config/public-api.mjs +22 -0
- package/esm2022/lib/auth/authentication-interceptor/auth-bearer.interceptor.mjs +67 -0
- package/esm2022/lib/auth/basic-auth/basic-alfresco-auth.service.mjs +356 -0
- package/esm2022/lib/auth/basic-auth/content-auth.mjs +189 -0
- package/esm2022/lib/auth/basic-auth/process-auth.mjs +193 -0
- package/esm2022/lib/auth/guard/auth-guard-bpm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-ecm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-sso-role.service.mjs +57 -0
- package/esm2022/lib/auth/guard/auth-guard.mjs +53 -0
- package/esm2022/lib/auth/guard/auth-guard.service.mjs +113 -0
- package/esm2022/lib/auth/index.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication-service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-group.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-user.service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/openid-configuration.interface.mjs +18 -0
- package/esm2022/lib/auth/models/application-access.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-group.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-role.model.mjs +30 -0
- package/esm2022/lib/auth/models/identity-user.model.mjs +18 -0
- package/esm2022/lib/auth/models/oauth-config.model.mjs +18 -0
- package/esm2022/lib/auth/models/redirection.model.mjs +28 -0
- package/esm2022/lib/auth/models/user-access.model.mjs +18 -0
- package/esm2022/lib/auth/oidc/auth-config.mjs +19 -0
- package/esm2022/lib/auth/oidc/auth-config.service.mjs +110 -0
- package/esm2022/lib/auth/oidc/auth-routing.module.mjs +34 -0
- package/esm2022/lib/auth/oidc/auth.module.mjs +112 -0
- package/esm2022/lib/auth/oidc/auth.service.mjs +22 -0
- package/esm2022/lib/auth/oidc/oidc-auth.guard.mjs +37 -0
- package/esm2022/lib/auth/oidc/oidc-authentication.service.mjs +202 -0
- package/esm2022/lib/auth/oidc/public-api.mjs +24 -0
- package/esm2022/lib/auth/oidc/redirect-auth.service.mjs +267 -0
- package/esm2022/lib/auth/oidc/retry-login.service.mjs +66 -0
- package/esm2022/lib/auth/oidc/token.interceptor.mjs +62 -0
- package/esm2022/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.mjs +31 -0
- package/esm2022/lib/auth/public-api.mjs +44 -0
- package/esm2022/lib/auth/services/authentication.service.mjs +190 -0
- package/esm2022/lib/auth/services/base-authentication.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-group.service.mjs +269 -0
- package/esm2022/lib/auth/services/identity-role.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-user.service.mjs +443 -0
- package/esm2022/lib/auth/services/jwt-helper.service.mjs +205 -0
- package/esm2022/lib/auth/services/oauth2.service.mjs +69 -0
- package/esm2022/lib/auth/services/time-sync.service.mjs +83 -0
- package/esm2022/lib/auth/services/user-access.service.mjs +110 -0
- package/esm2022/lib/avatar/avatar.component.mjs +51 -0
- package/esm2022/lib/blank-page/blank-page.component.mjs +31 -0
- package/esm2022/lib/blank-page/blank-page.module.mjs +33 -0
- package/esm2022/lib/blank-page/index.mjs +18 -0
- package/esm2022/lib/blank-page/public-api.mjs +19 -0
- package/esm2022/lib/button/button.component.mjs +61 -0
- package/esm2022/lib/card-view/card-view.module.mjs +80 -0
- package/esm2022/lib/card-view/components/base-card-view.mjs +51 -0
- package/esm2022/lib/card-view/components/card-view/card-view.component.mjs +66 -0
- package/esm2022/lib/card-view/components/card-view-arrayitem/card-view-arrayitem.component.mjs +55 -0
- package/esm2022/lib/card-view/components/card-view-boolitem/card-view-boolitem.component.mjs +39 -0
- package/esm2022/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.mjs +182 -0
- package/esm2022/lib/card-view/components/card-view-item-dispatcher/card-view-item-dispatcher.component.mjs +108 -0
- package/esm2022/lib/card-view/components/card-view-keyvaluepairsitem/card-view-keyvaluepairsitem.component.mjs +64 -0
- package/esm2022/lib/card-view/components/card-view-mapitem/card-view-mapitem.component.mjs +46 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.mjs +137 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/select-filter-input/select-filter-input.component.mjs +113 -0
- package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +239 -0
- package/esm2022/lib/card-view/components/card-view.components.mjs +28 -0
- package/esm2022/lib/card-view/index.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/base-card-view-update.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-arrayitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-boolitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-dateitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-validator.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-keyvaluepairsitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-selectitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-pipe-property.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view.interfaces.mjs +29 -0
- package/esm2022/lib/card-view/interfaces/click-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/update-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/models/card-view-arrayitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-baseitem.model.mjs +64 -0
- package/esm2022/lib/card-view/models/card-view-boolitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-dateitem.model.mjs +58 -0
- package/esm2022/lib/card-view/models/card-view-datetimeitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-floatitem.model.mjs +33 -0
- package/esm2022/lib/card-view/models/card-view-intitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-keyvaluepairs.model.mjs +27 -0
- package/esm2022/lib/card-view/models/card-view-longitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-mapitem.model.mjs +32 -0
- package/esm2022/lib/card-view/models/card-view-selectitem.model.mjs +41 -0
- package/esm2022/lib/card-view/models/card-view-textitem.model.mjs +40 -0
- package/esm2022/lib/card-view/models/card-view.models.mjs +29 -0
- package/esm2022/lib/card-view/public-api.mjs +25 -0
- package/esm2022/lib/card-view/services/card-item-types.service.mjs +54 -0
- package/esm2022/lib/card-view/services/card-view-update.service.mjs +59 -0
- package/esm2022/lib/card-view/services/card-view.services.mjs +19 -0
- package/esm2022/lib/card-view/validators/card-view-item-float.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view-item-int.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-length.validator.mjs +34 -0
- package/esm2022/lib/card-view/validators/card-view-item-long.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-match.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-minmax.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-int.validator.mjs +32 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-long.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view.validators.mjs +26 -0
- package/esm2022/lib/card-view/validators/validators.map.mjs +26 -0
- package/esm2022/lib/clipboard/clipboard.directive.mjs +98 -0
- package/esm2022/lib/clipboard/clipboard.module.mjs +34 -0
- package/esm2022/lib/clipboard/clipboard.service.mjs +103 -0
- package/esm2022/lib/clipboard/index.mjs +18 -0
- package/esm2022/lib/clipboard/public-api.mjs +21 -0
- package/esm2022/lib/comments/comment-list/comment-list.component.mjs +52 -0
- package/esm2022/lib/comments/comment-list/comment-list.module.mjs +33 -0
- package/esm2022/lib/comments/comment-list/index.mjs +18 -0
- package/esm2022/lib/comments/comment-list/public-api.mjs +19 -0
- package/esm2022/lib/comments/comments.component.mjs +132 -0
- package/esm2022/lib/comments/comments.module.mjs +33 -0
- package/esm2022/lib/comments/index.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments-service.interface.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments.token.mjs +19 -0
- package/esm2022/lib/comments/public-api.mjs +22 -0
- package/esm2022/lib/common/index.mjs +35 -0
- package/esm2022/lib/common/interface/search-component.interface.mjs +18 -0
- package/esm2022/lib/common/mock/app-config.service.mock.mjs +47 -0
- package/esm2022/lib/common/models/default-languages.model.mjs +36 -0
- package/esm2022/lib/common/models/log-levels.model.mjs +33 -0
- package/esm2022/lib/common/models/user-info-mode.enum.mjs +25 -0
- package/esm2022/lib/common/services/cookie.service.mjs +82 -0
- package/esm2022/lib/common/services/download.service.mjs +102 -0
- package/esm2022/lib/common/services/dynamic-component-mapper.service.mjs +89 -0
- package/esm2022/lib/common/services/highlight-transform.service.mjs +61 -0
- package/esm2022/lib/common/services/language-item.interface.mjs +18 -0
- package/esm2022/lib/common/services/log.service.mjs +171 -0
- package/esm2022/lib/common/services/page-title.service.mjs +63 -0
- package/esm2022/lib/common/services/sort-by-category.service.mjs +81 -0
- package/esm2022/lib/common/services/storage.service.mjs +143 -0
- package/esm2022/lib/common/services/thumbnail.service.mjs +194 -0
- package/esm2022/lib/common/services/url.service.mjs +45 -0
- package/esm2022/lib/common/services/user-preferences.service.mjs +238 -0
- package/esm2022/lib/common/utils/date-fns-adapter.mjs +115 -0
- package/esm2022/lib/common/utils/date-fns-utils.mjs +222 -0
- package/esm2022/lib/common/utils/datetime-fns-adapter.mjs +134 -0
- package/esm2022/lib/common/utils/file-utils.mjs +65 -0
- package/esm2022/lib/common/utils/index.mjs +18 -0
- package/esm2022/lib/common/utils/moment-date-adapter.mjs +202 -0
- package/esm2022/lib/common/utils/moment-date-formats.model.mjs +32 -0
- package/esm2022/lib/common/utils/object-utils.mjs +107 -0
- package/esm2022/lib/common/utils/public-api.mjs +25 -0
- package/esm2022/lib/common/utils/string-utils.mjs +45 -0
- package/esm2022/lib/context-menu/animations.mjs +33 -0
- package/esm2022/lib/context-menu/context-menu-list.component.mjs +91 -0
- package/esm2022/lib/context-menu/context-menu-overlay.mjs +25 -0
- package/esm2022/lib/context-menu/context-menu-overlay.service.mjs +109 -0
- package/esm2022/lib/context-menu/context-menu.directive.mjs +63 -0
- package/esm2022/lib/context-menu/context-menu.module.mjs +35 -0
- package/esm2022/lib/context-menu/context-menu.tokens.mjs +19 -0
- package/esm2022/lib/context-menu/index.mjs +18 -0
- package/esm2022/lib/context-menu/interfaces.mjs +18 -0
- package/esm2022/lib/context-menu/public-api.mjs +21 -0
- package/esm2022/lib/core.module.mjs +314 -0
- package/esm2022/lib/datatable/components/amount-cell/amount-cell.component.mjs +45 -0
- package/esm2022/lib/datatable/components/boolean-cell/boolean-cell.component.mjs +65 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-search-filter.pipe.mjs +55 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-selector.component.mjs +113 -0
- package/esm2022/lib/datatable/components/data-cell.event.mjs +31 -0
- package/esm2022/lib/datatable/components/data-row-action.event.mjs +34 -0
- package/esm2022/lib/datatable/components/datatable/datatable.component.mjs +914 -0
- package/esm2022/lib/datatable/components/datatable-cell/datatable-cell.component.mjs +126 -0
- package/esm2022/lib/datatable/components/datatable-row/datatable-row.component.mjs +98 -0
- package/esm2022/lib/datatable/components/date-cell/date-cell.component.mjs +78 -0
- package/esm2022/lib/datatable/components/empty-list/empty-list.component.mjs +60 -0
- package/esm2022/lib/datatable/components/filesize-cell/filesize-cell.component.mjs +49 -0
- package/esm2022/lib/datatable/components/icon-cell/icon-cell.component.mjs +67 -0
- package/esm2022/lib/datatable/components/json-cell/json-cell.component.mjs +86 -0
- package/esm2022/lib/datatable/components/location-cell/location-cell.component.mjs +69 -0
- package/esm2022/lib/datatable/components/mocks/datatable.mock.mjs +153 -0
- package/esm2022/lib/datatable/components/number-cell/number-cell.component.mjs +42 -0
- package/esm2022/lib/datatable/data/data-column.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row-event.model.mjs +26 -0
- package/esm2022/lib/datatable/data/data-row-update.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-sorting.model.mjs +24 -0
- package/esm2022/lib/datatable/data/data-table.schema.mjs +132 -0
- package/esm2022/lib/datatable/data/datatable-adapter.mjs +18 -0
- package/esm2022/lib/datatable/data/object-datacolumn.model.mjs +46 -0
- package/esm2022/lib/datatable/data/object-datarow.model.mjs +41 -0
- package/esm2022/lib/datatable/data/object-datatable-adapter.mjs +134 -0
- package/esm2022/lib/datatable/data-column/data-column-header.component.mjs +45 -0
- package/esm2022/lib/datatable/data-column/data-column-list.component.mjs +36 -0
- package/esm2022/lib/datatable/data-column/data-column.component.mjs +114 -0
- package/esm2022/lib/datatable/data-column/index.mjs +18 -0
- package/esm2022/lib/datatable/data-column/public-api.mjs +20 -0
- package/esm2022/lib/datatable/datatable.module.mjs +161 -0
- package/esm2022/lib/datatable/directives/custom-empty-content-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/custom-loading-template.directive.mjs +30 -0
- package/esm2022/lib/datatable/directives/custom-no-permission-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/drop-zone.directive.mjs +89 -0
- package/esm2022/lib/datatable/directives/header-filter-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/loading-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/main-data-table-action-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/no-content-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/no-permission-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/resizable/resizable.directive.mjs +173 -0
- package/esm2022/lib/datatable/directives/resizable/resize-handle.directive.mjs +72 -0
- package/esm2022/lib/datatable/directives/resizable/types.mjs +18 -0
- package/esm2022/lib/datatable/index.mjs +18 -0
- package/esm2022/lib/datatable/public-api.mjs +55 -0
- package/esm2022/lib/datatable/services/datatable.service.mjs +33 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.mjs +50 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.module.mjs +38 -0
- package/esm2022/lib/dialogs/dialog/dialog-data.interface.mjs +18 -0
- package/esm2022/lib/dialogs/dialog/dialog.component.mjs +70 -0
- package/esm2022/lib/dialogs/dialog/dialog.model.mjs +22 -0
- package/esm2022/lib/dialogs/dialog/index.mjs +20 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.mjs +52 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.module.mjs +34 -0
- package/esm2022/lib/dialogs/index.mjs +18 -0
- package/esm2022/lib/dialogs/public-api.mjs +25 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +73 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.model.mjs +18 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +33 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes.guard.mjs +64 -0
- package/esm2022/lib/directives/directive.module.mjs +56 -0
- package/esm2022/lib/directives/highlight.directive.mjs +67 -0
- package/esm2022/lib/directives/index.mjs +18 -0
- package/esm2022/lib/directives/infinite-select-scroll.directive.mjs +67 -0
- package/esm2022/lib/directives/logout.directive.mjs +72 -0
- package/esm2022/lib/directives/public-api.mjs +24 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.component.mjs +60 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.directive.mjs +104 -0
- package/esm2022/lib/directives/upload.directive.mjs +241 -0
- package/esm2022/lib/dynamic-chip-list/chip.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.component.mjs +204 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.module.mjs +33 -0
- package/esm2022/lib/dynamic-chip-list/index.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/public-api.mjs +20 -0
- package/esm2022/lib/events/base-ui.event.mjs +21 -0
- package/esm2022/lib/events/base.event.mjs +29 -0
- package/esm2022/lib/events/index.mjs +18 -0
- package/esm2022/lib/events/public-api.mjs +19 -0
- package/esm2022/lib/form/components/form-base.component.mjs +212 -0
- package/esm2022/lib/form/components/form-custom-button.directive.mjs +30 -0
- package/esm2022/lib/form/components/form-field/form-field.component.mjs +142 -0
- package/esm2022/lib/form/components/form-renderer.component.mjs +161 -0
- package/esm2022/lib/form/components/form-section/form-section.component.mjs +46 -0
- package/esm2022/lib/form/components/helpers/buttons-visibility.mjs +37 -0
- package/esm2022/lib/form/components/inplace-form-input/inplace-form-input.component.mjs +37 -0
- package/esm2022/lib/form/components/middlewares/decimal-middleware.service.mjs +48 -0
- package/esm2022/lib/form/components/middlewares/middleware.mjs +19 -0
- package/esm2022/lib/form/components/widgets/amount/amount.widget.mjs +77 -0
- package/esm2022/lib/form/components/widgets/base-viewer/base-viewer.widget.mjs +59 -0
- package/esm2022/lib/form/components/widgets/checkbox/checkbox.widget.mjs +52 -0
- package/esm2022/lib/form/components/widgets/core/container-column.model.mjs +28 -0
- package/esm2022/lib/form/components/widgets/core/container.model.mjs +50 -0
- package/esm2022/lib/form/components/widgets/core/content-link.model.mjs +52 -0
- package/esm2022/lib/form/components/widgets/core/displayable-cm-properties.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/error-message.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/external-content-link.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/external-content.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-file-source.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-metadata.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-option.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-rule.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-selected-folder.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-templates.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-types.mjs +74 -0
- package/esm2022/lib/form/components/widgets/core/form-field-utils.mjs +23 -0
- package/esm2022/lib/form/components/widgets/core/form-field-validator.mjs +268 -0
- package/esm2022/lib/form/components/widgets/core/form-field-variable-options.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field.model.mjs +490 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome-event.model.mjs +32 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/form-values.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-widget.model.mjs +33 -0
- package/esm2022/lib/form/components/widgets/core/form.model.mjs +387 -0
- package/esm2022/lib/form/components/widgets/core/group.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/index.mjs +49 -0
- package/esm2022/lib/form/components/widgets/core/predefined-theme.mjs +115 -0
- package/esm2022/lib/form/components/widgets/core/process-form-model.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/process-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/tab.model.mjs +34 -0
- package/esm2022/lib/form/components/widgets/core/theme.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/upload-widget-content-link.model.mjs +27 -0
- package/esm2022/lib/form/components/widgets/core/widget-schema.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/date/date.widget.mjs +162 -0
- package/esm2022/lib/form/components/widgets/date-time/date-time.widget.mjs +153 -0
- package/esm2022/lib/form/components/widgets/decimal/decimal.component.mjs +53 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.widget.mjs +46 -0
- package/esm2022/lib/form/components/widgets/display-text/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/error/error.component.mjs +92 -0
- package/esm2022/lib/form/components/widgets/header/header.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/header/header.widget.mjs +42 -0
- package/esm2022/lib/form/components/widgets/header/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/hyperlink/hyperlink.widget.mjs +69 -0
- package/esm2022/lib/form/components/widgets/index.mjs +71 -0
- package/esm2022/lib/form/components/widgets/json/json.widget.mjs +66 -0
- package/esm2022/lib/form/components/widgets/multiline-text/multiline-text.widget.mjs +55 -0
- package/esm2022/lib/form/components/widgets/number/number.widget.mjs +71 -0
- package/esm2022/lib/form/components/widgets/reactive-widget.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/text/text-mask.component.mjs +215 -0
- package/esm2022/lib/form/components/widgets/text/text.widget.mjs +65 -0
- package/esm2022/lib/form/components/widgets/unknown/unknown.widget.mjs +63 -0
- package/esm2022/lib/form/components/widgets/widget.component.mjs +110 -0
- package/esm2022/lib/form/events/form-error.event.mjs +24 -0
- package/esm2022/lib/form/events/form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/form-rules.event.mjs +25 -0
- package/esm2022/lib/form/events/form-spinner.event.mjs +23 -0
- package/esm2022/lib/form/events/form.event.mjs +29 -0
- package/esm2022/lib/form/events/index.mjs +24 -0
- package/esm2022/lib/form/events/validate-form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/validate-form.event.mjs +25 -0
- package/esm2022/lib/form/form-base.module.mjs +90 -0
- package/esm2022/lib/form/index.mjs +18 -0
- package/esm2022/lib/form/models/form-rules.model.mjs +77 -0
- package/esm2022/lib/form/models/task-process-variable.model.mjs +19 -0
- package/esm2022/lib/form/models/widget-visibility.model.mjs +104 -0
- package/esm2022/lib/form/pipes/field-style.pipe.mjs +45 -0
- package/esm2022/lib/form/pipes/index.mjs +18 -0
- package/esm2022/lib/form/public-api.mjs +35 -0
- package/esm2022/lib/form/services/form-rendering.service.mjs +53 -0
- package/esm2022/lib/form/services/form-validation-service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form.service.mjs +86 -0
- package/esm2022/lib/form/services/widget-visibility.service.mjs +294 -0
- package/esm2022/lib/header/header.component.mjs +73 -0
- package/esm2022/lib/header/index.mjs +18 -0
- package/esm2022/lib/header/navbar/navbar-item.component.mjs +37 -0
- package/esm2022/lib/header/navbar/navbar.component.mjs +36 -0
- package/esm2022/lib/header/public-api.mjs +20 -0
- package/esm2022/lib/icon/icon.component.mjs +51 -0
- package/esm2022/lib/icon/icon.module.mjs +36 -0
- package/esm2022/lib/icon/index.mjs +18 -0
- package/esm2022/lib/icon/public-api.mjs +19 -0
- package/esm2022/lib/identity-user-info/identity-user-info.component.mjs +86 -0
- package/esm2022/lib/identity-user-info/identity-user-info.module.mjs +33 -0
- package/esm2022/lib/identity-user-info/index.mjs +18 -0
- package/esm2022/lib/identity-user-info/public-api.mjs +19 -0
- package/esm2022/lib/info-drawer/index.mjs +18 -0
- package/esm2022/lib/info-drawer/info-drawer-layout.component.mjs +71 -0
- package/esm2022/lib/info-drawer/info-drawer.component.mjs +113 -0
- package/esm2022/lib/info-drawer/info-drawer.module.mjs +53 -0
- package/esm2022/lib/info-drawer/public-api.mjs +20 -0
- package/esm2022/lib/interface/index.mjs +18 -0
- package/esm2022/lib/interface/injection.tokens.mjs +19 -0
- package/esm2022/lib/interface/public-api.mjs +18 -0
- package/esm2022/lib/language-menu/index.mjs +18 -0
- package/esm2022/lib/language-menu/language-menu.component.mjs +61 -0
- package/esm2022/lib/language-menu/language-menu.module.mjs +35 -0
- package/esm2022/lib/language-menu/language-picker.component.mjs +77 -0
- package/esm2022/lib/language-menu/public-api.mjs +21 -0
- package/esm2022/lib/language-menu/service/language.service.interface.mjs +18 -0
- package/esm2022/lib/language-menu/service/language.service.mjs +34 -0
- package/esm2022/lib/layout/components/header/header.component.mjs +99 -0
- package/esm2022/lib/layout/components/layout-container/layout-container.component.mjs +180 -0
- package/esm2022/lib/layout/components/sidebar-action/sidebar-action-menu.component.mjs +82 -0
- package/esm2022/lib/layout/components/sidenav-layout/sidenav-layout.component.mjs +145 -0
- package/esm2022/lib/layout/directives/sidenav-layout-content.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-header.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-navigation.directive.mjs +33 -0
- package/esm2022/lib/layout/index.mjs +18 -0
- package/esm2022/lib/layout/layout.module.mjs +72 -0
- package/esm2022/lib/layout/public-api.mjs +25 -0
- package/esm2022/lib/login/components/login/login.component.mjs +367 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog-component-data.interface.mjs +18 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog.component.mjs +57 -0
- package/esm2022/lib/login/components/login-dialog-panel/login-dialog-panel.component.mjs +48 -0
- package/esm2022/lib/login/directives/login-footer.directive.mjs +41 -0
- package/esm2022/lib/login/directives/login-header.directive.mjs +41 -0
- package/esm2022/lib/login/index.mjs +18 -0
- package/esm2022/lib/login/login.module.mjs +54 -0
- package/esm2022/lib/login/models/login-error.event.mjs +22 -0
- package/esm2022/lib/login/models/login-submit.event.mjs +32 -0
- package/esm2022/lib/login/models/login-success.event.mjs +24 -0
- package/esm2022/lib/login/public-api.mjs +27 -0
- package/esm2022/lib/material.module.mjs +254 -0
- package/esm2022/lib/mock/cookie.service.mock.mjs +43 -0
- package/esm2022/lib/mock/data-column.mock.mjs +73 -0
- package/esm2022/lib/mock/event.mock.mjs +39 -0
- package/esm2022/lib/mock/form/form-definition-readonly.mock.mjs +225 -0
- package/esm2022/lib/mock/form/form-definition-visibility.mock.mjs +347 -0
- package/esm2022/lib/mock/form/form-definition.mock.mjs +403 -0
- package/esm2022/lib/mock/form/form.component.mock.mjs +275 -0
- package/esm2022/lib/mock/form/form.service.mock.mjs +248 -0
- package/esm2022/lib/mock/form/widget-visibility.service.mock.mjs +1835 -0
- package/esm2022/lib/mock/index.mjs +18 -0
- package/esm2022/lib/mock/public-api.mjs +27 -0
- package/esm2022/lib/mock/translation.service.mock.mjs +44 -0
- package/esm2022/lib/models/comment.model.mjs +51 -0
- package/esm2022/lib/models/component.model.mjs +24 -0
- package/esm2022/lib/models/decimal-number.model.mjs +26 -0
- package/esm2022/lib/models/general-user.model.mjs +24 -0
- package/esm2022/lib/models/index.mjs +18 -0
- package/esm2022/lib/models/pagination.model.mjs +29 -0
- package/esm2022/lib/models/path.model.mjs +24 -0
- package/esm2022/lib/models/product-version.model.mjs +28 -0
- package/esm2022/lib/models/public-api.mjs +24 -0
- package/esm2022/lib/models/request-pagination.model.mjs +25 -0
- package/esm2022/lib/notifications/components/add-notification.stories.component.mjs +44 -0
- package/esm2022/lib/notifications/components/notification-history.component.mjs +138 -0
- package/esm2022/lib/notifications/helpers/notification.factory.mjs +43 -0
- package/esm2022/lib/notifications/index.mjs +18 -0
- package/esm2022/lib/notifications/models/notification.model.mjs +25 -0
- package/esm2022/lib/notifications/notification-history.module.mjs +35 -0
- package/esm2022/lib/notifications/public-api.mjs +23 -0
- package/esm2022/lib/notifications/services/notification.service.mjs +166 -0
- package/esm2022/lib/pagination/index.mjs +18 -0
- package/esm2022/lib/pagination/infinite-pagination.component.mjs +111 -0
- package/esm2022/lib/pagination/paginated-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination.component.mjs +263 -0
- package/esm2022/lib/pagination/pagination.module.mjs +35 -0
- package/esm2022/lib/pagination/public-api.mjs +22 -0
- package/esm2022/lib/pipes/date-time.pipe.mjs +46 -0
- package/esm2022/lib/pipes/decimal-number.pipe.mjs +78 -0
- package/esm2022/lib/pipes/file-size.pipe.mjs +54 -0
- package/esm2022/lib/pipes/file-type.pipe.mjs +40 -0
- package/esm2022/lib/pipes/format-space.pipe.mjs +39 -0
- package/esm2022/lib/pipes/full-name.pipe.mjs +43 -0
- package/esm2022/lib/pipes/index.mjs +18 -0
- package/esm2022/lib/pipes/localized-date.pipe.mjs +70 -0
- package/esm2022/lib/pipes/multi-value.pipe.mjs +37 -0
- package/esm2022/lib/pipes/pipe.module.mjs +83 -0
- package/esm2022/lib/pipes/public-api.mjs +30 -0
- package/esm2022/lib/pipes/text-highlight.pipe.mjs +39 -0
- package/esm2022/lib/pipes/time-ago.pipe.mjs +65 -0
- package/esm2022/lib/pipes/truncate.pipe.mjs +33 -0
- package/esm2022/lib/pipes/user-initial.pipe.mjs +52 -0
- package/esm2022/lib/pipes/user-like.interface.mjs +18 -0
- package/esm2022/lib/progress/progress.component.mjs +90 -0
- package/esm2022/lib/search-text/animations.mjs +32 -0
- package/esm2022/lib/search-text/index.mjs +18 -0
- package/esm2022/lib/search-text/models/search-text-input.model.mjs +23 -0
- package/esm2022/lib/search-text/public-api.mjs +22 -0
- package/esm2022/lib/search-text/search-text-input.component.mjs +283 -0
- package/esm2022/lib/search-text/search-text-input.module.mjs +35 -0
- package/esm2022/lib/search-text/search-trigger.directive.mjs +181 -0
- package/esm2022/lib/snackbar-content/index.mjs +18 -0
- package/esm2022/lib/snackbar-content/public-api.mjs +20 -0
- package/esm2022/lib/snackbar-content/snack-bar-data.mjs +18 -0
- package/esm2022/lib/snackbar-content/snackbar-content.component.mjs +49 -0
- package/esm2022/lib/snackbar-content/snackbar-content.module.mjs +33 -0
- package/esm2022/lib/sorting-picker/index.mjs +18 -0
- package/esm2022/lib/sorting-picker/public-api.mjs +18 -0
- package/esm2022/lib/sorting-picker/sorting-picker.component.mjs +67 -0
- package/esm2022/lib/templates/empty-content/empty-content.component.mjs +43 -0
- package/esm2022/lib/templates/error-content/error-content.component.mjs +61 -0
- package/esm2022/lib/templates/index.mjs +18 -0
- package/esm2022/lib/templates/public-api.mjs +20 -0
- package/esm2022/lib/templates/template.module.mjs +38 -0
- package/esm2022/lib/testing/core.story.module.mjs +39 -0
- package/esm2022/lib/testing/core.testing.module.mjs +35 -0
- package/esm2022/lib/testing/index.mjs +22 -0
- package/esm2022/lib/testing/noop-auth.module.mjs +80 -0
- package/esm2022/lib/testing/noop-translate.module.mjs +61 -0
- package/esm2022/lib/testing/unit-testing-utils.mjs +364 -0
- package/esm2022/lib/toolbar/index.mjs +18 -0
- package/esm2022/lib/toolbar/public-api.mjs +21 -0
- package/esm2022/lib/toolbar/toolbar-divider.component.mjs +27 -0
- package/esm2022/lib/toolbar/toolbar-title.component.mjs +32 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +39 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +36 -0
- package/esm2022/lib/translation/index.mjs +18 -0
- package/esm2022/lib/translation/public-api.mjs +19 -0
- package/esm2022/lib/translation/translate-loader.service.mjs +148 -0
- package/esm2022/lib/translation/translation.service.mjs +148 -0
- package/esm2022/lib/viewer/components/download-prompt-dialog/download-prompt-dialog.component.mjs +36 -0
- package/esm2022/lib/viewer/components/img-viewer/img-viewer.component.mjs +220 -0
- package/esm2022/lib/viewer/components/media-player/media-player.component.mjs +64 -0
- package/esm2022/lib/viewer/components/pdf-viewer/pdf-viewer.component.mjs +550 -0
- package/esm2022/lib/viewer/components/pdf-viewer-password-dialog/pdf-viewer-password-dialog.mjs +60 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumb/pdf-viewer-thumb.component.mjs +48 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumbnails/pdf-viewer-thumbnails.component.mjs +198 -0
- package/esm2022/lib/viewer/components/txt-viewer/txt-viewer.component.mjs +85 -0
- package/esm2022/lib/viewer/components/unknown-format/unknown-format.component.mjs +32 -0
- package/esm2022/lib/viewer/components/viewer-more-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-open-with.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-render/viewer-render.component.mjs +216 -0
- package/esm2022/lib/viewer/components/viewer-sidebar.component.mjs +46 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-custom-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer.component.mjs +486 -0
- package/esm2022/lib/viewer/directives/viewer-extension.directive.mjs +67 -0
- package/esm2022/lib/viewer/index.mjs +18 -0
- package/esm2022/lib/viewer/models/download-prompt.actions.mjs +23 -0
- package/esm2022/lib/viewer/models/viewer.model.mjs +22 -0
- package/esm2022/lib/viewer/public-api.mjs +40 -0
- package/esm2022/lib/viewer/services/rendering-queue.services.mjs +179 -0
- package/esm2022/lib/viewer/services/view-util.service.mjs +149 -0
- package/esm2022/lib/viewer/viewer.module.mjs +110 -0
- package/esm2022/public-api.mjs +60 -0
- package/esm2022/shell/alfresco-adf-core-shell.mjs +5 -0
- package/esm2022/shell/index.mjs +20 -0
- package/esm2022/shell/lib/components/shell/shell.component.mjs +122 -0
- package/esm2022/shell/lib/services/shell-app.service.mjs +22 -0
- package/esm2022/shell/lib/shell.module.mjs +79 -0
- package/esm2022/shell/lib/shell.routes.mjs +25 -0
- package/feature-flags/lib/providers/debug-feature-flags.provider.d.ts +35 -4
- package/fesm2022/adf-core.mjs +1177 -1166
- package/fesm2022/adf-core.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-api.mjs +4 -4
- package/fesm2022/alfresco-adf-core-api.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-auth.mjs +3 -3
- package/fesm2022/alfresco-adf-core-auth.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs +11 -11
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-feature-flags.mjs +59 -52
- package/fesm2022/alfresco-adf-core-feature-flags.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-shell.mjs +21 -96
- package/fesm2022/alfresco-adf-core-shell.mjs.map +1 -1
- package/lib/app-config/app-config.module.d.ts +0 -1
- package/lib/app-config/public-api.d.ts +0 -1
- package/lib/auth/oidc/auth.module.d.ts +4 -4
- package/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.d.ts +1 -1
- package/lib/card-view/components/base-card-view.d.ts +1 -1
- package/lib/card-view/components/card-view/card-view.component.scss +9 -12
- package/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.scss +2 -1
- package/lib/card-view/components/card-view-textitem/card-view-textitem.component.scss +5 -2
- package/lib/core.module.d.ts +128 -124
- package/lib/datatable/data/data-table.schema.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm.dialog.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm.dialog.module.d.ts +6 -2
- package/lib/form/form-base.module.d.ts +0 -1
- package/lib/testing/core.testing.module.d.ts +0 -1
- package/lib/testing/noop-translate.module.d.ts +2 -1
- package/lib/translation/public-api.d.ts +0 -1
- package/package.json +15 -3
- package/shell/README.md +6 -20
- package/shell/index.d.ts +0 -2
- package/shell/lib/shell.module.d.ts +7 -4
- package/shell/lib/shell.routes.d.ts +1 -13
- package/lib/app-config/provide-app-config.d.ts +0 -23
- package/lib/translation/provide-i18n.d.ts +0 -39
- package/shell/lib/providers.d.ts +0 -36
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { Inject, Injectable, inject } from '@angular/core';
|
|
18
|
+
import { AuthConfig, AUTH_CONFIG, OAuthErrorEvent, OAuthService, OAuthStorage, OAuthSuccessEvent, OAuthLogger } from 'angular-oauth2-oidc';
|
|
19
|
+
import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';
|
|
20
|
+
import { from, race, ReplaySubject } from 'rxjs';
|
|
21
|
+
import { distinctUntilChanged, filter, map, shareReplay, switchMap, take } from 'rxjs/operators';
|
|
22
|
+
import { AuthService } from './auth.service';
|
|
23
|
+
import { AUTH_MODULE_CONFIG } from './auth-config';
|
|
24
|
+
import { RetryLoginService } from './retry-login.service';
|
|
25
|
+
import { TimeSyncService } from '../services/time-sync.service';
|
|
26
|
+
import * as i0 from "@angular/core";
|
|
27
|
+
import * as i1 from "angular-oauth2-oidc";
|
|
28
|
+
const isPromise = (value) => value && typeof value.then === 'function';
|
|
29
|
+
export class RedirectAuthService extends AuthService {
|
|
30
|
+
/**
|
|
31
|
+
* Get whether the user has valid Id/Access tokens.
|
|
32
|
+
*
|
|
33
|
+
* @returns `true` if the user is authenticated, otherwise `false`
|
|
34
|
+
*/
|
|
35
|
+
get authenticated() {
|
|
36
|
+
return this.oauthService.hasValidIdToken() && this.oauthService.hasValidAccessToken();
|
|
37
|
+
}
|
|
38
|
+
constructor(oauthService, _oauthStorage, authConfig) {
|
|
39
|
+
super();
|
|
40
|
+
this.oauthService = oauthService;
|
|
41
|
+
this._oauthStorage = _oauthStorage;
|
|
42
|
+
this.authModuleConfig = inject(AUTH_MODULE_CONFIG);
|
|
43
|
+
this._retryLoginService = inject(RetryLoginService);
|
|
44
|
+
this._oauthLogger = inject(OAuthLogger);
|
|
45
|
+
this._timeSyncService = inject(TimeSyncService);
|
|
46
|
+
this._isDiscoveryDocumentLoadedSubject$ = new ReplaySubject();
|
|
47
|
+
this.isDiscoveryDocumentLoaded$ = this._isDiscoveryDocumentLoadedSubject$.asObservable();
|
|
48
|
+
this._loadDiscoveryDocumentPromise = Promise.resolve(false);
|
|
49
|
+
this.AUTH_STORAGE_ITEMS = [
|
|
50
|
+
'access_token',
|
|
51
|
+
'access_token_stored_at',
|
|
52
|
+
'expires_at',
|
|
53
|
+
'granted_scopes',
|
|
54
|
+
'id_token',
|
|
55
|
+
'id_token_claims_obj',
|
|
56
|
+
'id_token_expires_at',
|
|
57
|
+
'id_token_stored_at',
|
|
58
|
+
'nonce',
|
|
59
|
+
'PKCE_verifier',
|
|
60
|
+
'refresh_token',
|
|
61
|
+
'session_state'
|
|
62
|
+
];
|
|
63
|
+
this.authConfig = authConfig;
|
|
64
|
+
this.oauthService.clearHashAfterLogin = true;
|
|
65
|
+
this.oauthService.events.pipe(filter(() => oauthService.showDebugInformation)).subscribe((event) => {
|
|
66
|
+
if (event instanceof OAuthErrorEvent) {
|
|
67
|
+
this._oauthLogger.error('OAuthErrorEvent Object:', event);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this._oauthLogger.info('OAuthEvent Object:', event);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.oauthErrorEvent$ = this.oauthService.events.pipe(filter((event) => event instanceof OAuthErrorEvent), map((event) => event));
|
|
74
|
+
this.firstOauthErrorEventOccur$ = this.oauthErrorEvent$.pipe(take(1));
|
|
75
|
+
this.firstOauthErrorEventExcludingTokenRefreshError$ = this.oauthErrorEvent$.pipe(filter((event) => event instanceof OAuthErrorEvent && event.type !== 'token_refresh_error'), take(1));
|
|
76
|
+
this.secondTokenRefreshErrorEventOccur$ = this.oauthErrorEvent$.pipe(filter((event) => event.type === 'token_refresh_error'), take(2), filter((_, index) => index === 1));
|
|
77
|
+
this.oauthErrorEventOccurDueToClockOutOfSync$ = this.oauthErrorEvent$.pipe(switchMap(() => this._timeSyncService.checkTimeSync(this.oauthService.clockSkewInSec)), filter((timeSync) => timeSync?.outOfSync), map((timeSync) => new Error(`OAuth error occurred due to local machine clock ${timeSync.localDateTimeISO} being out of sync with server time ${timeSync.serverDateTimeISO}`)), take(1));
|
|
78
|
+
this.authenticated$ = this.oauthService.events.pipe(map(() => this.authenticated), distinctUntilChanged(), shareReplay(1));
|
|
79
|
+
this.tokenHasExpiredDueToClockOutOfSync$ = this.oauthService.events.pipe(map(() => !!this.oauthService.getIdentityClaims() && this.tokenHasExpired()), filter((hasExpired) => hasExpired), switchMap(() => this._timeSyncService.checkTimeSync(this.oauthService.clockSkewInSec)), filter((timeSync) => timeSync?.outOfSync), map((timeSync) => new Error(`Token has expired due to local machine clock ${timeSync.localDateTimeISO} being out of sync with server time ${timeSync.serverDateTimeISO}`)), take(1));
|
|
80
|
+
this.onLogout$ = this.oauthService.events.pipe(filter((event) => event.type === 'logout'), map(() => undefined));
|
|
81
|
+
this.combinedOAuthErrorsStream$ = race([
|
|
82
|
+
this.oauthErrorEventOccurDueToClockOutOfSync$,
|
|
83
|
+
this.firstOauthErrorEventExcludingTokenRefreshError$,
|
|
84
|
+
this.tokenHasExpiredDueToClockOutOfSync$,
|
|
85
|
+
this.secondTokenRefreshErrorEventOccur$
|
|
86
|
+
]);
|
|
87
|
+
this.combinedOAuthErrorsStream$.subscribe({
|
|
88
|
+
next: (res) => {
|
|
89
|
+
this._oauthLogger.error(res);
|
|
90
|
+
this.logout();
|
|
91
|
+
},
|
|
92
|
+
error: () => { }
|
|
93
|
+
});
|
|
94
|
+
this.oauthService.events.pipe(take(1)).subscribe(() => {
|
|
95
|
+
if (this.oauthService.getAccessToken() && !this.oauthService.hasValidAccessToken()) {
|
|
96
|
+
if (this.oauthService.showDebugInformation) {
|
|
97
|
+
this._oauthLogger.warn('Access token not valid. Removing all auth items from storage');
|
|
98
|
+
}
|
|
99
|
+
this.AUTH_STORAGE_ITEMS.map((item) => this._oauthStorage.removeItem(item));
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
this.onLogin = this.authenticated$.pipe(filter((authenticated) => authenticated), map(() => undefined));
|
|
103
|
+
this.onTokenReceived = this.oauthService.events.pipe(filter((event) => event.type === 'token_received'), map(() => undefined));
|
|
104
|
+
this.idpUnreachable$ = this.oauthService.events.pipe(filter((event) => event.type === 'discovery_document_load_error'), map((event) => event.reason));
|
|
105
|
+
}
|
|
106
|
+
init() {
|
|
107
|
+
if (isPromise(this.authConfig)) {
|
|
108
|
+
return this.authConfig.then((config) => this.configureAuth(config));
|
|
109
|
+
}
|
|
110
|
+
return this.configureAuth(this.authConfig);
|
|
111
|
+
}
|
|
112
|
+
logout() {
|
|
113
|
+
this.oauthService.logOut();
|
|
114
|
+
}
|
|
115
|
+
ensureDiscoveryDocument() {
|
|
116
|
+
this._loadDiscoveryDocumentPromise = this._loadDiscoveryDocumentPromise
|
|
117
|
+
.catch(() => false)
|
|
118
|
+
.then((loaded) => {
|
|
119
|
+
if (!loaded) {
|
|
120
|
+
return this.oauthService.loadDiscoveryDocument().then(() => true);
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
124
|
+
return this._loadDiscoveryDocumentPromise;
|
|
125
|
+
}
|
|
126
|
+
login(currentUrl) {
|
|
127
|
+
let stateKey;
|
|
128
|
+
if (currentUrl) {
|
|
129
|
+
const randomValue = window.crypto.getRandomValues(new Uint32Array(1))[0];
|
|
130
|
+
stateKey = `auth_state_${randomValue}${Date.now()}`;
|
|
131
|
+
this._oauthStorage.setItem(stateKey, JSON.stringify(currentUrl || {}));
|
|
132
|
+
}
|
|
133
|
+
// initLoginFlow will initialize the login flow in either code or implicit depending on the configuration
|
|
134
|
+
this.ensureDiscoveryDocument().then(() => void this.oauthService.initLoginFlow(stateKey));
|
|
135
|
+
}
|
|
136
|
+
baseAuthLogin(username, password) {
|
|
137
|
+
this.oauthService.useHttpBasicAuth = true;
|
|
138
|
+
return from(this.oauthService.fetchTokenUsingPasswordFlow(username, password)).pipe(map((response) => {
|
|
139
|
+
const props = new Map();
|
|
140
|
+
props.set('id_token', response.id_token);
|
|
141
|
+
// for backward compatibility we need to set the response in our storage
|
|
142
|
+
this.oauthService['storeAccessTokenResponse'](response.access_token, response.refresh_token, response.expires_in, response.scope, props);
|
|
143
|
+
return response;
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
async loginCallback(loginOptions) {
|
|
147
|
+
return this.ensureDiscoveryDocument()
|
|
148
|
+
.then(() => this._retryLoginService.tryToLoginTimes({
|
|
149
|
+
...loginOptions,
|
|
150
|
+
preventClearHashAfterLogin: this.authModuleConfig.preventClearHashAfterLogin
|
|
151
|
+
}))
|
|
152
|
+
.then(() => this._getRedirectUrl());
|
|
153
|
+
}
|
|
154
|
+
_getRedirectUrl() {
|
|
155
|
+
const DEFAULT_REDIRECT = '/';
|
|
156
|
+
const stateKey = this.oauthService.state;
|
|
157
|
+
if (stateKey) {
|
|
158
|
+
const stateStringified = this._oauthStorage.getItem(stateKey);
|
|
159
|
+
if (stateStringified) {
|
|
160
|
+
// cleanup state from storage
|
|
161
|
+
this._oauthStorage.removeItem(stateKey);
|
|
162
|
+
return JSON.parse(stateStringified);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return DEFAULT_REDIRECT;
|
|
166
|
+
}
|
|
167
|
+
configureAuth(config) {
|
|
168
|
+
this.oauthService.configure(config);
|
|
169
|
+
this.oauthService.tokenValidationHandler = new JwksValidationHandler();
|
|
170
|
+
if (config.sessionChecksEnabled) {
|
|
171
|
+
this.oauthService.events.pipe(filter((event) => event.type === 'session_terminated')).subscribe(() => {
|
|
172
|
+
this.oauthService.logOut();
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return this.ensureDiscoveryDocument()
|
|
176
|
+
.then(() => {
|
|
177
|
+
this._isDiscoveryDocumentLoadedSubject$.next(true);
|
|
178
|
+
this.oauthService.setupAutomaticSilentRefresh();
|
|
179
|
+
return void this.allowRefreshTokenAndSilentRefreshOnMultipleTabs();
|
|
180
|
+
})
|
|
181
|
+
.catch(() => {
|
|
182
|
+
// catch error to prevent the app from crashing when trying to access unprotected routes
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Fix a known issue (https://github.com/manfredsteyer/angular-oauth2-oidc/issues/850)
|
|
187
|
+
* where multiple tabs can cause the token refresh and the silent refresh to fail.
|
|
188
|
+
* This patch is based on the solutions provided in the following comments:
|
|
189
|
+
* https://github.com/manfredsteyer/angular-oauth2-oidc/issues/850#issuecomment-889921776 fix silent refresh for the implicit flow
|
|
190
|
+
* https://github.com/manfredsteyer/angular-oauth2-oidc/issues/850#issuecomment-1557286966 fix refresh token for the code flow
|
|
191
|
+
*/
|
|
192
|
+
allowRefreshTokenAndSilentRefreshOnMultipleTabs() {
|
|
193
|
+
let lastUpdatedAccessToken;
|
|
194
|
+
if (this.oauthService.hasValidAccessToken()) {
|
|
195
|
+
lastUpdatedAccessToken = this.oauthService.getAccessToken();
|
|
196
|
+
}
|
|
197
|
+
const originalRefreshToken = this.oauthService.refreshToken.bind(this.oauthService);
|
|
198
|
+
this.oauthService.refreshToken = () => navigator.locks.request(`refresh_tokens_${location.origin}`, () => {
|
|
199
|
+
if (!!lastUpdatedAccessToken && lastUpdatedAccessToken !== this.oauthService.getAccessToken()) {
|
|
200
|
+
this.oauthService.eventsSubject.next(new OAuthSuccessEvent('token_received'));
|
|
201
|
+
this.oauthService.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));
|
|
202
|
+
lastUpdatedAccessToken = this.oauthService.getAccessToken();
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
return originalRefreshToken().then((resp) => (lastUpdatedAccessToken = resp.access_token));
|
|
206
|
+
});
|
|
207
|
+
const originalSilentRefresh = this.oauthService.silentRefresh.bind(this.oauthService);
|
|
208
|
+
this.oauthService.silentRefresh = async (params = {}, noPrompt = true) => navigator.locks.request(`silent_refresh_${location.origin}`, async () => {
|
|
209
|
+
if (lastUpdatedAccessToken !== this.oauthService.getAccessToken()) {
|
|
210
|
+
this.oauthService.eventsSubject.next(new OAuthSuccessEvent('token_received'));
|
|
211
|
+
this.oauthService.eventsSubject.next(new OAuthSuccessEvent('token_refreshed'));
|
|
212
|
+
const event = new OAuthSuccessEvent('silently_refreshed');
|
|
213
|
+
this.oauthService.eventsSubject.next(event);
|
|
214
|
+
lastUpdatedAccessToken = this.oauthService.getAccessToken();
|
|
215
|
+
return event;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
return originalSilentRefresh(params, noPrompt);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
updateIDPConfiguration(config) {
|
|
223
|
+
this.oauthService.configure(config);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Checks if the token has expired.
|
|
227
|
+
*
|
|
228
|
+
* This method retrieves the identity claims from the OAuth service and calculates
|
|
229
|
+
* the token's issued and expiration times. It then compares the current time with
|
|
230
|
+
* these values, considering a clock skew and a configurable expiration decrease.
|
|
231
|
+
*
|
|
232
|
+
* @returns - Returns `true` if the token has expired, otherwise `false`.
|
|
233
|
+
*/
|
|
234
|
+
tokenHasExpired() {
|
|
235
|
+
const claims = this.oauthService.getIdentityClaims();
|
|
236
|
+
if (!claims) {
|
|
237
|
+
this._oauthLogger.warn('No claims found in the token');
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
const now = Date.now();
|
|
241
|
+
const issuedAtMSec = claims.iat * 1000;
|
|
242
|
+
const expiresAtMSec = claims.exp * 1000;
|
|
243
|
+
const clockSkewInMSec = this.oauthService.clockSkewInSec * 1000;
|
|
244
|
+
this.showTokenExpiredDebugInformations(now, issuedAtMSec, expiresAtMSec, clockSkewInMSec);
|
|
245
|
+
return issuedAtMSec - clockSkewInMSec >= now || expiresAtMSec + clockSkewInMSec - this.oauthService.decreaseExpirationBySec <= now;
|
|
246
|
+
}
|
|
247
|
+
showTokenExpiredDebugInformations(now, issuedAtMSec, expiresAtMSec, clockSkewInMSec) {
|
|
248
|
+
if (this.oauthService.showDebugInformation) {
|
|
249
|
+
this._oauthLogger.warn('now: ', new Date(now));
|
|
250
|
+
this._oauthLogger.warn('issuedAt: ', new Date(issuedAtMSec));
|
|
251
|
+
this._oauthLogger.warn('expiresAt: ', new Date(expiresAtMSec));
|
|
252
|
+
this._oauthLogger.warn('clockSkewInMSec: ', clockSkewInMSec);
|
|
253
|
+
this._oauthLogger.warn('this.oauthService.decreaseExpirationBySec: ', this.oauthService.decreaseExpirationBySec);
|
|
254
|
+
this._oauthLogger.warn('issuedAtMSec - clockSkewInMSec >= now: ', issuedAtMSec - clockSkewInMSec >= now);
|
|
255
|
+
this._oauthLogger.warn('expiresAtMSec + clockSkewInMSec - this.oauthService.decreaseExpirationBySec <= now: ', expiresAtMSec + clockSkewInMSec - this.oauthService.decreaseExpirationBySec <= now);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedirectAuthService, deps: [{ token: i1.OAuthService }, { token: i1.OAuthStorage }, { token: AUTH_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
259
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedirectAuthService }); }
|
|
260
|
+
}
|
|
261
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedirectAuthService, decorators: [{
|
|
262
|
+
type: Injectable
|
|
263
|
+
}], ctorParameters: () => [{ type: i1.OAuthService }, { type: i1.OAuthStorage }, { type: i1.AuthConfig, decorators: [{
|
|
264
|
+
type: Inject,
|
|
265
|
+
args: [AUTH_CONFIG]
|
|
266
|
+
}] }] });
|
|
267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvcmUvc3JjL2xpYi9hdXRoL29pZGMvcmVkaXJlY3QtYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQ0gsVUFBVSxFQUNWLFdBQVcsRUFDWCxlQUFlLEVBRWYsWUFBWSxFQUNaLFlBQVksRUFHWixpQkFBaUIsRUFDakIsV0FBVyxFQUNkLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFFLElBQUksRUFBYyxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUFFaEUsTUFBTSxTQUFTLEdBQUcsQ0FBSSxLQUFxQixFQUF1QixFQUFFLENBQUMsS0FBSyxJQUFJLE9BQVEsS0FBb0IsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBRy9ILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxXQUFXO0lBdUVoRDs7OztPQUlHO0lBQ0gsSUFBSSxhQUFhO1FB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QUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNkNBQTZDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLFlBQVksR0FBRyxlQUFlLElBQUksR0FBRyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ2xCLHNGQUFzRixFQUN0RixhQUFhLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLElBQUksR0FBRyxDQUNyRixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7K0dBNVlRLG1CQUFtQiwwRUFpR2lFLFdBQVc7bUhBakcvRixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVU7OzBCQWtHK0UsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBdXRoQ29uZmlnLFxuICAgIEFVVEhfQ09ORklHLFxuICAgIE9BdXRoRXJyb3JFdmVudCxcbiAgICBPQXV0aEV2ZW50LFxuICAgIE9BdXRoU2VydmljZSxcbiAgICBPQXV0aFN0b3JhZ2UsXG4gICAgVG9rZW5SZXNwb25zZSxcbiAgICBMb2dpbk9wdGlvbnMsXG4gICAgT0F1dGhTdWNjZXNzRXZlbnQsXG4gICAgT0F1dGhMb2dnZXJcbn0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBKd2tzVmFsaWRhdGlvbkhhbmRsZXIgfSBmcm9tICdhbmd1bGFyLW9hdXRoMi1vaWRjLWp3a3MnO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgcmFjZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBVVRIX01PRFVMRV9DT05GSUcsIEF1dGhNb2R1bGVDb25maWcgfSBmcm9tICcuL2F1dGgtY29uZmlnJztcbmltcG9ydCB7IFJldHJ5TG9naW5TZXJ2aWNlIH0gZnJvbSAnLi9yZXRyeS1sb2dpbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRpbWVTeW5jU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RpbWUtc3luYy5zZXJ2aWNlJztcblxuY29uc3QgaXNQcm9taXNlID0gPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZTxUPik6IHZhbHVlIGlzIFByb21pc2U8VD4gPT4gdmFsdWUgJiYgdHlwZW9mICh2YWx1ZSBhcyBQcm9taXNlPFQ+KS50aGVuID09PSAnZnVuY3Rpb24nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVkaXJlY3RBdXRoU2VydmljZSBleHRlbmRzIEF1dGhTZXJ2aWNlIHtcbiAgICByZWFkb25seSBhdXRoTW9kdWxlQ29uZmlnOiBBdXRoTW9kdWxlQ29uZmlnID0gaW5qZWN0KEFVVEhfTU9EVUxFX0NPTkZJRyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmV0cnlMb2dpblNlcnZpY2U6IFJldHJ5TG9naW5TZXJ2aWNlID0gaW5qZWN0KFJldHJ5TG9naW5TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vYXV0aExvZ2dlcjogT0F1dGhMb2dnZXIgPSBpbmplY3QoT0F1dGhMb2dnZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVTeW5jU2VydmljZTogVGltZVN5bmNTZXJ2aWNlID0gaW5qZWN0KFRpbWVTeW5jU2VydmljZSk7XG5cbiAgICBwcml2YXRlIF9pc0Rpc2NvdmVyeURvY3VtZW50TG9hZGVkU3ViamVjdCQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigpO1xuICAgIHB1YmxpYyBpc0Rpc2NvdmVyeURvY3VtZW50TG9hZGVkJCA9IHRoaXMuX2lzRGlzY292ZXJ5RG9jdW1lbnRMb2FkZWRTdWJqZWN0JC5hc09ic2VydmFibGUoKTtcblxuICAgIG9uTG9naW46IE9ic2VydmFibGU8YW55PjtcblxuICAgIG9uVG9rZW5SZWNlaXZlZDogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfbG9hZERpc2NvdmVyeURvY3VtZW50UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBPYnNlcnZhYmxlIHN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gdGhlIHVzZXIgbG9ncyBvdXQuXG4gICAgICpcbiAgICAgKiBUaGlzIG9ic2VydmFibGUgbGlzdGVucyB0byB0aGUgZXZlbnRzIGVtaXR0ZWQgYnkgdGhlIE9BdXRoIHNlcnZpY2UgYW5kIGZpbHRlcnNcbiAgICAgKiB0aGVtIHRvIG9ubHkgaW5jbHVkZSBpbnN0YW5jZXMgb2YgT0F1dGhTdWNjZXNzRXZlbnQgd2l0aCB0aGUgdHlwZSBgbG9nb3V0YC5cbiAgICAgKi9cbiAgICBvbkxvZ291dCQ6IE9ic2VydmFibGU8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBPYnNlcnZhYmxlIHN0cmVhbSB0aGF0IGVtaXRzIE9BdXRoRXJyb3JFdmVudCBpbnN0YW5jZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIG9ic2VydmFibGUgbGlzdGVucyB0byB0aGUgZXZlbnRzIGVtaXR0ZWQgYnkgdGhlIE9BdXRoIHNlcnZpY2UgYW5kIGZpbHRlcnNcbiAgICAgKiB0aGVtIHRvIG9ubHkgaW5jbHVkZSBpbnN0YW5jZXMgb2YgT0F1dGhFcnJvckV2ZW50LiBJdCB0aGVuIG1hcHMgdGhlc2UgZXZlbnRzXG4gICAgICogdG8gdGhlIGNvcnJlY3QgdHlwZS5cbiAgICAgKi9cbiAgICBvYXV0aEVycm9yRXZlbnQkOiBPYnNlcnZhYmxlPE9BdXRoRXJyb3JFdmVudD47XG5cbiAgICAvKipcbiAgICAgKiBPYnNlcnZhYmxlIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBmaXJzdCBPQXV0aCBlcnJvciBldmVudCB0aGF0IG9jY3Vycy5cbiAgICAgKi9cbiAgICBmaXJzdE9hdXRoRXJyb3JFdmVudE9jY3VyJDogT2JzZXJ2YWJsZTxPQXV0aEVycm9yRXZlbnQ+O1xuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSBzdHJlYW0gdGhhdCBlbWl0cyB0aGUgZmlyc3QgT0F1dGggZXJyb3IgZXZlbnQgdGhhdCBvY2N1cnMsIGV4Y2x1ZGluZyB0b2tlbiByZWZyZXNoIGVycm9ycy5cbiAgICAgKi9cbiAgICBmaXJzdE9hdXRoRXJyb3JFdmVudEV4Y2x1ZGluZ1Rva2VuUmVmcmVzaEVycm9yJDogT2JzZXJ2YWJsZTxPQXV0aEVycm9yRXZlbnQ+O1xuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSBzdHJlYW0gdGhhdCBlbWl0cyB0aGUgc2Vjb25kIE9BdXRoIHRva2VuIHJlZnJlc2ggZXJyb3IgZXZlbnQgdGhhdCBvY2N1cnMuXG4gICAgICovXG4gICAgc2Vjb25kVG9rZW5SZWZyZXNoRXJyb3JFdmVudE9jY3VyJDogT2JzZXJ2YWJsZTxPQXV0aEVycm9yRXZlbnQ+O1xuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGVycm9yIHdoZW4gdGhlIHRva2VuIGhhcyBleHBpcmVkIGR1ZSB0b1xuICAgICAqIHRoZSBsb2NhbCBtYWNoaW5lIGNsb2NrIGJlaW5nIG91dCBvZiBzeW5jIHdpdGggdGhlIHNlcnZlciB0aW1lLlxuICAgICAqL1xuICAgIHRva2VuSGFzRXhwaXJlZER1ZVRvQ2xvY2tPdXRPZlN5bmMkOiBPYnNlcnZhYmxlPEVycm9yPjtcblxuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBlcnJvciB3aGVuIHRoZSBPQXV0aCBlcnJvciBldmVudCBvY2N1cnMgZHVlIHRvXG4gICAgICogdGhlIGxvY2FsIG1hY2hpbmUgY2xvY2sgYmVpbmcgb3V0IG9mIHN5bmMgd2l0aCB0aGUgc2VydmVyIHRpbWUuXG4gICAgICovXG4gICAgb2F1dGhFcnJvckV2ZW50T2NjdXJEdWVUb0Nsb2NrT3V0T2ZTeW5jJDogT2JzZXJ2YWJsZTxFcnJvcj47XG5cbiAgICAvKipcbiAgICAgKiBPYnNlcnZhYmxlIHN0cmVhbSB0aGF0IGVtaXRzIGVpdGhlciBPQXV0aEVycm9yRXZlbnQgb3IgRXJyb3IuXG4gICAgICogVGhpcyBzdHJlYW0gY29tYmluZXMgbXVsdGlwbGUgT0F1dGggZXJyb3Igc291cmNlcyBpbnRvIGEgc2luZ2xlIG9ic2VydmFibGUuXG4gICAgICovXG4gICAgY29tYmluZWRPQXV0aEVycm9yc1N0cmVhbSQ6IE9ic2VydmFibGU8T0F1dGhFcnJvckV2ZW50IHwgRXJyb3I+O1xuXG4gICAgLyoqIFN1YnNjcmliZSB0byB3aGV0aGVyIHRoZSB1c2VyIGhhcyB2YWxpZCBJZC9BY2Nlc3MgdG9rZW5zLiAgKi9cbiAgICBhdXRoZW50aWNhdGVkJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKiogU3Vic2NyaWJlIHRvIGVycm9ycyByZWFjaGluZyB0aGUgSWRQLiAqL1xuICAgIGlkcFVucmVhY2hhYmxlJCE6IE9ic2VydmFibGU8RXJyb3I+O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHdoZXRoZXIgdGhlIHVzZXIgaGFzIHZhbGlkIElkL0FjY2VzcyB0b2tlbnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBnZXQgYXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkSWRUb2tlbigpICYmIHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF1dGhDb25maWchOiBBdXRoQ29uZmlnIHwgUHJvbWlzZTxBdXRoQ29uZmlnPjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgQVVUSF9TVE9SQUdFX0lURU1TOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJ2FjY2Vzc190b2tlbicsXG4gICAgICAgICdhY2Nlc3NfdG9rZW5fc3RvcmVkX2F0JyxcbiAgICAgICAgJ2V4cGlyZXNfYXQnLFxuICAgICAgICAnZ3JhbnRlZF9zY29wZXMnLFxuICAgICAgICAnaWRfdG9rZW4nLFxuICAgICAgICAnaWRfdG9rZW5fY2xhaW1zX29iaicsXG4gICAgICAgICdpZF90b2tlbl9leHBpcmVzX2F0JyxcbiAgICAgICAgJ2lkX3Rva2VuX3N0b3JlZF9hdCcsXG4gICAgICAgICdub25jZScsXG4gICAgICAgICdQS0NFX3ZlcmlmaWVyJyxcbiAgICAgICAgJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICAnc2Vzc2lvbl9zdGF0ZSdcbiAgICBdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSwgcHJpdmF0ZSBfb2F1dGhTdG9yYWdlOiBPQXV0aFN0b3JhZ2UsIEBJbmplY3QoQVVUSF9DT05GSUcpIGF1dGhDb25maWc6IEF1dGhDb25maWcpIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmF1dGhDb25maWcgPSBhdXRoQ29uZmlnO1xuXG4gICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLmNsZWFySGFzaEFmdGVyTG9naW4gPSB0cnVlO1xuXG4gICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKGZpbHRlcigoKSA9PiBvYXV0aFNlcnZpY2Uuc2hvd0RlYnVnSW5mb3JtYXRpb24pKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBPQXV0aEVycm9yRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aExvZ2dlci5lcnJvcignT0F1dGhFcnJvckV2ZW50IE9iamVjdDonLCBldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoTG9nZ2VyLmluZm8oJ09BdXRoRXZlbnQgT2JqZWN0OicsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vYXV0aEVycm9yRXZlbnQkID0gdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE9BdXRoRXJyb3JFdmVudCksXG4gICAgICAgICAgICBtYXAoKGV2ZW50KSA9PiBldmVudCBhcyBPQXV0aEVycm9yRXZlbnQpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5maXJzdE9hdXRoRXJyb3JFdmVudE9jY3VyJCA9IHRoaXMub2F1dGhFcnJvckV2ZW50JC5waXBlKHRha2UoMSkpO1xuXG4gICAgICAgIHRoaXMuZmlyc3RPYXV0aEVycm9yRXZlbnRFeGNsdWRpbmdUb2tlblJlZnJlc2hFcnJvciQgPSB0aGlzLm9hdXRoRXJyb3JFdmVudCQucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50ICYmIGV2ZW50LnR5cGUgIT09ICd0b2tlbl9yZWZyZXNoX2Vycm9yJyksXG4gICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZWNvbmRUb2tlblJlZnJlc2hFcnJvckV2ZW50T2NjdXIkID0gdGhpcy5vYXV0aEVycm9yRXZlbnQkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudC50eXBlID09PSAndG9rZW5fcmVmcmVzaF9lcnJvcicpLFxuICAgICAgICAgICAgdGFrZSgyKSxcbiAgICAgICAgICAgIGZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ID09PSAxKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub2F1dGhFcnJvckV2ZW50T2NjdXJEdWVUb0Nsb2NrT3V0T2ZTeW5jJCA9IHRoaXMub2F1dGhFcnJvckV2ZW50JC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX3RpbWVTeW5jU2VydmljZS5jaGVja1RpbWVTeW5jKHRoaXMub2F1dGhTZXJ2aWNlLmNsb2NrU2tld0luU2VjKSksXG4gICAgICAgICAgICBmaWx0ZXIoKHRpbWVTeW5jKSA9PiB0aW1lU3luYz8ub3V0T2ZTeW5jKSxcbiAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAodGltZVN5bmMpID0+XG4gICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGBPQXV0aCBlcnJvciBvY2N1cnJlZCBkdWUgdG8gbG9jYWwgbWFjaGluZSBjbG9jayAke3RpbWVTeW5jLmxvY2FsRGF0ZVRpbWVJU099IGJlaW5nIG91dCBvZiBzeW5jIHdpdGggc2VydmVyIHRpbWUgJHt0aW1lU3luYy5zZXJ2ZXJEYXRlVGltZUlTT31gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGVkJCA9IHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuYXV0aGVudGljYXRlZCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnRva2VuSGFzRXhwaXJlZER1ZVRvQ2xvY2tPdXRPZlN5bmMkID0gdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gISF0aGlzLm9hdXRoU2VydmljZS5nZXRJZGVudGl0eUNsYWltcygpICYmIHRoaXMudG9rZW5IYXNFeHBpcmVkKCkpLFxuICAgICAgICAgICAgZmlsdGVyKChoYXNFeHBpcmVkKSA9PiBoYXNFeHBpcmVkKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl90aW1lU3luY1NlcnZpY2UuY2hlY2tUaW1lU3luYyh0aGlzLm9hdXRoU2VydmljZS5jbG9ja1NrZXdJblNlYykpLFxuICAgICAgICAgICAgZmlsdGVyKCh0aW1lU3luYykgPT4gdGltZVN5bmM/Lm91dE9mU3luYyksXG4gICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgKHRpbWVTeW5jKSA9PlxuICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgVG9rZW4gaGFzIGV4cGlyZWQgZHVlIHRvIGxvY2FsIG1hY2hpbmUgY2xvY2sgJHt0aW1lU3luYy5sb2NhbERhdGVUaW1lSVNPfSBiZWluZyBvdXQgb2Ygc3luYyB3aXRoIHNlcnZlciB0aW1lICR7dGltZVN5bmMuc2VydmVyRGF0ZVRpbWVJU099YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub25Mb2dvdXQkID0gdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBldmVudC50eXBlID09PSAnbG9nb3V0JyksXG4gICAgICAgICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29tYmluZWRPQXV0aEVycm9yc1N0cmVhbSQgPSByYWNlKFtcbiAgICAgICAgICAgIHRoaXMub2F1dGhFcnJvckV2ZW50T2NjdXJEdWVUb0Nsb2NrT3V0T2ZTeW5jJCxcbiAgICAgICAgICAgIHRoaXMuZmlyc3RPYXV0aEVycm9yRXZlbnRFeGNsdWRpbmdUb2tlblJlZnJlc2hFcnJvciQsXG4gICAgICAgICAgICB0aGlzLnRva2VuSGFzRXhwaXJlZER1ZVRvQ2xvY2tPdXRPZlN5bmMkLFxuICAgICAgICAgICAgdGhpcy5zZWNvbmRUb2tlblJlZnJlc2hFcnJvckV2ZW50T2NjdXIkXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHRoaXMuY29tYmluZWRPQXV0aEVycm9yc1N0cmVhbSQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aExvZ2dlci5lcnJvcihyZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHt9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vYXV0aFNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSAmJiAhdGhpcy5vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub2F1dGhTZXJ2aWNlLnNob3dEZWJ1Z0luZm9ybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoTG9nZ2VyLndhcm4oJ0FjY2VzcyB0b2tlbiBub3QgdmFsaWQuIFJlbW92aW5nIGFsbCBhdXRoIGl0ZW1zIGZyb20gc3RvcmFnZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLkFVVEhfU1RPUkFHRV9JVEVNUy5tYXAoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5fb2F1dGhTdG9yYWdlLnJlbW92ZUl0ZW0oaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uTG9naW4gPSB0aGlzLmF1dGhlbnRpY2F0ZWQkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGF1dGhlbnRpY2F0ZWQpID0+IGF1dGhlbnRpY2F0ZWQpLFxuICAgICAgICAgICAgbWFwKCgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm9uVG9rZW5SZWNlaXZlZCA9IHRoaXMub2F1dGhTZXJ2aWNlLmV2ZW50cy5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChldmVudDogT0F1dGhFdmVudCkgPT4gZXZlbnQudHlwZSA9PT0gJ3Rva2VuX3JlY2VpdmVkJyksXG4gICAgICAgICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaWRwVW5yZWFjaGFibGUkID0gdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgT0F1dGhFcnJvckV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICdkaXNjb3ZlcnlfZG9jdW1lbnRfbG9hZF9lcnJvcicpLFxuICAgICAgICAgICAgbWFwKChldmVudCkgPT4gZXZlbnQucmVhc29uIGFzIEVycm9yKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGluaXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmIChpc1Byb21pc2UodGhpcy5hdXRoQ29uZmlnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZy50aGVuKChjb25maWcpID0+IHRoaXMuY29uZmlndXJlQXV0aChjb25maWcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyZUF1dGgodGhpcy5hdXRoQ29uZmlnKTtcbiAgICB9XG5cbiAgICBsb2dvdXQoKSB7XG4gICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ091dCgpO1xuICAgIH1cblxuICAgIGVuc3VyZURpc2NvdmVyeURvY3VtZW50KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLl9sb2FkRGlzY292ZXJ5RG9jdW1lbnRQcm9taXNlID0gdGhpcy5fbG9hZERpc2NvdmVyeURvY3VtZW50UHJvbWlzZVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IGZhbHNlKVxuICAgICAgICAgICAgLnRoZW4oKGxvYWRlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnQoKS50aGVuKCgpID0+IHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZERpc2NvdmVyeURvY3VtZW50UHJvbWlzZTtcbiAgICB9XG5cbiAgICBsb2dpbihjdXJyZW50VXJsPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBzdGF0ZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChjdXJyZW50VXJsKSB7XG4gICAgICAgICAgICBjb25zdCByYW5kb21WYWx1ZSA9IHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF07XG4gICAgICAgICAgICBzdGF0ZUtleSA9IGBhdXRoX3N0YXRlXyR7cmFuZG9tVmFsdWV9JHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICB0aGlzLl9vYXV0aFN0b3JhZ2Uuc2V0SXRlbShzdGF0ZUtleSwgSlNPTi5zdHJpbmdpZnkoY3VycmVudFVybCB8fCB7fSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW5pdExvZ2luRmxvdyB3aWxsIGluaXRpYWxpemUgdGhlIGxvZ2luIGZsb3cgaW4gZWl0aGVyIGNvZGUgb3IgaW1wbGljaXQgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uXG4gICAgICAgIHRoaXMuZW5zdXJlRGlzY292ZXJ5RG9jdW1lbnQoKS50aGVuKCgpID0+IHZvaWQgdGhpcy5vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdyhzdGF0ZUtleSkpO1xuICAgIH1cblxuICAgIGJhc2VBdXRoTG9naW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8VG9rZW5SZXNwb25zZT4ge1xuICAgICAgICB0aGlzLm9hdXRoU2VydmljZS51c2VIdHRwQmFzaWNBdXRoID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLm9hdXRoU2VydmljZS5mZXRjaFRva2VuVXNpbmdQYXNzd29yZEZsb3codXNlcm5hbWUsIHBhc3N3b3JkKSkucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgICAgICAgICAgcHJvcHMuc2V0KCdpZF90b2tlbicsIHJlc3BvbnNlLmlkX3Rva2VuKTtcbiAgICAgICAgICAgICAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3ZSBuZWVkIHRvIHNldCB0aGUgcmVzcG9uc2UgaW4gb3VyIHN0b3JhZ2VcbiAgICAgICAgICAgICAgICB0aGlzLm9hdXRoU2VydmljZVsnc3RvcmVBY2Nlc3NUb2tlblJlc3BvbnNlJ10oXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXhwaXJlc19pbixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2NvcGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGxvZ2luQ2FsbGJhY2sobG9naW5PcHRpb25zPzogTG9naW5PcHRpb25zKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlRGlzY292ZXJ5RG9jdW1lbnQoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLl9yZXRyeUxvZ2luU2VydmljZS50cnlUb0xvZ2luVGltZXMoe1xuICAgICAgICAgICAgICAgICAgICAuLi5sb2dpbk9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHByZXZlbnRDbGVhckhhc2hBZnRlckxvZ2luOiB0aGlzLmF1dGhNb2R1bGVDb25maWcucHJldmVudENsZWFySGFzaEFmdGVyTG9naW5cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5fZ2V0UmVkaXJlY3RVcmwoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0UmVkaXJlY3RVcmwoKSB7XG4gICAgICAgIGNvbnN0IERFRkFVTFRfUkVESVJFQ1QgPSAnLyc7XG4gICAgICAgIGNvbnN0IHN0YXRlS2V5ID0gdGhpcy5vYXV0aFNlcnZpY2Uuc3RhdGU7XG5cbiAgICAgICAgaWYgKHN0YXRlS2V5KSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZVN0cmluZ2lmaWVkID0gdGhpcy5fb2F1dGhTdG9yYWdlLmdldEl0ZW0oc3RhdGVLZXkpO1xuICAgICAgICAgICAgaWYgKHN0YXRlU3RyaW5naWZpZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhbnVwIHN0YXRlIGZyb20gc3RvcmFnZVxuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU3RvcmFnZS5yZW1vdmVJdGVtKHN0YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdGF0ZVN0cmluZ2lmaWVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBERUZBVUxUX1JFRElSRUNUO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlndXJlQXV0aChjb25maWc6IEF1dGhDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5vYXV0aFNlcnZpY2UuY29uZmlndXJlKGNvbmZpZyk7XG4gICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLnRva2VuVmFsaWRhdGlvbkhhbmRsZXIgPSBuZXcgSndrc1ZhbGlkYXRpb25IYW5kbGVyKCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zZXNzaW9uQ2hlY2tzRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5vYXV0aFNlcnZpY2UuZXZlbnRzLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQudHlwZSA9PT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLmxvZ091dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnN1cmVEaXNjb3ZlcnlEb2N1bWVudCgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNEaXNjb3ZlcnlEb2N1bWVudExvYWRlZFN1YmplY3QkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgdGhpcy5hbGxvd1JlZnJlc2hUb2tlbkFuZFNpbGVudFJlZnJlc2hPbk11bHRpcGxlVGFicygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY2F0Y2ggZXJyb3IgdG8gcHJldmVudCB0aGUgYXBwIGZyb20gY3Jhc2hpbmcgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIHVucHJvdGVjdGVkIHJvdXRlc1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRml4IGEga25vd24gaXNzdWUgKGh0dHBzOi8vZ2l0aHViLmNvbS9tYW5mcmVkc3RleWVyL2FuZ3VsYXItb2F1dGgyLW9pZGMvaXNzdWVzLzg1MClcbiAgICAgKiB3aGVyZSBtdWx0aXBsZSB0YWJzIGNhbiBjYXVzZSB0aGUgdG9rZW4gcmVmcmVzaCBhbmQgdGhlIHNpbGVudCByZWZyZXNoIHRvIGZhaWwuXG4gICAgICogVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiB0aGUgc29sdXRpb25zIHByb3ZpZGVkIGluIHRoZSBmb2xsb3dpbmcgY29tbWVudHM6XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL21hbmZyZWRzdGV5ZXIvYW5ndWxhci1vYXV0aDItb2lkYy9pc3N1ZXMvODUwI2lzc3VlY29tbWVudC04ODk5MjE3NzYgZml4IHNpbGVudCByZWZyZXNoIGZvciB0aGUgaW1wbGljaXQgZmxvd1xuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYW5mcmVkc3RleWVyL2FuZ3VsYXItb2F1dGgyLW9pZGMvaXNzdWVzLzg1MCNpc3N1ZWNvbW1lbnQtMTU1NzI4Njk2NiBmaXggcmVmcmVzaCB0b2tlbiBmb3IgdGhlIGNvZGUgZmxvd1xuICAgICAqL1xuICAgIHByaXZhdGUgYWxsb3dSZWZyZXNoVG9rZW5BbmRTaWxlbnRSZWZyZXNoT25NdWx0aXBsZVRhYnMoKSB7XG4gICAgICAgIGxldCBsYXN0VXBkYXRlZEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMub2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xuICAgICAgICAgICAgbGFzdFVwZGF0ZWRBY2Nlc3NUb2tlbiA9IHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlZnJlc2hUb2tlbiA9IHRoaXMub2F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbi5iaW5kKHRoaXMub2F1dGhTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5vYXV0aFNlcnZpY2UucmVmcmVzaFRva2VuID0gKCk6IFByb21pc2U8VG9rZW5SZXNwb25zZT4gPT5cbiAgICAgICAgICAgIG5hdmlnYXRvci5sb2Nrcy5yZXF1ZXN0KGByZWZyZXNoX3Rva2Vuc18ke2xvY2F0aW9uLm9yaWdpbn1gLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEhbGFzdFVwZGF0ZWRBY2Nlc3NUb2tlbiAmJiBsYXN0VXBkYXRlZEFjY2Vzc1Rva2VuICE9PSB0aGlzLm9hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm9hdXRoU2VydmljZSBhcyBhbnkpLmV2ZW50c1N1YmplY3QubmV4dChuZXcgT0F1dGhTdWNjZXNzRXZlbnQoJ3Rva2VuX3JlY2VpdmVkJykpO1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5vYXV0aFNlcnZpY2UgYXMgYW55KS5ldmVudHNTdWJqZWN0Lm5leHQobmV3IE9BdXRoU3VjY2Vzc0V2ZW50KCd0b2tlbl9yZWZyZXNoZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RVcGRhdGVkQWNjZXNzVG9rZW4gPSB0aGlzLm9hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVmcmVzaFRva2VuKCkudGhlbigocmVzcCkgPT4gKGxhc3RVcGRhdGVkQWNjZXNzVG9rZW4gPSByZXNwLmFjY2Vzc190b2tlbikpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTaWxlbnRSZWZyZXNoID0gdGhpcy5vYXV0aFNlcnZpY2Uuc2lsZW50UmVmcmVzaC5iaW5kKHRoaXMub2F1dGhTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5vYXV0aFNlcnZpY2Uuc2lsZW50UmVmcmVzaCA9IGFzeW5jIChwYXJhbXM6IGFueSA9IHt9LCBub1Byb21wdCA9IHRydWUpOiBQcm9taXNlPE9BdXRoRXZlbnQ+ID0+XG4gICAgICAgICAgICBuYXZpZ2F0b3IubG9ja3MucmVxdWVzdChgc2lsZW50X3JlZnJlc2hfJHtsb2NhdGlvbi5vcmlnaW59YCwgYXN5bmMgKCk6IFByb21pc2U8T0F1dGhFdmVudD4gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChsYXN0VXBkYXRlZEFjY2Vzc1Rva2VuICE9PSB0aGlzLm9hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm9hdXRoU2VydmljZSBhcyBhbnkpLmV2ZW50c1N1YmplY3QubmV4dChuZXcgT0F1dGhTdWNjZXNzRXZlbnQoJ3Rva2VuX3JlY2VpdmVkJykpO1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5vYXV0aFNlcnZpY2UgYXMgYW55KS5ldmVudHNTdWJqZWN0Lm5leHQobmV3IE9BdXRoU3VjY2Vzc0V2ZW50KCd0b2tlbl9yZWZyZXNoZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE9BdXRoU3VjY2Vzc0V2ZW50KCdzaWxlbnRseV9yZWZyZXNoZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMub2F1dGhTZXJ2aWNlIGFzIGFueSkuZXZlbnRzU3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFVwZGF0ZWRBY2Nlc3NUb2tlbiA9IHRoaXMub2F1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxTaWxlbnRSZWZyZXNoKHBhcmFtcywgbm9Qcm9tcHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUlEUENvbmZpZ3VyYXRpb24oY29uZmlnOiBBdXRoQ29uZmlnKSB7XG4gICAgICAgIHRoaXMub2F1dGhTZXJ2aWNlLmNvbmZpZ3VyZShjb25maWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgdG9rZW4gaGFzIGV4cGlyZWQuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGlkZW50aXR5IGNsYWltcyBmcm9tIHRoZSBPQXV0aCBzZXJ2aWNlIGFuZCBjYWxjdWxhdGVzXG4gICAgICogdGhlIHRva2VuJ3MgaXNzdWVkIGFuZCBleHBpcmF0aW9uIHRpbWVzLiBJdCB0aGVuIGNvbXBhcmVzIHRoZSBjdXJyZW50IHRpbWUgd2l0aFxuICAgICAqIHRoZXNlIHZhbHVlcywgY29uc2lkZXJpbmcgYSBjbG9jayBza2V3IGFuZCBhIGNvbmZpZ3VyYWJsZSBleHBpcmF0aW9uIGRlY3JlYXNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdG9rZW4gaGFzIGV4cGlyZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIHRva2VuSGFzRXhwaXJlZCgpIHtcbiAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy5vYXV0aFNlcnZpY2UuZ2V0SWRlbnRpdHlDbGFpbXMoKTtcbiAgICAgICAgaWYgKCFjbGFpbXMpIHtcbiAgICAgICAgICAgIHRoaXMuX29hdXRoTG9nZ2VyLndhcm4oJ05vIGNsYWltcyBmb3VuZCBpbiB0aGUgdG9rZW4nKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBpc3N1ZWRBdE1TZWMgPSBjbGFpbXMuaWF0ICogMTAwMDtcbiAgICAgICAgY29uc3QgZXhwaXJlc0F0TVNlYyA9IGNsYWltcy5leHAgKiAxMDAwO1xuICAgICAgICBjb25zdCBjbG9ja1NrZXdJbk1TZWMgPSB0aGlzLm9hdXRoU2VydmljZS5jbG9ja1NrZXdJblNlYyAqIDEwMDA7XG5cbiAgICAgICAgdGhpcy5zaG93VG9rZW5FeHBpcmVkRGVidWdJbmZvcm1hdGlvbnMobm93LCBpc3N1ZWRBdE1TZWMsIGV4cGlyZXNBdE1TZWMsIGNsb2NrU2tld0luTVNlYyk7XG4gICAgICAgIHJldHVybiBpc3N1ZWRBdE1TZWMgLSBjbG9ja1NrZXdJbk1TZWMgPj0gbm93IHx8IGV4cGlyZXNBdE1TZWMgKyBjbG9ja1NrZXdJbk1TZWMgLSB0aGlzLm9hdXRoU2VydmljZS5kZWNyZWFzZUV4cGlyYXRpb25CeVNlYyA8PSBub3c7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93VG9rZW5FeHBpcmVkRGVidWdJbmZvcm1hdGlvbnMobm93OiBudW1iZXIsIGlzc3VlZEF0TVNlYzogbnVtYmVyLCBleHBpcmVzQXRNU2VjOiBudW1iZXIsIGNsb2NrU2tld0luTVNlYzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm9hdXRoU2VydmljZS5zaG93RGVidWdJbmZvcm1hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fb2F1dGhMb2dnZXIud2Fybignbm93OiAnLCBuZXcgRGF0ZShub3cpKTtcbiAgICAgICAgICAgIHRoaXMuX29hdXRoTG9nZ2VyLndhcm4oJ2lzc3VlZEF0OiAnLCBuZXcgRGF0ZShpc3N1ZWRBdE1TZWMpKTtcbiAgICAgICAgICAgIHRoaXMuX29hdXRoTG9nZ2VyLndhcm4oJ2V4cGlyZXNBdDogJywgbmV3IERhdGUoZXhwaXJlc0F0TVNlYykpO1xuICAgICAgICAgICAgdGhpcy5fb2F1dGhMb2dnZXIud2FybignY2xvY2tTa2V3SW5NU2VjOiAnLCBjbG9ja1NrZXdJbk1TZWMpO1xuICAgICAgICAgICAgdGhpcy5fb2F1dGhMb2dnZXIud2FybigndGhpcy5vYXV0aFNlcnZpY2UuZGVjcmVhc2VFeHBpcmF0aW9uQnlTZWM6ICcsIHRoaXMub2F1dGhTZXJ2aWNlLmRlY3JlYXNlRXhwaXJhdGlvbkJ5U2VjKTtcbiAgICAgICAgICAgIHRoaXMuX29hdXRoTG9nZ2VyLndhcm4oJ2lzc3VlZEF0TVNlYyAtIGNsb2NrU2tld0luTVNlYyA+PSBub3c6ICcsIGlzc3VlZEF0TVNlYyAtIGNsb2NrU2tld0luTVNlYyA+PSBub3cpO1xuICAgICAgICAgICAgdGhpcy5fb2F1dGhMb2dnZXIud2FybihcbiAgICAgICAgICAgICAgICAnZXhwaXJlc0F0TVNlYyArIGNsb2NrU2tld0luTVNlYyAtIHRoaXMub2F1dGhTZXJ2aWNlLmRlY3JlYXNlRXhwaXJhdGlvbkJ5U2VjIDw9IG5vdzogJyxcbiAgICAgICAgICAgICAgICBleHBpcmVzQXRNU2VjICsgY2xvY2tTa2V3SW5NU2VjIC0gdGhpcy5vYXV0aFNlcnZpY2UuZGVjcmVhc2VFeHBpcmF0aW9uQnlTZWMgPD0gbm93XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { inject, Injectable } from '@angular/core';
|
|
18
|
+
import { OAuthErrorEvent, OAuthService } from 'angular-oauth2-oidc';
|
|
19
|
+
import * as i0 from "@angular/core";
|
|
20
|
+
export class RetryLoginService {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.oauthService = inject(OAuthService);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Attempts to log in a specified number of times if the initial login attempt fails.
|
|
26
|
+
*
|
|
27
|
+
* @param loginOptions - The options to be used for the login attempt.
|
|
28
|
+
* @param maxLoginAttempts - The maximum number of login attempts. Defaults to 3.
|
|
29
|
+
* @returns A promise that resolves to `true` if the login is successful, or rejects with an error if all attempts fail.
|
|
30
|
+
*/
|
|
31
|
+
tryToLoginTimes(loginOptions, maxLoginAttempts = 3) {
|
|
32
|
+
let retryCount = 0;
|
|
33
|
+
const maxRetries = maxLoginAttempts - 1;
|
|
34
|
+
const attemptLogin = () => this.oauthService.tryLogin({ ...loginOptions }).catch((error) => {
|
|
35
|
+
if (retryCount < maxRetries) {
|
|
36
|
+
console.error(`Login attempt ${retryCount + 1} of ${maxLoginAttempts} failed. ${retryCount < maxLoginAttempts - 1 ? 'Retrying...' : ''}`);
|
|
37
|
+
retryCount++;
|
|
38
|
+
return attemptLogin();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const errorMessage = this.getErrorMessage(error, maxLoginAttempts);
|
|
42
|
+
throw new Error(errorMessage);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return attemptLogin();
|
|
46
|
+
}
|
|
47
|
+
getErrorMessage(error, maxLoginAttempts) {
|
|
48
|
+
const isOAuthErrorEvent = error instanceof OAuthErrorEvent;
|
|
49
|
+
let oAuthErrorMessage;
|
|
50
|
+
if (isOAuthErrorEvent) {
|
|
51
|
+
oAuthErrorMessage = error.reason?.reason || error.type.toString();
|
|
52
|
+
}
|
|
53
|
+
const errorDescription = oAuthErrorMessage || error;
|
|
54
|
+
const errorMessage = `Login failed after ${maxLoginAttempts} attempts. caused by: ${errorDescription}`;
|
|
55
|
+
return errorMessage;
|
|
56
|
+
}
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RetryLoginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
58
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RetryLoginService, providedIn: 'root' }); }
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RetryLoginService, decorators: [{
|
|
61
|
+
type: Injectable,
|
|
62
|
+
args: [{
|
|
63
|
+
providedIn: 'root'
|
|
64
|
+
}]
|
|
65
|
+
}] });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktbG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvYXV0aC9vaWRjL3JldHJ5LWxvZ2luLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFnQixlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBS2xGLE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFJWSxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztLQXdDL0M7SUF0Q0c7Ozs7OztPQU1HO0lBQ0gsZUFBZSxDQUFDLFlBQTBCLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQztRQUM1RCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sWUFBWSxHQUFHLEdBQXFCLEVBQUUsQ0FDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDNUQsSUFBSSxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQ1QsaUJBQWlCLFVBQVUsR0FBRyxDQUFDLE9BQU8sZ0JBQWdCLFlBQVksVUFBVSxHQUFHLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDN0gsQ0FBQztnQkFDRixVQUFVLEVBQUUsQ0FBQztnQkFDYixPQUFPLFlBQVksRUFBRSxDQUFDO1lBQzFCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLE9BQU8sWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFVLEVBQUUsZ0JBQXdCO1FBQ3hELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxZQUFZLGVBQWUsQ0FBQztRQUMzRCxJQUFJLGlCQUF5QixDQUFDO1FBQzlCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixpQkFBaUIsR0FBSSxLQUFLLENBQUMsTUFBYyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9FLENBQUM7UUFDRCxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixJQUFJLEtBQUssQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxzQkFBc0IsZ0JBQWdCLHlCQUF5QixnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZHLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7K0dBeENRLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmQsTUFBTTs7NEZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dpbk9wdGlvbnMsIE9BdXRoRXJyb3JFdmVudCwgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUmV0cnlMb2dpblNlcnZpY2Uge1xuICAgIHByaXZhdGUgb2F1dGhTZXJ2aWNlID0gaW5qZWN0KE9BdXRoU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBsb2cgaW4gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzIGlmIHRoZSBpbml0aWFsIGxvZ2luIGF0dGVtcHQgZmFpbHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9naW5PcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gYmUgdXNlZCBmb3IgdGhlIGxvZ2luIGF0dGVtcHQuXG4gICAgICogQHBhcmFtIG1heExvZ2luQXR0ZW1wdHMgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbG9naW4gYXR0ZW1wdHMuIERlZmF1bHRzIHRvIDMuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBsb2dpbiBpcyBzdWNjZXNzZnVsLCBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgYWxsIGF0dGVtcHRzIGZhaWwuXG4gICAgICovXG4gICAgdHJ5VG9Mb2dpblRpbWVzKGxvZ2luT3B0aW9uczogTG9naW5PcHRpb25zLCBtYXhMb2dpbkF0dGVtcHRzID0gMyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IG1heFJldHJpZXMgPSBtYXhMb2dpbkF0dGVtcHRzIC0gMTtcblxuICAgICAgICBjb25zdCBhdHRlbXB0TG9naW4gPSAoKTogUHJvbWlzZTxib29sZWFuPiA9PlxuICAgICAgICAgICAgdGhpcy5vYXV0aFNlcnZpY2UudHJ5TG9naW4oeyAuLi5sb2dpbk9wdGlvbnMgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgTG9naW4gYXR0ZW1wdCAke3JldHJ5Q291bnQgKyAxfSBvZiAke21heExvZ2luQXR0ZW1wdHN9IGZhaWxlZC4gJHtyZXRyeUNvdW50IDwgbWF4TG9naW5BdHRlbXB0cyAtIDEgPyAnUmV0cnlpbmcuLi4nIDogJyd9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRlbXB0TG9naW4oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvciwgbWF4TG9naW5BdHRlbXB0cyk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhdHRlbXB0TG9naW4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnJvcjogYW55LCBtYXhMb2dpbkF0dGVtcHRzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaXNPQXV0aEVycm9yRXZlbnQgPSBlcnJvciBpbnN0YW5jZW9mIE9BdXRoRXJyb3JFdmVudDtcbiAgICAgICAgbGV0IG9BdXRoRXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gICAgICAgIGlmIChpc09BdXRoRXJyb3JFdmVudCkge1xuICAgICAgICAgICAgb0F1dGhFcnJvck1lc3NhZ2UgPSAoZXJyb3IucmVhc29uIGFzIGFueSk/LnJlYXNvbiB8fCBlcnJvci50eXBlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyb3JEZXNjcmlwdGlvbiA9IG9BdXRoRXJyb3JNZXNzYWdlIHx8IGVycm9yO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgTG9naW4gZmFpbGVkIGFmdGVyICR7bWF4TG9naW5BdHRlbXB0c30gYXR0ZW1wdHMuIGNhdXNlZCBieTogJHtlcnJvckRlc2NyaXB0aW9ufWA7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { inject, Injectable } from '@angular/core';
|
|
18
|
+
import { HttpResponse } from '@angular/common/http';
|
|
19
|
+
import { tap } from 'rxjs/operators';
|
|
20
|
+
import { OAuthService, OAuthStorage } from 'angular-oauth2-oidc';
|
|
21
|
+
import * as i0 from "@angular/core";
|
|
22
|
+
/**
|
|
23
|
+
* TokenInterceptor is an HTTP interceptor that processes HTTP requests and responses
|
|
24
|
+
* to handle the id_token. It checks if the request URL matches the token endpoint
|
|
25
|
+
* and processes the response to store the `id_token` in the OAuth storage if it is
|
|
26
|
+
* not already set.
|
|
27
|
+
* The purpose of this interceptor is to fix the missing `id_token_hint` required by the Idp to complete the logout.
|
|
28
|
+
* `id_token_hint` is set by the `angular-oauth2-oidc` library only when the `id_token` is set in the storage.
|
|
29
|
+
* https://github.com/manfredsteyer/angular-oauth2-oidc/blob/15.0.0/projects/lib/src/oauth-service.ts#L2555
|
|
30
|
+
*
|
|
31
|
+
* See the related issue: https://github.com/manfredsteyer/angular-oauth2-oidc/issues/1443
|
|
32
|
+
*
|
|
33
|
+
* @function intercept
|
|
34
|
+
* @param {HttpRequest<unknown>} request - The outgoing HTTP request.
|
|
35
|
+
* @param {HttpHandler} next - The next handler in the HTTP request chain.
|
|
36
|
+
* @returns {Observable<HttpEvent<unknown>>} An observable of the HTTP event.
|
|
37
|
+
*/
|
|
38
|
+
export class TokenInterceptor {
|
|
39
|
+
constructor() {
|
|
40
|
+
this._oauthStorage = inject(OAuthStorage);
|
|
41
|
+
this._oauthService = inject(OAuthService);
|
|
42
|
+
}
|
|
43
|
+
intercept(request, next) {
|
|
44
|
+
const tokenEndpoint = this._oauthService.tokenEndpoint;
|
|
45
|
+
if (tokenEndpoint && request.url === tokenEndpoint) {
|
|
46
|
+
return next.handle(request).pipe(tap((event) => {
|
|
47
|
+
if (event instanceof HttpResponse) {
|
|
48
|
+
if (!this._oauthService.getIdToken() && event?.body?.id_token) {
|
|
49
|
+
this._oauthStorage.setItem('id_token', event.body.id_token);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
return next.handle(request);
|
|
55
|
+
}
|
|
56
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenInterceptor }); }
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenInterceptor, decorators: [{
|
|
60
|
+
type: Injectable
|
|
61
|
+
}] });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2F1dGgvb2lkYy90b2tlbi5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXdELFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUdqRTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBakI3QjtRQWtCcUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckMsa0JBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7S0FpQnpEO0lBZkcsU0FBUyxDQUFDLE9BQTZCLEVBQUUsSUFBaUI7UUFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDdkQsSUFBSSxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM1QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDVixJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hFLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDTixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7K0dBbEJRLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQWpCNUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwUmVxdWVzdCwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UsIE9BdXRoU3RvcmFnZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuXG5ASW5qZWN0YWJsZSgpXG4vKipcbiAqIFRva2VuSW50ZXJjZXB0b3IgaXMgYW4gSFRUUCBpbnRlcmNlcHRvciB0aGF0IHByb2Nlc3NlcyBIVFRQIHJlcXVlc3RzIGFuZCByZXNwb25zZXNcbiAqIHRvIGhhbmRsZSB0aGUgaWRfdG9rZW4uIEl0IGNoZWNrcyBpZiB0aGUgcmVxdWVzdCBVUkwgbWF0Y2hlcyB0aGUgdG9rZW4gZW5kcG9pbnRcbiAqIGFuZCBwcm9jZXNzZXMgdGhlIHJlc3BvbnNlIHRvIHN0b3JlIHRoZSBgaWRfdG9rZW5gIGluIHRoZSBPQXV0aCBzdG9yYWdlIGlmIGl0IGlzXG4gKiBub3QgYWxyZWFkeSBzZXQuXG4gKiBUaGUgcHVycG9zZSBvZiB0aGlzIGludGVyY2VwdG9yIGlzIHRvIGZpeCB0aGUgbWlzc2luZyBgaWRfdG9rZW5faGludGAgcmVxdWlyZWQgYnkgdGhlIElkcCB0byBjb21wbGV0ZSB0aGUgbG9nb3V0LlxuICogYGlkX3Rva2VuX2hpbnRgIGlzIHNldCBieSB0aGUgYGFuZ3VsYXItb2F1dGgyLW9pZGNgIGxpYnJhcnkgb25seSB3aGVuIHRoZSBgaWRfdG9rZW5gIGlzIHNldCBpbiB0aGUgc3RvcmFnZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYW5mcmVkc3RleWVyL2FuZ3VsYXItb2F1dGgyLW9pZGMvYmxvYi8xNS4wLjAvcHJvamVjdHMvbGliL3NyYy9vYXV0aC1zZXJ2aWNlLnRzI0wyNTU1XG4gKlxuICogU2VlIHRoZSByZWxhdGVkIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vbWFuZnJlZHN0ZXllci9hbmd1bGFyLW9hdXRoMi1vaWRjL2lzc3Vlcy8xNDQzXG4gKlxuICogQGZ1bmN0aW9uIGludGVyY2VwdFxuICogQHBhcmFtIHtIdHRwUmVxdWVzdDx1bmtub3duPn0gcmVxdWVzdCAtIFRoZSBvdXRnb2luZyBIVFRQIHJlcXVlc3QuXG4gKiBAcGFyYW0ge0h0dHBIYW5kbGVyfSBuZXh0IC0gVGhlIG5leHQgaGFuZGxlciBpbiB0aGUgSFRUUCByZXF1ZXN0IGNoYWluLlxuICogQHJldHVybnMge09ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+Pn0gQW4gb2JzZXJ2YWJsZSBvZiB0aGUgSFRUUCBldmVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29hdXRoU3RvcmFnZSA9IGluamVjdChPQXV0aFN0b3JhZ2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29hdXRoU2VydmljZSA9IGluamVjdChPQXV0aFNlcnZpY2UpO1xuXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiB7XG4gICAgICAgIGNvbnN0IHRva2VuRW5kcG9pbnQgPSB0aGlzLl9vYXV0aFNlcnZpY2UudG9rZW5FbmRwb2ludDtcbiAgICAgICAgaWYgKHRva2VuRW5kcG9pbnQgJiYgcmVxdWVzdC51cmwgPT09IHRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5nZXRJZFRva2VuKCkgJiYgZXZlbnQ/LmJvZHk/LmlkX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTdG9yYWdlLnNldEl0ZW0oJ2lkX3Rva2VuJywgZXZlbnQuYm9keS5pZF90b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
export class AuthenticationConfirmationComponent {
|
|
20
|
+
constructor() { }
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationConfirmationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthenticationConfirmationComponent, selector: "ng-component", ngImport: i0, template: '<div data-automation-id="auth-confirmation"></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationConfirmationComponent, decorators: [{
|
|
25
|
+
type: Component,
|
|
26
|
+
args: [{
|
|
27
|
+
template: '<div data-automation-id="auth-confirmation"></div>',
|
|
28
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
29
|
+
}]
|
|
30
|
+
}], ctorParameters: () => [] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tY29uZmlybWF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvYXV0aC9vaWRjL3ZpZXcvYXV0aGVudGljYXRpb24tY29uZmlybWF0aW9uL2F1dGhlbnRpY2F0aW9uLWNvbmZpcm1hdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNbkUsTUFBTSxPQUFPLG1DQUFtQztJQUM1QyxnQkFBZSxDQUFDOytHQURQLG1DQUFtQzttR0FBbkMsbUNBQW1DLG9EQUhsQyxvREFBb0Q7OzRGQUdyRCxtQ0FBbUM7a0JBSi9DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9EQUFvRDtvQkFDOUQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlOiAnPGRpdiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhdXRoLWNvbmZpcm1hdGlvblwiPjwvZGl2PicsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25Db25maXJtYXRpb25Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge31cbn1cbiJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
export * from './authentication-interceptor/auth-bearer.interceptor';
|
|
18
|
+
export * from './guard/auth-guard.service';
|
|
19
|
+
export * from './guard/auth-guard';
|
|
20
|
+
export * from './guard/auth-guard-ecm.service';
|
|
21
|
+
export * from './guard/auth-guard-bpm.service';
|
|
22
|
+
export * from './guard/auth-guard-sso-role.service';
|
|
23
|
+
export * from './services/authentication.service';
|
|
24
|
+
export * from './services/identity-role.service';
|
|
25
|
+
export * from './services/identity-user.service';
|
|
26
|
+
export * from './services/identity-group.service';
|
|
27
|
+
export * from './services/jwt-helper.service';
|
|
28
|
+
export * from './services/oauth2.service';
|
|
29
|
+
export * from './services/user-access.service';
|
|
30
|
+
export * from './basic-auth/basic-alfresco-auth.service';
|
|
31
|
+
export * from './basic-auth/process-auth';
|
|
32
|
+
export * from './basic-auth/content-auth';
|
|
33
|
+
export * from './interfaces/identity-user.service.interface';
|
|
34
|
+
export * from './interfaces/identity-group.interface';
|
|
35
|
+
export * from './interfaces/openid-configuration.interface';
|
|
36
|
+
export * from './models/oauth-config.model';
|
|
37
|
+
export * from './models/redirection.model';
|
|
38
|
+
export * from './models/identity-group.model';
|
|
39
|
+
export * from './models/identity-user.model';
|
|
40
|
+
export * from './models/identity-role.model';
|
|
41
|
+
export * from './models/user-access.model';
|
|
42
|
+
export * from './models/application-access.model';
|
|
43
|
+
export * from './oidc/public-api';
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvYXV0aC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILGNBQWMsc0RBQXNELENBQUM7QUFFckUsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFDQUFxQyxDQUFDO0FBRXBELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsNkNBQTZDLENBQUM7QUFFNUQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUVsRCxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2F1dGhlbnRpY2F0aW9uLWludGVyY2VwdG9yL2F1dGgtYmVhcmVyLmludGVyY2VwdG9yJztcblxuZXhwb3J0ICogZnJvbSAnLi9ndWFyZC9hdXRoLWd1YXJkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ndWFyZC9hdXRoLWd1YXJkJztcbmV4cG9ydCAqIGZyb20gJy4vZ3VhcmQvYXV0aC1ndWFyZC1lY20uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2d1YXJkL2F1dGgtZ3VhcmQtYnBtLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ndWFyZC9hdXRoLWd1YXJkLXNzby1yb2xlLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9pZGVudGl0eS1yb2xlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9pZGVudGl0eS11c2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9pZGVudGl0eS1ncm91cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvand0LWhlbHBlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvb2F1dGgyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy91c2VyLWFjY2Vzcy5zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9iYXNpYy1hdXRoL2Jhc2ljLWFsZnJlc2NvLWF1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Jhc2ljLWF1dGgvcHJvY2Vzcy1hdXRoJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzaWMtYXV0aC9jb250ZW50LWF1dGgnO1xuXG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvaWRlbnRpdHktdXNlci5zZXJ2aWNlLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvaWRlbnRpdHktZ3JvdXAuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9vcGVuaWQtY29uZmlndXJhdGlvbi5pbnRlcmZhY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9vYXV0aC1jb25maWcubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvcmVkaXJlY3Rpb24ubW9kZWwnO1xuXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9pZGVudGl0eS1ncm91cC5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9pZGVudGl0eS11c2VyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2lkZW50aXR5LXJvbGUubW9kZWwnO1xuXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy91c2VyLWFjY2Vzcy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9hcHBsaWNhdGlvbi1hY2Nlc3MubW9kZWwnO1xuXG5leHBvcnQgKiBmcm9tICcuL29pZGMvcHVibGljLWFwaSc7XG4iXX0=
|