@softheon/armature 15.23.0 → 17.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -18
- package/assets/styles/_utility.scss +35 -0
- package/assets/styles/material-overrides.scss +0 -1
- package/assets/styles/sof-styles.scss +8 -7
- package/{esm2020 → esm2022}/lib/alert-banner/alert-banner-api.mjs +9 -9
- package/{esm2020 → esm2022}/lib/alert-banner/alert-banner.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/alert-banner/components/alert-banner/alert-banner.component.mjs +83 -83
- package/{esm2020 → esm2022}/lib/alert-banner/models/alert-banner-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/alert-banner/models/alert-banner-context.mjs +1 -1
- package/{esm2020 → esm2022}/lib/alert-banner/models/constants.mjs +15 -15
- package/{esm2020 → esm2022}/lib/alert-banner/services/alert-banner.service.mjs +44 -44
- package/esm2022/lib/armature.module.mjs +176 -0
- package/{esm2020 → esm2022}/lib/base-components/base-component-api.mjs +14 -14
- package/esm2022/lib/base-components/base-component.module.mjs +123 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-alert/sof-alert.component.mjs +79 -79
- package/esm2022/lib/base-components/sof-badge/sof-badge.component.mjs +49 -0
- package/esm2022/lib/base-components/sof-banner/sof-banner.component.mjs +49 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.mjs +188 -188
- package/{esm2020 → esm2022}/lib/base-components/sof-confirm-address/sof-confirm-address.component.mjs +59 -59
- package/esm2022/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.mjs +58 -0
- package/esm2022/lib/base-components/sof-modal/sof-modal.component.mjs +57 -0
- package/esm2022/lib/base-components/sof-progress-bar/sof-progress-bar.component.mjs +79 -0
- package/{esm2020 → esm2022}/lib/base-components/sof-radio-card/sof-radio-card.component.mjs +35 -35
- package/{esm2020 → esm2022}/lib/base-components/sof-simple-alert/sof-simple-alert.component.mjs +49 -49
- package/esm2022/lib/base-components/sof-star-rating/sof-star-rating.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/component-save-print/components/component-save-print/component-save-print.component.mjs +91 -91
- package/{esm2020 → esm2022}/lib/component-save-print/services/component-save-print.service.mjs +30 -30
- package/esm2022/lib/component-save-print/sof-ar-component-save-print.module.mjs +29 -0
- package/{esm2020 → esm2022}/lib/core/client-generated/api/session.service.mjs +242 -242
- package/{esm2020 → esm2022}/lib/core/client-generated/configuration.mjs +58 -58
- package/{esm2020 → esm2022}/lib/core/client-generated/encoder.mjs +16 -16
- package/{esm2020 → esm2022}/lib/core/client-generated/model/applicationUserModel.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/client-generated/model/assertedUserModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/brandingModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/errorModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/folderLink.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/identityProfile.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/models.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/client-generated/model/oAuthModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/preferencesRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/rolesRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionGetResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPostRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPostResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPutRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionPutResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/sessionResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/settingsProfile.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/themePaletteColorsModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/themePaletteModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/client-generated/model/trackingModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/model/validationRecordsRow.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/client-generated/variables.mjs +8 -8
- package/esm2022/lib/core/components/app-template/app-template.component.mjs +250 -0
- package/{esm2020 → esm2022}/lib/core/functions/guid.mjs +10 -10
- package/{esm2020 → esm2022}/lib/core/functions/naming-convention.mjs +32 -32
- package/{esm2020 → esm2022}/lib/core/functions/route-to-pre-login-route.mjs +12 -12
- package/{esm2020 → esm2022}/lib/core/initializer/abstract-startup-service.mjs +3 -3
- package/esm2022/lib/core/initializer/initializer.service.mjs +286 -0
- package/{esm2020 → esm2022}/lib/core/interceptors/armature-auth-token-append.interceptor.mjs +73 -73
- package/esm2022/lib/core/models/base-config.mjs +2 -0
- package/esm2022/lib/core/models/constants.mjs +13 -0
- package/{esm2020 → esm2022}/lib/core/models/data-store-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/header-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/http-verbs.mjs +8 -8
- package/{esm2020 → esm2022}/lib/core/models/navigation-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/oidc-auth-settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/route-path.mjs +6 -6
- package/{esm2020 → esm2022}/lib/core/models/session-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/styles.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/subdomain-config.mjs +1 -1
- package/{esm2020 → esm2022}/lib/core/models/typed-session.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/models/user-entity-service-config.mjs +11 -11
- package/{esm2020 → esm2022}/lib/core/services/authorization.service.mjs +175 -175
- package/{esm2020 → esm2022}/lib/core/services/banner.service.mjs +43 -43
- package/{esm2020 → esm2022}/lib/core/services/base-config.service.mjs +32 -32
- package/{esm2020 → esm2022}/lib/core/services/custom-auth-config.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/core/services/default-config.service.mjs +19 -19
- package/{esm2020 → esm2022}/lib/core/services/session.service.mjs +385 -385
- package/{esm2020 → esm2022}/lib/core/services/user-entity.service.mjs +140 -140
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/api/api.mjs +3 -3
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/api/cache.service.mjs +213 -213
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/configuration.mjs +58 -58
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/encoder.mjs +16 -16
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/cacheExpirationType.mjs +15 -15
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/models.mjs +4 -4
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/distributed-cache/client-generated/variables.mjs +8 -8
- package/{esm2020 → esm2022}/lib/distributed-cache/distributed-cache-api.mjs +7 -7
- package/esm2022/lib/distributed-cache/distributed-cache.module.mjs +38 -0
- package/{esm2020 → esm2022}/lib/distributed-cache/models/constants.mjs +2 -2
- package/{esm2020 → esm2022}/lib/distributed-cache/models/policy-person.mjs +8 -8
- package/{esm2020 → esm2022}/lib/distributed-cache/services/server-cache.service.mjs +48 -48
- package/{esm2020 → esm2022}/lib/error/components/error-common/error-common.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/error/error-api.mjs +6 -6
- package/{esm2020 → esm2022}/lib/error/error.module.mjs +31 -31
- package/{esm2020 → esm2022}/lib/error/models/error-common-config.mjs +7 -7
- package/esm2022/lib/faq/components/faq/faq.component.mjs +40 -0
- package/{esm2020 → esm2022}/lib/faq/faq-api.mjs +7 -7
- package/{esm2020 → esm2022}/lib/faq/faq.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/faq/models/faq-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/faq/models/faq.mjs +7 -7
- package/esm2022/lib/feedback-tool/components/feedback-tool/feedback-tool.component.mjs +81 -0
- package/esm2022/lib/feedback-tool/feedback-tool-api.mjs +5 -0
- package/esm2022/lib/feedback-tool/feedback-tool.module.mjs +44 -0
- package/esm2022/lib/footer/components/footer/footer.component.mjs +25 -0
- package/{esm2020 → esm2022}/lib/footer/components/site-map/site-map.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/footer/footer-api.mjs +9 -9
- package/esm2022/lib/footer/footer.module.mjs +45 -0
- package/{esm2020 → esm2022}/lib/footer/models/enum/site-map-direction.mjs +14 -14
- package/{esm2020 → esm2022}/lib/footer/models/footer-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/footer/models/site-map-models.mjs +1 -1
- package/{esm2020 → esm2022}/lib/forms/components/sof-address/sof-address.component.mjs +110 -110
- package/{esm2020 → esm2022}/lib/forms/directives/alphanumeric/alphanumeric.directive.mjs +78 -78
- package/{esm2020 → esm2022}/lib/forms/directives/input-trim/input-trim.directive.mjs +110 -110
- package/{esm2020 → esm2022}/lib/forms/directives/letters-characters/letters-characters.directive.mjs +87 -87
- package/{esm2020 → esm2022}/lib/forms/directives/letters-only/letters-only.directive.mjs +85 -85
- package/{esm2020 → esm2022}/lib/forms/directives/numbers-only/numbers-only.directive.mjs +55 -55
- package/{esm2020 → esm2022}/lib/forms/forms-api.mjs +19 -19
- package/esm2022/lib/forms/forms.module.mjs +87 -0
- package/{esm2020 → esm2022}/lib/forms/models/address.mjs +1 -1
- package/esm2022/lib/forms/models/constants.mjs +10 -0
- package/{esm2020 → esm2022}/lib/forms/models/county.mjs +1 -1
- package/{esm2020 → esm2022}/lib/forms/models/enums/states.mjs +65 -65
- package/{esm2020 → esm2022}/lib/forms/pipes/phone-format.pipe.mjs +33 -33
- package/{esm2020 → esm2022}/lib/forms/services/alert.service.mjs +167 -167
- package/esm2022/lib/header/components/header/header.component.mjs +161 -0
- package/{esm2020 → esm2022}/lib/header/components/mobile-header-menu/mobile-header-menu.component.mjs +39 -39
- package/{esm2020 → esm2022}/lib/header/header-api.mjs +11 -11
- package/esm2022/lib/header/header.module.mjs +85 -0
- package/{esm2020 → esm2022}/lib/header/models/header-auth.settings.mjs +31 -31
- package/{esm2020 → esm2022}/lib/header/models/header-language.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/header-theme.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/header.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/header/models/mobile-header-nav.settings.mjs +1 -1
- package/esm2022/lib/navigation/components/navigation/navigation.component.mjs +556 -0
- package/{esm2020 → esm2022}/lib/navigation/models/nav-theme.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/models/nav.settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/models/navigation.mjs +1 -1
- package/{esm2020 → esm2022}/lib/navigation/navigation-api.mjs +8 -8
- package/esm2022/lib/navigation/navigation.module.mjs +126 -0
- package/{esm2020 → esm2022}/lib/oauth/models/constants.mjs +5 -5
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementAssertionModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementRefreshRequestModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/accountManagementResponseModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/coverageDetail.mjs +18 -18
- package/{esm2020 → esm2022}/lib/oauth/models/generated/finance.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/iSsoResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/person.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/generated/policy.mjs +1 -1
- package/{esm2020 → esm2022}/lib/oauth/models/generated/refreshResponseModel.mjs +12 -12
- package/{esm2020 → esm2022}/lib/oauth/models/hybrid-saml-oauth-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/oauth/oauth-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/oauth/oauth.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/oauth/services/hybrid-saml-oauth.service.mjs +201 -201
- package/{esm2020 → esm2022}/lib/rbac/directives/rbac-action.directive.mjs +50 -50
- package/{esm2020 → esm2022}/lib/rbac/models/access-token-claims.mjs +22 -22
- package/{esm2020 → esm2022}/lib/rbac/models/constants.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/models/decoded-access-token.mjs +68 -68
- package/{esm2020 → esm2022}/lib/rbac/models/rbac-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/models/role-access.mjs +9 -9
- package/{esm2020 → esm2022}/lib/rbac/rbac-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/rbac/rbac.module.mjs +51 -51
- package/{esm2020 → esm2022}/lib/rbac/services/ar-role-nav.service.mjs +104 -104
- package/{esm2020 → esm2022}/lib/rbac/services/oauth2-role.service.mjs +114 -114
- package/{esm2020 → esm2022}/lib/rbac/services/role-nav.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rbac/services/tokens.mjs +3 -3
- package/{esm2020 → esm2022}/lib/resize-panels/components/resize-panels/resize-panels.component.mjs +156 -156
- package/{esm2020 → esm2022}/lib/resize-panels/models/resize-event.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resize-panels/resize-panels-api.mjs +4 -4
- package/{esm2020 → esm2022}/lib/resize-panels/resize-panels.module.mjs +23 -23
- package/{esm2020 → esm2022}/lib/rum/models/arm-error.mjs +28 -28
- package/{esm2020 → esm2022}/lib/rum/models/rum-config.mjs +3 -3
- package/{esm2020 → esm2022}/lib/rum/rum-api.mjs +9 -9
- package/{esm2020 → esm2022}/lib/rum/rum.module.mjs +48 -48
- package/{esm2020 → esm2022}/lib/rum/services/rum.service.mjs +115 -115
- package/{esm2020 → esm2022}/lib/rum/services/shared-error.service.mjs +45 -45
- package/{esm2020 → esm2022}/lib/rum/services/softheon-error-handler.service.mjs +76 -76
- package/{esm2020 → esm2022}/lib/saml/components/redirect-saml/redirect-saml.component.mjs +79 -79
- package/{esm2020 → esm2022}/lib/saml/models/i-saml-request.mjs +1 -1
- package/{esm2020 → esm2022}/lib/saml/models/i-saml-response.mjs +1 -1
- package/{esm2020 → esm2022}/lib/saml/models/redirect-saml-request.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/models/sso-gateway-model.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/saml-api.mjs +14 -14
- package/{esm2020 → esm2022}/lib/saml/saml.module.mjs +43 -43
- package/{esm2020 → esm2022}/lib/saml/services/entry/abstract-saml-entry.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/services/entry/sso-gateway-entry.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/saml/services/send-off/abstract-saml.service.mjs +3 -3
- package/{esm2020 → esm2022}/lib/saml/services/send-off/saml.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/sof-pipe/constants/constants.mjs +16 -16
- package/{esm2020 → esm2022}/lib/sof-pipe/models/sof-date-pipe-format.mjs +1 -1
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.mjs +39 -39
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-date/sof-date.pipe.mjs +59 -59
- package/{esm2020 → esm2022}/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.mjs +28 -28
- package/{esm2020 → esm2022}/lib/sof-pipe/sof-pipe.api.mjs +8 -8
- package/{esm2020 → esm2022}/lib/sof-pipe/sof-pipe.module.mjs +39 -39
- package/{esm2020 → esm2022}/lib/theming/directives/css-override.directive.mjs +69 -69
- package/{esm2020 → esm2022}/lib/theming/models/css-override.mjs +10 -10
- package/{esm2020 → esm2022}/lib/theming/services/theme.service.mjs +169 -169
- package/{esm2020 → esm2022}/lib/theming/theme-api.mjs +5 -5
- package/{esm2020 → esm2022}/lib/theming/theme.module.mjs +31 -31
- package/esm2022/public-api.mjs +52 -0
- package/{esm2020 → esm2022}/softheon-armature.mjs +4 -4
- package/fesm2022/softheon-armature.mjs +7439 -0
- package/fesm2022/softheon-armature.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/alert-banner/alert-banner-api.d.ts +7 -7
- package/lib/alert-banner/alert-banner.module.d.ts +11 -11
- package/lib/alert-banner/components/alert-banner/alert-banner.component.d.ts +40 -40
- package/lib/alert-banner/models/alert-banner-config.d.ts +20 -20
- package/lib/alert-banner/models/alert-banner-context.d.ts +18 -18
- package/lib/alert-banner/models/constants.d.ts +15 -15
- package/lib/alert-banner/services/alert-banner.service.d.ts +28 -28
- package/lib/armature.module.d.ts +46 -46
- package/lib/base-components/base-component-api.d.ts +13 -13
- package/lib/base-components/base-component.module.d.ts +35 -35
- package/lib/base-components/sof-alert/sof-alert.component.d.ts +40 -40
- package/lib/base-components/sof-badge/sof-badge.component.d.ts +26 -30
- package/lib/base-components/sof-banner/sof-banner.component.d.ts +34 -34
- package/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.d.ts +100 -100
- package/lib/base-components/sof-confirm-address/sof-confirm-address.component.d.ts +61 -61
- package/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.d.ts +28 -28
- package/lib/base-components/sof-modal/sof-modal.component.d.ts +51 -51
- package/lib/base-components/sof-progress-bar/sof-progress-bar.component.d.ts +40 -40
- package/lib/base-components/sof-radio-card/sof-radio-card.component.d.ts +20 -20
- package/lib/base-components/sof-simple-alert/sof-simple-alert.component.d.ts +29 -29
- package/lib/base-components/sof-star-rating/sof-star-rating.component.d.ts +25 -25
- package/lib/component-save-print/components/component-save-print/component-save-print.component.d.ts +46 -46
- package/lib/component-save-print/services/component-save-print.service.d.ts +18 -18
- package/lib/component-save-print/sof-ar-component-save-print.module.d.ts +9 -9
- package/lib/core/client-generated/api/session.service.d.ts +94 -94
- package/lib/core/client-generated/configuration.d.ts +48 -48
- package/lib/core/client-generated/encoder.d.ts +10 -10
- package/lib/core/client-generated/model/applicationUserModel.d.ts +54 -54
- package/lib/core/client-generated/model/assertedUserModel.d.ts +25 -25
- package/lib/core/client-generated/model/brandingModel.d.ts +33 -33
- package/lib/core/client-generated/model/errorModel.d.ts +24 -24
- package/lib/core/client-generated/model/folderLink.d.ts +34 -34
- package/lib/core/client-generated/model/identityProfile.d.ts +82 -82
- package/lib/core/client-generated/model/models.d.ts +19 -19
- package/lib/core/client-generated/model/oAuthModel.d.ts +28 -28
- package/lib/core/client-generated/model/preferencesRow.d.ts +15 -15
- package/lib/core/client-generated/model/rolesRow.d.ts +17 -17
- package/lib/core/client-generated/model/sessionGetResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionPostRequestModel.d.ts +39 -39
- package/lib/core/client-generated/model/sessionPostResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionPutRequestModel.d.ts +39 -39
- package/lib/core/client-generated/model/sessionPutResponseModel.d.ts +23 -23
- package/lib/core/client-generated/model/sessionResponseModel.d.ts +43 -43
- package/lib/core/client-generated/model/settingsProfile.d.ts +21 -21
- package/lib/core/client-generated/model/themePaletteColorsModel.d.ts +72 -72
- package/lib/core/client-generated/model/themePaletteModel.d.ts +65 -65
- package/lib/core/client-generated/model/trackingModel.d.ts +24 -24
- package/lib/core/client-generated/model/validationRecordsRow.d.ts +17 -17
- package/lib/core/client-generated/variables.d.ts +8 -8
- package/lib/core/components/app-template/app-template.component.d.ts +61 -67
- package/lib/core/functions/guid.d.ts +4 -4
- package/lib/core/functions/naming-convention.d.ts +6 -6
- package/lib/core/functions/route-to-pre-login-route.d.ts +6 -6
- package/lib/core/initializer/abstract-startup-service.d.ts +5 -5
- package/lib/core/initializer/initializer.service.d.ts +79 -87
- package/lib/core/interceptors/armature-auth-token-append.interceptor.d.ts +31 -31
- package/lib/core/models/base-config.d.ts +18 -23
- package/lib/core/models/constants.d.ts +13 -17
- package/lib/core/models/data-store-config.d.ts +27 -27
- package/lib/core/models/header-config.d.ts +9 -9
- package/lib/core/models/http-verbs.d.ts +10 -10
- package/lib/core/models/navigation-config.d.ts +14 -14
- package/lib/core/models/oidc-auth-settings.d.ts +11 -11
- package/lib/core/models/route-path.d.ts +5 -5
- package/lib/core/models/session-config.d.ts +18 -18
- package/lib/core/models/styles.d.ts +11 -11
- package/lib/core/models/subdomain-config.d.ts +7 -7
- package/lib/core/models/typed-session.d.ts +17 -17
- package/lib/core/models/user-entity-service-config.d.ts +14 -14
- package/lib/core/services/authorization.service.d.ts +54 -54
- package/lib/core/services/banner.service.d.ts +31 -31
- package/lib/core/services/base-config.service.d.ts +21 -21
- package/lib/core/services/custom-auth-config.service.d.ts +6 -6
- package/lib/core/services/default-config.service.d.ts +8 -8
- package/lib/core/services/session.service.d.ts +127 -127
- package/lib/core/services/user-entity.service.d.ts +47 -47
- package/lib/distributed-cache/client-generated/api/api.d.ts +3 -3
- package/lib/distributed-cache/client-generated/api/cache.service.d.ts +72 -72
- package/lib/distributed-cache/client-generated/configuration.d.ts +48 -48
- package/lib/distributed-cache/client-generated/encoder.d.ts +10 -10
- package/lib/distributed-cache/client-generated/model/cacheExpirationType.d.ts +19 -19
- package/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.d.ts +33 -33
- package/lib/distributed-cache/client-generated/model/models.d.ts +4 -4
- package/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.d.ts +20 -20
- package/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.d.ts +20 -20
- package/lib/distributed-cache/client-generated/variables.d.ts +8 -8
- package/lib/distributed-cache/distributed-cache-api.d.ts +7 -7
- package/lib/distributed-cache/distributed-cache.module.d.ts +8 -8
- package/lib/distributed-cache/models/constants.d.ts +2 -2
- package/lib/distributed-cache/models/policy-person.d.ts +19 -19
- package/lib/distributed-cache/services/server-cache.service.d.ts +72 -72
- package/lib/error/components/error-common/error-common.component.d.ts +14 -14
- package/lib/error/error-api.d.ts +4 -4
- package/lib/error/error.module.d.ts +11 -11
- package/lib/error/models/error-common-config.d.ts +21 -21
- package/lib/faq/components/faq/faq.component.d.ts +19 -19
- package/lib/faq/faq-api.d.ts +5 -5
- package/lib/faq/faq.module.d.ts +15 -15
- package/lib/faq/models/faq-config.d.ts +13 -13
- package/lib/faq/models/faq.d.ts +9 -9
- package/lib/feedback-tool/components/feedback-tool/feedback-tool.component.d.ts +62 -0
- package/lib/feedback-tool/feedback-tool-api.d.ts +3 -0
- package/lib/feedback-tool/feedback-tool.module.d.ts +14 -0
- package/lib/footer/components/footer/footer.component.d.ts +14 -14
- package/lib/footer/components/site-map/site-map.component.d.ts +13 -13
- package/lib/footer/footer-api.d.ts +7 -7
- package/lib/footer/footer.module.d.ts +14 -14
- package/lib/footer/models/enum/site-map-direction.d.ts +13 -13
- package/lib/footer/models/footer-config.d.ts +7 -7
- package/lib/footer/models/site-map-models.d.ts +41 -41
- package/lib/forms/components/sof-address/sof-address.component.d.ts +53 -53
- package/lib/forms/directives/alphanumeric/alphanumeric.directive.d.ts +31 -31
- package/lib/forms/directives/input-trim/input-trim.directive.d.ts +58 -58
- package/lib/forms/directives/letters-characters/letters-characters.directive.d.ts +27 -27
- package/lib/forms/directives/letters-only/letters-only.directive.d.ts +27 -27
- package/lib/forms/directives/numbers-only/numbers-only.directive.d.ts +22 -22
- package/lib/forms/forms-api.d.ts +14 -14
- package/lib/forms/forms.module.d.ts +21 -21
- package/lib/forms/models/address.d.ts +14 -14
- package/lib/forms/models/constants.d.ts +9 -9
- package/lib/forms/models/county.d.ts +13 -13
- package/lib/forms/models/enums/states.d.ts +64 -64
- package/lib/forms/pipes/phone-format.pipe.d.ts +10 -10
- package/lib/forms/services/alert.service.d.ts +60 -60
- package/lib/header/components/header/header.component.d.ts +120 -120
- package/lib/header/components/mobile-header-menu/mobile-header-menu.component.d.ts +26 -26
- package/lib/header/header-api.d.ts +9 -9
- package/lib/header/header.module.d.ts +20 -20
- package/lib/header/models/header-auth.settings.d.ts +30 -30
- package/lib/header/models/header-language.settings.d.ts +10 -10
- package/lib/header/models/header-theme.settings.d.ts +19 -19
- package/lib/header/models/header.settings.d.ts +53 -53
- package/lib/header/models/mobile-header-nav.settings.d.ts +11 -11
- package/lib/navigation/components/navigation/navigation.component.d.ts +200 -200
- package/lib/navigation/models/nav-theme.settings.d.ts +25 -25
- package/lib/navigation/models/nav.settings.d.ts +64 -64
- package/lib/navigation/models/navigation.d.ts +40 -40
- package/lib/navigation/navigation-api.d.ts +6 -6
- package/lib/navigation/navigation.module.d.ts +25 -25
- package/lib/oauth/models/constants.d.ts +6 -6
- package/lib/oauth/models/generated/accountManagementAssertionModel.d.ts +49 -49
- package/lib/oauth/models/generated/accountManagementRefreshRequestModel.d.ts +21 -21
- package/lib/oauth/models/generated/accountManagementResponseModel.d.ts +45 -45
- package/lib/oauth/models/generated/coverageDetail.d.ts +67 -67
- package/lib/oauth/models/generated/finance.d.ts +36 -36
- package/lib/oauth/models/generated/iSsoResponseModel.d.ts +44 -44
- package/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.d.ts +45 -45
- package/lib/oauth/models/generated/person.d.ts +53 -53
- package/lib/oauth/models/generated/policy.d.ts +51 -51
- package/lib/oauth/models/generated/refreshResponseModel.d.ts +20 -20
- package/lib/oauth/models/hybrid-saml-oauth-config.d.ts +14 -14
- package/lib/oauth/oauth-api.d.ts +12 -12
- package/lib/oauth/oauth.module.d.ts +9 -9
- package/lib/oauth/services/hybrid-saml-oauth.service.d.ts +59 -59
- package/lib/rbac/directives/rbac-action.directive.d.ts +27 -27
- package/lib/rbac/models/access-token-claims.d.ts +18 -18
- package/lib/rbac/models/constants.d.ts +4 -4
- package/lib/rbac/models/decoded-access-token.d.ts +43 -43
- package/lib/rbac/models/rbac-config.d.ts +15 -15
- package/lib/rbac/models/role-access.d.ts +7 -7
- package/lib/rbac/rbac-api.d.ts +11 -11
- package/lib/rbac/rbac.module.d.ts +19 -19
- package/lib/rbac/services/ar-role-nav.service.d.ts +25 -25
- package/lib/rbac/services/oauth2-role.service.d.ts +51 -51
- package/lib/rbac/services/role-nav.service.d.ts +12 -12
- package/lib/rbac/services/tokens.d.ts +3 -3
- package/lib/resize-panels/components/resize-panels/resize-panels.component.d.ts +64 -64
- package/lib/resize-panels/models/resize-event.d.ts +6 -6
- package/lib/resize-panels/resize-panels-api.d.ts +4 -4
- package/lib/resize-panels/resize-panels.module.d.ts +9 -9
- package/lib/rum/models/arm-error.d.ts +27 -27
- package/lib/rum/models/rum-config.d.ts +9 -9
- package/lib/rum/rum-api.d.ts +7 -7
- package/lib/rum/rum.module.d.ts +14 -14
- package/lib/rum/services/rum.service.d.ts +47 -47
- package/lib/rum/services/shared-error.service.d.ts +27 -27
- package/lib/rum/services/softheon-error-handler.service.d.ts +32 -32
- package/lib/saml/components/redirect-saml/redirect-saml.component.d.ts +41 -41
- package/lib/saml/models/i-saml-request.d.ts +4 -4
- package/lib/saml/models/i-saml-response.d.ts +4 -4
- package/lib/saml/models/redirect-saml-request.d.ts +24 -24
- package/lib/saml/models/sso-gateway-model.d.ts +17 -17
- package/lib/saml/saml-api.d.ts +11 -11
- package/lib/saml/saml.module.d.ts +9 -9
- package/lib/saml/services/entry/abstract-saml-entry.service.d.ts +16 -16
- package/lib/saml/services/entry/sso-gateway-entry.service.d.ts +22 -22
- package/lib/saml/services/send-off/abstract-saml.service.d.ts +20 -20
- package/lib/saml/services/send-off/saml.service.d.ts +32 -32
- package/lib/sof-pipe/constants/constants.d.ts +8 -8
- package/lib/sof-pipe/models/sof-date-pipe-format.d.ts +7 -7
- package/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.d.ts +19 -19
- package/lib/sof-pipe/pipes/sof-date/sof-date.pipe.d.ts +21 -21
- package/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.d.ts +12 -12
- package/lib/sof-pipe/sof-pipe.api.d.ts +7 -7
- package/lib/sof-pipe/sof-pipe.module.d.ts +10 -10
- package/lib/theming/directives/css-override.directive.d.ts +20 -20
- package/lib/theming/models/css-override.d.ts +15 -15
- package/lib/theming/services/theme.service.d.ts +48 -48
- package/lib/theming/theme-api.d.ts +5 -5
- package/lib/theming/theme.module.d.ts +9 -9
- package/package.json +18 -24
- package/public-api.d.ts +49 -48
- package/esm2020/lib/armature.module.mjs +0 -179
- package/esm2020/lib/base-components/base-component.module.mjs +0 -123
- package/esm2020/lib/base-components/sof-badge/sof-badge.component.mjs +0 -60
- package/esm2020/lib/base-components/sof-banner/sof-banner.component.mjs +0 -49
- package/esm2020/lib/base-components/sof-image-checkbox/sof-image-checkbox.component.mjs +0 -58
- package/esm2020/lib/base-components/sof-modal/sof-modal.component.mjs +0 -58
- package/esm2020/lib/base-components/sof-progress-bar/sof-progress-bar.component.mjs +0 -79
- package/esm2020/lib/base-components/sof-star-rating/sof-star-rating.component.mjs +0 -40
- package/esm2020/lib/component-save-print/sof-ar-component-save-print.module.mjs +0 -32
- package/esm2020/lib/core/components/app-template/app-template.component.mjs +0 -258
- package/esm2020/lib/core/initializer/initializer.service.mjs +0 -302
- package/esm2020/lib/core/models/base-config.mjs +0 -2
- package/esm2020/lib/core/models/constants.mjs +0 -17
- package/esm2020/lib/core/models/federated-module-config.mjs +0 -2
- package/esm2020/lib/core/services/federated-module.service.mjs +0 -60
- package/esm2020/lib/distributed-cache/distributed-cache.module.mjs +0 -38
- package/esm2020/lib/faq/components/faq/faq.component.mjs +0 -40
- package/esm2020/lib/footer/components/footer/footer.component.mjs +0 -25
- package/esm2020/lib/footer/footer.module.mjs +0 -45
- package/esm2020/lib/forms/forms.module.mjs +0 -87
- package/esm2020/lib/forms/models/constants.mjs +0 -10
- package/esm2020/lib/header/components/header/header.component.mjs +0 -161
- package/esm2020/lib/header/header.module.mjs +0 -85
- package/esm2020/lib/navigation/components/navigation/navigation.component.mjs +0 -556
- package/esm2020/lib/navigation/navigation.module.mjs +0 -126
- package/esm2020/public-api.mjs +0 -51
- package/fesm2015/softheon-armature.mjs +0 -7372
- package/fesm2015/softheon-armature.mjs.map +0 -1
- package/fesm2020/softheon-armature.mjs +0 -7427
- package/fesm2020/softheon-armature.mjs.map +0 -1
- package/lib/core/models/federated-module-config.d.ts +0 -3
- package/lib/core/services/federated-module.service.d.ts +0 -23
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, of } from 'rxjs';
|
|
3
|
-
import { catchError, map } from 'rxjs/operators';
|
|
4
|
-
import { WINDOW } from '../../core/models/constants';
|
|
5
|
-
import { DecodedAccessToken } from '../../rbac/models/decoded-access-token';
|
|
6
|
-
import { HYBRID_SAML_OAUTH_CONFIG, keyPathPrefix } from '../models/constants';
|
|
7
|
-
import { pascalToCamel } from '../../core/functions/naming-convention';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/common/http";
|
|
10
|
-
import * as i2 from "../models/hybrid-saml-oauth-config";
|
|
11
|
-
/** The hybrid SAML Oauth Service */
|
|
12
|
-
export class HybridSamlOauthService {
|
|
13
|
-
/** The oauth access token */
|
|
14
|
-
get accessToken() {
|
|
15
|
-
return this._accessToken;
|
|
16
|
-
}
|
|
17
|
-
/** Gets the hash */
|
|
18
|
-
get hash() {
|
|
19
|
-
if (this.config?.dataFormat === 'PascalCase') {
|
|
20
|
-
return this.rawData.Hash;
|
|
21
|
-
}
|
|
22
|
-
return this.rawData.hash;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* constructs the service
|
|
26
|
-
* @param windowGeneric The window interface
|
|
27
|
-
* @param config The service configurations
|
|
28
|
-
* @param httpClient The http client
|
|
29
|
-
*/
|
|
30
|
-
constructor(windowGeneric, config, httpClient) {
|
|
31
|
-
this.windowGeneric = windowGeneric;
|
|
32
|
-
this.config = config;
|
|
33
|
-
this.httpClient = httpClient;
|
|
34
|
-
/** The armature access token key */
|
|
35
|
-
this.accessTokenSessionStorageKey = 'Sof-Arm-Access-Token';
|
|
36
|
-
// set the window to be strongly typed, compile error makes it so it can't be done in the constructor
|
|
37
|
-
this.window = this.windowGeneric || window;
|
|
38
|
-
if (!this.config) {
|
|
39
|
-
console.warn('HybridSamlOauthService skipping initialization, please add HYBRID_SAML_OAUTH_CONFIG to your providers to use the service');
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const refreshTimeMinutes = this.config?.tokenRefreshTimeMinutes || 20; // use 20 min token refresh time if non provided
|
|
43
|
-
// set the token endpoint
|
|
44
|
-
if (this.config?.tokenEndpoint$) {
|
|
45
|
-
this.config.tokenEndpoint$.subscribe(endpoint => this.tokenEndpoint = endpoint);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
console.warn('HYBRID_SAML_OAUTH_CONFIG.tokenEndpoint$ is not provided');
|
|
49
|
-
}
|
|
50
|
-
// set the key path from the key path prefix and suffix
|
|
51
|
-
this.keyPath = `${keyPathPrefix}${this.config?.keyPathSuffix}`;
|
|
52
|
-
// read values from local storage based on the key path
|
|
53
|
-
const rawData = this.getRawData();
|
|
54
|
-
if (!rawData) {
|
|
55
|
-
const token = this.window.sessionStorage.getItem(this.accessTokenSessionStorageKey);
|
|
56
|
-
this._accessToken = token;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
if (this.config?.dataFormat === 'PascalCase') {
|
|
60
|
-
this.rawData = JSON.parse(rawData);
|
|
61
|
-
this._accessToken = this.rawData.AccessToken;
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
this.rawData = this.toCamel(JSON.parse(rawData));
|
|
65
|
-
this._accessToken = this.rawData.accessToken;
|
|
66
|
-
}
|
|
67
|
-
// populate the access token
|
|
68
|
-
this.window.sessionStorage.setItem(this.accessTokenSessionStorageKey, this._accessToken);
|
|
69
|
-
}
|
|
70
|
-
// set up the observable and behavior subject
|
|
71
|
-
this.accessTokenBs = new BehaviorSubject(this._accessToken);
|
|
72
|
-
this.accessToken$ = this.accessTokenBs.asObservable();
|
|
73
|
-
try {
|
|
74
|
-
if (this.accessToken) {
|
|
75
|
-
const decoded = new DecodedAccessToken(this.accessToken);
|
|
76
|
-
const currentDateMiliS = new Date().getTime();
|
|
77
|
-
if ((decoded.exp * 1000) <= currentDateMiliS + (refreshTimeMinutes * 60000)) {
|
|
78
|
-
this.refreshToken(this.tokenEndpoint);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
console.warn('Starting HybridSamlOAuthService without token');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch (e) {
|
|
86
|
-
console.warn('starting HybridSamlOAuthService without token or malformed token', this.accessToken, e);
|
|
87
|
-
}
|
|
88
|
-
setInterval(() => {
|
|
89
|
-
this.refreshToken(this.tokenEndpoint);
|
|
90
|
-
}, refreshTimeMinutes * 60000); // x minutes times number of milliseconds in a minute
|
|
91
|
-
}
|
|
92
|
-
/** Returns the raw data casted to the provided type */
|
|
93
|
-
getAssertionData() {
|
|
94
|
-
if (this.config.dataFormat === 'PascalCase') {
|
|
95
|
-
if (!this.rawData || !(this.rawData.Assertions)) {
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
return this.rawData.Assertions;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
if (!this.rawData || !this.rawData.assertions) {
|
|
102
|
-
return undefined;
|
|
103
|
-
}
|
|
104
|
-
return this.rawData.assertions;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Expires the session by clearing the service and local storage
|
|
109
|
-
* @param shouldExpireBoth True if the both session and local storage should be expired
|
|
110
|
-
*/
|
|
111
|
-
expireSession(shouldExpireBoth = false) {
|
|
112
|
-
if (shouldExpireBoth) {
|
|
113
|
-
this.window.localStorage.removeItem(this.keyPath);
|
|
114
|
-
this.window.sessionStorage.removeItem(this.keyPath);
|
|
115
|
-
this.window.sessionStorage.removeItem(this.accessTokenSessionStorageKey);
|
|
116
|
-
this.rawData = undefined;
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
if (this.config?.browserStorageImplementation === 'session') {
|
|
120
|
-
this.window.sessionStorage.removeItem(this.keyPath);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
this.window.localStorage.removeItem(this.keyPath);
|
|
124
|
-
}
|
|
125
|
-
this.window.sessionStorage.removeItem(this.accessTokenSessionStorageKey);
|
|
126
|
-
this.rawData = undefined;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Refreshes the access token using the provided endpoint
|
|
130
|
-
* @param tokenEndpoint The full token endpoint
|
|
131
|
-
*/
|
|
132
|
-
refreshToken(tokenEndpoint) {
|
|
133
|
-
if (!this.rawData) {
|
|
134
|
-
console.warn('No sso response model');
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
// make api call to get a token, uses assertions, hash, and assertion provider implementation string
|
|
138
|
-
const req = {
|
|
139
|
-
ssoResponseModel: this.rawData
|
|
140
|
-
};
|
|
141
|
-
this.httpClient.post(tokenEndpoint, req)
|
|
142
|
-
.pipe(map(res => {
|
|
143
|
-
if (this.config?.dataFormat === 'PascalCase') {
|
|
144
|
-
this.rawData.AccessToken = res.accessToken;
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
this.rawData.accessToken = res.accessToken;
|
|
148
|
-
}
|
|
149
|
-
this._accessToken = res.accessToken;
|
|
150
|
-
this.window.localStorage.setItem(this.keyPath, JSON.stringify(this.rawData));
|
|
151
|
-
this.window.sessionStorage.setItem(this.accessTokenSessionStorageKey, res.accessToken);
|
|
152
|
-
this.accessTokenBs.next(this._accessToken);
|
|
153
|
-
}), catchError(error => {
|
|
154
|
-
console.error(error);
|
|
155
|
-
return of(error);
|
|
156
|
-
}))
|
|
157
|
-
.subscribe(() => { });
|
|
158
|
-
}
|
|
159
|
-
/** gets the raw data */
|
|
160
|
-
getRawData() {
|
|
161
|
-
const lsData = this.window.localStorage.getItem(this.keyPath);
|
|
162
|
-
if (this.config?.browserStorageImplementation === 'session') {
|
|
163
|
-
// first move local storage data if there is any
|
|
164
|
-
if (lsData) {
|
|
165
|
-
this.window.sessionStorage.setItem(this.keyPath, lsData);
|
|
166
|
-
this.window.localStorage.removeItem(this.keyPath);
|
|
167
|
-
}
|
|
168
|
-
// return the session storage data
|
|
169
|
-
return this.window.sessionStorage.getItem(this.keyPath);
|
|
170
|
-
}
|
|
171
|
-
// otherwise return local storage data
|
|
172
|
-
return lsData;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* converts object keys to camel case
|
|
176
|
-
* https://stackoverflow.com/questions/12931828/convert-returned-json-object-properties-to-lower-first-camelcase
|
|
177
|
-
* @param o The object
|
|
178
|
-
*/
|
|
179
|
-
toCamel(o) {
|
|
180
|
-
return pascalToCamel(o);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
186
|
-
type: Injectable,
|
|
187
|
-
args: [{
|
|
188
|
-
providedIn: 'root'
|
|
189
|
-
}]
|
|
190
|
-
}], ctorParameters:
|
|
191
|
-
type: Optional
|
|
192
|
-
}, {
|
|
193
|
-
type: Inject,
|
|
194
|
-
args: [WINDOW]
|
|
195
|
-
}] }, { type: i2.HybridSamlOAuthConfig, decorators: [{
|
|
196
|
-
type: Optional
|
|
197
|
-
}, {
|
|
198
|
-
type: Inject,
|
|
199
|
-
args: [HYBRID_SAML_OAUTH_CONFIG]
|
|
200
|
-
}] }, { type: i1.HttpClient }]
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlicmlkLXNhbWwtb2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvb2F1dGgvc2VydmljZXMvaHlicmlkLXNhbWwtb2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUl2RSxvQ0FBb0M7QUFJcEMsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyw2QkFBNkI7SUFDN0IsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBS0Qsb0JBQW9CO0lBQ3BCLElBQVcsSUFBSTtRQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEtBQUssWUFBWSxFQUFFO1lBQzVDLE9BQVEsSUFBSSxDQUFDLE9BQWUsQ0FBQyxJQUFJLENBQUE7U0FDbEM7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFvQkQ7Ozs7O09BS0c7SUFDSCxZQUMrQyxhQUFrQixFQUNBLE1BQTZCLEVBQzNFLFVBQXNCO1FBRk0sa0JBQWEsR0FB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SSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6RDtRQUVELHNDQUFzQztRQUN0QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLE9BQU8sQ0FBQyxDQUFNO1FBQ3BCLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7O21IQXpOVSxzQkFBc0Isa0JBK0NYLE1BQU0sNkJBQ04sd0JBQXdCO3VIQWhEbkMsc0JBQXNCLGNBRnJCLE1BQU07MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBZ0RJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsTUFBTTs7MEJBQ3pCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGVjb2RlZEFjY2Vzc1Rva2VuIH0gZnJvbSAnLi4vLi4vcmJhYy9tb2RlbHMvZGVjb2RlZC1hY2Nlc3MtdG9rZW4nO1xyXG5pbXBvcnQgeyBIWUJSSURfU0FNTF9PQVVUSF9DT05GSUcsIGtleVBhdGhQcmVmaXggfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgSVNzb1Jlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL2lTc29SZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgSHlicmlkU2FtbE9BdXRoQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2h5YnJpZC1zYW1sLW9hdXRoLWNvbmZpZyc7XHJcbmltcG9ydCB7IHBhc2NhbFRvQ2FtZWwgfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucy9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IEFjY291bnRNYW5hZ2VtZW50UmVmcmVzaFJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZWQvYWNjb3VudE1hbmFnZW1lbnRSZWZyZXNoUmVxdWVzdE1vZGVsJztcclxuaW1wb3J0IHsgUmVmcmVzaFJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL3JlZnJlc2hSZXNwb25zZU1vZGVsJztcclxuXHJcbi8qKiBUaGUgaHlicmlkIFNBTUwgT2F1dGggU2VydmljZSAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIeWJyaWRTYW1sT2F1dGhTZXJ2aWNlIHtcclxuXHJcbiAgLyoqIFRoZSBrZXkgcGF0aCB1c2VkIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIGxvY2FsIHN0b3JhZ2UgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkga2V5UGF0aDogc3RyaW5nO1xyXG5cclxuICAvKiogVGhlIG9hdXRoIGFjY2VzcyB0b2tlbiAqL1xyXG4gIHB1YmxpYyBnZXQgYWNjZXNzVG9rZW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hY2Nlc3NUb2tlbjtcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgYWNjZXNzIHRva2VuIG9ic2VydmFibGUgKi9cclxuICBwdWJsaWMgYWNjZXNzVG9rZW4kOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG4gIC8qKiBHZXRzIHRoZSBoYXNoICovXHJcbiAgcHVibGljIGdldCBoYXNoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGFGb3JtYXQgPT09ICdQYXNjYWxDYXNlJykge1xyXG4gICAgICByZXR1cm4gKHRoaXMucmF3RGF0YSBhcyBhbnkpLkhhc2hcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5yYXdEYXRhLmhhc2g7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIHJhdyBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZSAqL1xyXG4gIHByaXZhdGUgcmF3RGF0YTogSVNzb1Jlc3BvbnNlTW9kZWw7XHJcblxyXG4gIC8qKiBUaGUgYWNjZXNzIHRva2VuICovXHJcbiAgcHJpdmF0ZSBfYWNjZXNzVG9rZW46IHN0cmluZztcclxuXHJcbiAgLyoqIFRoZSB3aW5kb3cgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogV2luZG93O1xyXG5cclxuICAvKiogVGhlIGJlaGF2aW9yIHN1YmplY3QgZm9yIHRoZSBhY2Nlc3MgdG9rZW4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGFjY2Vzc1Rva2VuQnM6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xyXG5cclxuICAvKiogVGhlIGFybWF0dXJlIGFjY2VzcyB0b2tlbiBrZXkgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGFjY2Vzc1Rva2VuU2Vzc2lvblN0b3JhZ2VLZXk6IHN0cmluZyA9ICdTb2YtQXJtLUFjY2Vzcy1Ub2tlbic7XHJcblxyXG4gIC8qKiBUaGUgdG9rZW4gZW5kcG9pbnQgKi9cclxuICBwcml2YXRlIHRva2VuRW5kcG9pbnQ6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogY29uc3RydWN0cyB0aGUgc2VydmljZVxyXG4gICAqIEBwYXJhbSB3aW5kb3dHZW5lcmljIFRoZSB3aW5kb3cgaW50ZXJmYWNlXHJcbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgc2VydmljZSBjb25maWd1cmF0aW9uc1xyXG4gICAqIEBwYXJhbSBodHRwQ2xpZW50IFRoZSBodHRwIGNsaWVudFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChXSU5ET1cpIHByaXZhdGUgcmVhZG9ubHkgd2luZG93R2VuZXJpYzogYW55LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChIWUJSSURfU0FNTF9PQVVUSF9DT05GSUcpIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBIeWJyaWRTYW1sT0F1dGhDb25maWcsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnRcclxuICApIHtcclxuICAgIC8vIHNldCB0aGUgd2luZG93IHRvIGJlIHN0cm9uZ2x5IHR5cGVkLCBjb21waWxlIGVycm9yIG1ha2VzIGl0IHNvIGl0IGNhbid0IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICB0aGlzLndpbmRvdyA9IHRoaXMud2luZG93R2VuZXJpYyB8fCB3aW5kb3c7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0h5YnJpZFNhbWxPYXV0aFNlcnZpY2Ugc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgSFlCUklEX1NBTUxfT0FVVEhfQ09ORklHIHRvIHlvdXIgcHJvdmlkZXJzIHRvIHVzZSB0aGUgc2VydmljZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZWZyZXNoVGltZU1pbnV0ZXMgPSB0aGlzLmNvbmZpZz8udG9rZW5SZWZyZXNoVGltZU1pbnV0ZXMgfHwgMjA7IC8vIHVzZSAyMCBtaW4gdG9rZW4gcmVmcmVzaCB0aW1lIGlmIG5vbiBwcm92aWRlZFxyXG5cclxuICAgIC8vIHNldCB0aGUgdG9rZW4gZW5kcG9pbnRcclxuICAgIGlmICh0aGlzLmNvbmZpZz8udG9rZW5FbmRwb2ludCQpIHtcclxuICAgICAgdGhpcy5jb25maWcudG9rZW5FbmRwb2ludCQuc3Vic2NyaWJlKGVuZHBvaW50ID0+IHRoaXMudG9rZW5FbmRwb2ludCA9IGVuZHBvaW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0hZQlJJRF9TQU1MX09BVVRIX0NPTkZJRy50b2tlbkVuZHBvaW50JCBpcyBub3QgcHJvdmlkZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgdGhlIGtleSBwYXRoIGZyb20gdGhlIGtleSBwYXRoIHByZWZpeCBhbmQgc3VmZml4XHJcbiAgICB0aGlzLmtleVBhdGggPSBgJHtrZXlQYXRoUHJlZml4fSR7dGhpcy5jb25maWc/LmtleVBhdGhTdWZmaXh9YDtcclxuXHJcbiAgICAvLyByZWFkIHZhbHVlcyBmcm9tIGxvY2FsIHN0b3JhZ2UgYmFzZWQgb24gdGhlIGtleSBwYXRoXHJcbiAgICBjb25zdCByYXdEYXRhID0gdGhpcy5nZXRSYXdEYXRhKCk7XHJcbiAgICBpZiAoIXJhd0RhdGEpIHtcclxuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLndpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuYWNjZXNzVG9rZW5TZXNzaW9uU3RvcmFnZUtleSk7XHJcbiAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuID0gdG9rZW47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhRm9ybWF0ID09PSAnUGFzY2FsQ2FzZScpIHtcclxuICAgICAgICB0aGlzLnJhd0RhdGEgPSBKU09OLnBhcnNlKHJhd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuID0gKHRoaXMucmF3RGF0YSBhcyBhbnkpLkFjY2Vzc1Rva2VuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmF3RGF0YSA9IHRoaXMudG9DYW1lbChKU09OLnBhcnNlKHJhd0RhdGEpKTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbiA9IHRoaXMucmF3RGF0YS5hY2Nlc3NUb2tlbjtcclxuICAgICAgfVxyXG4gICAgICAvLyBwb3B1bGF0ZSB0aGUgYWNjZXNzIHRva2VuXHJcbiAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5hY2Nlc3NUb2tlblNlc3Npb25TdG9yYWdlS2V5LCB0aGlzLl9hY2Nlc3NUb2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHVwIHRoZSBvYnNlcnZhYmxlIGFuZCBiZWhhdmlvciBzdWJqZWN0XHJcbiAgICB0aGlzLmFjY2Vzc1Rva2VuQnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2FjY2Vzc1Rva2VuKTtcclxuICAgIHRoaXMuYWNjZXNzVG9rZW4kID0gdGhpcy5hY2Nlc3NUb2tlbkJzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IG5ldyBEZWNvZGVkQWNjZXNzVG9rZW4odGhpcy5hY2Nlc3NUb2tlbik7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGVNaWxpUyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGlmICgoZGVjb2RlZC5leHAgKiAxMDAwKSA8PSBjdXJyZW50RGF0ZU1pbGlTICsgKHJlZnJlc2hUaW1lTWludXRlcyAqIDYwMDAwKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4odGhpcy50b2tlbkVuZHBvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdTdGFydGluZyBIeWJyaWRTYW1sT0F1dGhTZXJ2aWNlIHdpdGhvdXQgdG9rZW4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdzdGFydGluZyBIeWJyaWRTYW1sT0F1dGhTZXJ2aWNlIHdpdGhvdXQgdG9rZW4gb3IgbWFsZm9ybWVkIHRva2VuJywgdGhpcy5hY2Nlc3NUb2tlbiwgZSk7XHJcbiAgICB9XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmcmVzaFRva2VuKHRoaXMudG9rZW5FbmRwb2ludCk7XHJcbiAgICB9LCByZWZyZXNoVGltZU1pbnV0ZXMgKiA2MDAwMCk7IC8vIHggbWludXRlcyB0aW1lcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgbWludXRlXHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyB0aGUgcmF3IGRhdGEgY2FzdGVkIHRvIHRoZSBwcm92aWRlZCB0eXBlICovXHJcbiAgcHVibGljIGdldEFzc2VydGlvbkRhdGE8VD4oKTogVCB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YUZvcm1hdCA9PT0gJ1Bhc2NhbENhc2UnKSB7XHJcbiAgICAgIGlmICghdGhpcy5yYXdEYXRhIHx8ICEoKHRoaXMucmF3RGF0YSBhcyBhbnkpLkFzc2VydGlvbnMpKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh0aGlzLnJhd0RhdGEgYXMgYW55KS5Bc3NlcnRpb25zIGFzIFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLnJhd0RhdGEgfHwgIXRoaXMucmF3RGF0YS5hc3NlcnRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucmF3RGF0YS5hc3NlcnRpb25zIGFzIFQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBpcmVzIHRoZSBzZXNzaW9uIGJ5IGNsZWFyaW5nIHRoZSBzZXJ2aWNlIGFuZCBsb2NhbCBzdG9yYWdlXHJcbiAgICogQHBhcmFtIHNob3VsZEV4cGlyZUJvdGggVHJ1ZSBpZiB0aGUgYm90aCBzZXNzaW9uIGFuZCBsb2NhbCBzdG9yYWdlIHNob3VsZCBiZSBleHBpcmVkXHJcbiAgICovXHJcbiAgcHVibGljIGV4cGlyZVNlc3Npb24oc2hvdWxkRXhwaXJlQm90aDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBpZiAoc2hvdWxkRXhwaXJlQm90aCkge1xyXG4gICAgICB0aGlzLndpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmtleVBhdGgpO1xyXG4gICAgICB0aGlzLndpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMua2V5UGF0aCk7XHJcbiAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5hY2Nlc3NUb2tlblNlc3Npb25TdG9yYWdlS2V5KTtcclxuICAgICAgdGhpcy5yYXdEYXRhID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZz8uYnJvd3NlclN0b3JhZ2VJbXBsZW1lbnRhdGlvbiA9PT0gJ3Nlc3Npb24nKSB7XHJcbiAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5rZXlQYXRoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLndpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmtleVBhdGgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmFjY2Vzc1Rva2VuU2Vzc2lvblN0b3JhZ2VLZXkpO1xyXG5cclxuICAgIHRoaXMucmF3RGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIHVzaW5nIHRoZSBwcm92aWRlZCBlbmRwb2ludFxyXG4gICAqIEBwYXJhbSB0b2tlbkVuZHBvaW50IFRoZSBmdWxsIHRva2VuIGVuZHBvaW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW4odG9rZW5FbmRwb2ludDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucmF3RGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIHNzbyByZXNwb25zZSBtb2RlbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBtYWtlIGFwaSBjYWxsIHRvIGdldCBhIHRva2VuLCB1c2VzIGFzc2VydGlvbnMsIGhhc2gsIGFuZCBhc3NlcnRpb24gcHJvdmlkZXIgaW1wbGVtZW50YXRpb24gc3RyaW5nXHJcbiAgICBjb25zdCByZXE6IEFjY291bnRNYW5hZ2VtZW50UmVmcmVzaFJlcXVlc3RNb2RlbCA9IHtcclxuICAgICAgc3NvUmVzcG9uc2VNb2RlbDogdGhpcy5yYXdEYXRhXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwQ2xpZW50LnBvc3Q8UmVmcmVzaFJlc3BvbnNlTW9kZWw+KHRva2VuRW5kcG9pbnQsIHJlcSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWc/LmRhdGFGb3JtYXQgPT09ICdQYXNjYWxDYXNlJykge1xyXG4gICAgICAgICAgICAodGhpcy5yYXdEYXRhIGFzIGFueSkuQWNjZXNzVG9rZW4gPSByZXMuYWNjZXNzVG9rZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yYXdEYXRhLmFjY2Vzc1Rva2VuID0gcmVzLmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW4gPSByZXMuYWNjZXNzVG9rZW47XHJcbiAgICAgICAgICB0aGlzLndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleVBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMucmF3RGF0YSkpO1xyXG4gICAgICAgICAgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmFjY2Vzc1Rva2VuU2Vzc2lvblN0b3JhZ2VLZXksIHJlcy5hY2Nlc3NUb2tlbik7XHJcbiAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuQnMubmV4dCh0aGlzLl9hY2Nlc3NUb2tlbik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHsgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogZ2V0cyB0aGUgcmF3IGRhdGEgKi9cclxuICBwcml2YXRlIGdldFJhd0RhdGEoKTogYW55IHtcclxuICAgIGNvbnN0IGxzRGF0YSA9IHRoaXMud2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5UGF0aCk7XHJcbiAgICBpZiAodGhpcy5jb25maWc/LmJyb3dzZXJTdG9yYWdlSW1wbGVtZW50YXRpb24gPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAvLyBmaXJzdCBtb3ZlIGxvY2FsIHN0b3JhZ2UgZGF0YSBpZiB0aGVyZSBpcyBhbnlcclxuICAgICAgaWYgKGxzRGF0YSkge1xyXG4gICAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlQYXRoLCBsc0RhdGEpO1xyXG4gICAgICAgIHRoaXMud2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMua2V5UGF0aCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHJldHVybiB0aGUgc2Vzc2lvbiBzdG9yYWdlIGRhdGFcclxuICAgICAgcmV0dXJuIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGxvY2FsIHN0b3JhZ2UgZGF0YVxyXG4gICAgcmV0dXJuIGxzRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnZlcnRzIG9iamVjdCBrZXlzIHRvIGNhbWVsIGNhc2VcclxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjkzMTgyOC9jb252ZXJ0LXJldHVybmVkLWpzb24tb2JqZWN0LXByb3BlcnRpZXMtdG8tbG93ZXItZmlyc3QtY2FtZWxjYXNlXHJcbiAgICogQHBhcmFtIG8gVGhlIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdG9DYW1lbChvOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHBhc2NhbFRvQ2FtZWwobyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, of } from 'rxjs';
|
|
3
|
+
import { catchError, map } from 'rxjs/operators';
|
|
4
|
+
import { WINDOW } from '../../core/models/constants';
|
|
5
|
+
import { DecodedAccessToken } from '../../rbac/models/decoded-access-token';
|
|
6
|
+
import { HYBRID_SAML_OAUTH_CONFIG, keyPathPrefix } from '../models/constants';
|
|
7
|
+
import { pascalToCamel } from '../../core/functions/naming-convention';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common/http";
|
|
10
|
+
import * as i2 from "../models/hybrid-saml-oauth-config";
|
|
11
|
+
/** The hybrid SAML Oauth Service */
|
|
12
|
+
export class HybridSamlOauthService {
|
|
13
|
+
/** The oauth access token */
|
|
14
|
+
get accessToken() {
|
|
15
|
+
return this._accessToken;
|
|
16
|
+
}
|
|
17
|
+
/** Gets the hash */
|
|
18
|
+
get hash() {
|
|
19
|
+
if (this.config?.dataFormat === 'PascalCase') {
|
|
20
|
+
return this.rawData.Hash;
|
|
21
|
+
}
|
|
22
|
+
return this.rawData.hash;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* constructs the service
|
|
26
|
+
* @param windowGeneric The window interface
|
|
27
|
+
* @param config The service configurations
|
|
28
|
+
* @param httpClient The http client
|
|
29
|
+
*/
|
|
30
|
+
constructor(windowGeneric, config, httpClient) {
|
|
31
|
+
this.windowGeneric = windowGeneric;
|
|
32
|
+
this.config = config;
|
|
33
|
+
this.httpClient = httpClient;
|
|
34
|
+
/** The armature access token key */
|
|
35
|
+
this.accessTokenSessionStorageKey = 'Sof-Arm-Access-Token';
|
|
36
|
+
// set the window to be strongly typed, compile error makes it so it can't be done in the constructor
|
|
37
|
+
this.window = this.windowGeneric || window;
|
|
38
|
+
if (!this.config) {
|
|
39
|
+
console.warn('HybridSamlOauthService skipping initialization, please add HYBRID_SAML_OAUTH_CONFIG to your providers to use the service');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const refreshTimeMinutes = this.config?.tokenRefreshTimeMinutes || 20; // use 20 min token refresh time if non provided
|
|
43
|
+
// set the token endpoint
|
|
44
|
+
if (this.config?.tokenEndpoint$) {
|
|
45
|
+
this.config.tokenEndpoint$.subscribe(endpoint => this.tokenEndpoint = endpoint);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.warn('HYBRID_SAML_OAUTH_CONFIG.tokenEndpoint$ is not provided');
|
|
49
|
+
}
|
|
50
|
+
// set the key path from the key path prefix and suffix
|
|
51
|
+
this.keyPath = `${keyPathPrefix}${this.config?.keyPathSuffix}`;
|
|
52
|
+
// read values from local storage based on the key path
|
|
53
|
+
const rawData = this.getRawData();
|
|
54
|
+
if (!rawData) {
|
|
55
|
+
const token = this.window.sessionStorage.getItem(this.accessTokenSessionStorageKey);
|
|
56
|
+
this._accessToken = token;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
if (this.config?.dataFormat === 'PascalCase') {
|
|
60
|
+
this.rawData = JSON.parse(rawData);
|
|
61
|
+
this._accessToken = this.rawData.AccessToken;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this.rawData = this.toCamel(JSON.parse(rawData));
|
|
65
|
+
this._accessToken = this.rawData.accessToken;
|
|
66
|
+
}
|
|
67
|
+
// populate the access token
|
|
68
|
+
this.window.sessionStorage.setItem(this.accessTokenSessionStorageKey, this._accessToken);
|
|
69
|
+
}
|
|
70
|
+
// set up the observable and behavior subject
|
|
71
|
+
this.accessTokenBs = new BehaviorSubject(this._accessToken);
|
|
72
|
+
this.accessToken$ = this.accessTokenBs.asObservable();
|
|
73
|
+
try {
|
|
74
|
+
if (this.accessToken) {
|
|
75
|
+
const decoded = new DecodedAccessToken(this.accessToken);
|
|
76
|
+
const currentDateMiliS = new Date().getTime();
|
|
77
|
+
if ((decoded.exp * 1000) <= currentDateMiliS + (refreshTimeMinutes * 60000)) {
|
|
78
|
+
this.refreshToken(this.tokenEndpoint);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.warn('Starting HybridSamlOAuthService without token');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
console.warn('starting HybridSamlOAuthService without token or malformed token', this.accessToken, e);
|
|
87
|
+
}
|
|
88
|
+
setInterval(() => {
|
|
89
|
+
this.refreshToken(this.tokenEndpoint);
|
|
90
|
+
}, refreshTimeMinutes * 60000); // x minutes times number of milliseconds in a minute
|
|
91
|
+
}
|
|
92
|
+
/** Returns the raw data casted to the provided type */
|
|
93
|
+
getAssertionData() {
|
|
94
|
+
if (this.config.dataFormat === 'PascalCase') {
|
|
95
|
+
if (!this.rawData || !(this.rawData.Assertions)) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
return this.rawData.Assertions;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
if (!this.rawData || !this.rawData.assertions) {
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return this.rawData.assertions;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Expires the session by clearing the service and local storage
|
|
109
|
+
* @param shouldExpireBoth True if the both session and local storage should be expired
|
|
110
|
+
*/
|
|
111
|
+
expireSession(shouldExpireBoth = false) {
|
|
112
|
+
if (shouldExpireBoth) {
|
|
113
|
+
this.window.localStorage.removeItem(this.keyPath);
|
|
114
|
+
this.window.sessionStorage.removeItem(this.keyPath);
|
|
115
|
+
this.window.sessionStorage.removeItem(this.accessTokenSessionStorageKey);
|
|
116
|
+
this.rawData = undefined;
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (this.config?.browserStorageImplementation === 'session') {
|
|
120
|
+
this.window.sessionStorage.removeItem(this.keyPath);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.window.localStorage.removeItem(this.keyPath);
|
|
124
|
+
}
|
|
125
|
+
this.window.sessionStorage.removeItem(this.accessTokenSessionStorageKey);
|
|
126
|
+
this.rawData = undefined;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Refreshes the access token using the provided endpoint
|
|
130
|
+
* @param tokenEndpoint The full token endpoint
|
|
131
|
+
*/
|
|
132
|
+
refreshToken(tokenEndpoint) {
|
|
133
|
+
if (!this.rawData) {
|
|
134
|
+
console.warn('No sso response model');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// make api call to get a token, uses assertions, hash, and assertion provider implementation string
|
|
138
|
+
const req = {
|
|
139
|
+
ssoResponseModel: this.rawData
|
|
140
|
+
};
|
|
141
|
+
this.httpClient.post(tokenEndpoint, req)
|
|
142
|
+
.pipe(map(res => {
|
|
143
|
+
if (this.config?.dataFormat === 'PascalCase') {
|
|
144
|
+
this.rawData.AccessToken = res.accessToken;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.rawData.accessToken = res.accessToken;
|
|
148
|
+
}
|
|
149
|
+
this._accessToken = res.accessToken;
|
|
150
|
+
this.window.localStorage.setItem(this.keyPath, JSON.stringify(this.rawData));
|
|
151
|
+
this.window.sessionStorage.setItem(this.accessTokenSessionStorageKey, res.accessToken);
|
|
152
|
+
this.accessTokenBs.next(this._accessToken);
|
|
153
|
+
}), catchError(error => {
|
|
154
|
+
console.error(error);
|
|
155
|
+
return of(error);
|
|
156
|
+
}))
|
|
157
|
+
.subscribe(() => { });
|
|
158
|
+
}
|
|
159
|
+
/** gets the raw data */
|
|
160
|
+
getRawData() {
|
|
161
|
+
const lsData = this.window.localStorage.getItem(this.keyPath);
|
|
162
|
+
if (this.config?.browserStorageImplementation === 'session') {
|
|
163
|
+
// first move local storage data if there is any
|
|
164
|
+
if (lsData) {
|
|
165
|
+
this.window.sessionStorage.setItem(this.keyPath, lsData);
|
|
166
|
+
this.window.localStorage.removeItem(this.keyPath);
|
|
167
|
+
}
|
|
168
|
+
// return the session storage data
|
|
169
|
+
return this.window.sessionStorage.getItem(this.keyPath);
|
|
170
|
+
}
|
|
171
|
+
// otherwise return local storage data
|
|
172
|
+
return lsData;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* converts object keys to camel case
|
|
176
|
+
* https://stackoverflow.com/questions/12931828/convert-returned-json-object-properties-to-lower-first-camelcase
|
|
177
|
+
* @param o The object
|
|
178
|
+
*/
|
|
179
|
+
toCamel(o) {
|
|
180
|
+
return pascalToCamel(o);
|
|
181
|
+
}
|
|
182
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HybridSamlOauthService, deps: [{ token: WINDOW, optional: true }, { token: HYBRID_SAML_OAUTH_CONFIG, optional: true }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
183
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HybridSamlOauthService, providedIn: 'root' }); }
|
|
184
|
+
}
|
|
185
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: HybridSamlOauthService, decorators: [{
|
|
186
|
+
type: Injectable,
|
|
187
|
+
args: [{
|
|
188
|
+
providedIn: 'root'
|
|
189
|
+
}]
|
|
190
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
191
|
+
type: Optional
|
|
192
|
+
}, {
|
|
193
|
+
type: Inject,
|
|
194
|
+
args: [WINDOW]
|
|
195
|
+
}] }, { type: i2.HybridSamlOAuthConfig, decorators: [{
|
|
196
|
+
type: Optional
|
|
197
|
+
}, {
|
|
198
|
+
type: Inject,
|
|
199
|
+
args: [HYBRID_SAML_OAUTH_CONFIG]
|
|
200
|
+
}] }, { type: i1.HttpClient }] });
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlicmlkLXNhbWwtb2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvb2F1dGgvc2VydmljZXMvaHlicmlkLXNhbWwtb2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUl2RSxvQ0FBb0M7QUFJcEMsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyw2QkFBNkI7SUFDN0IsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBS0Qsb0JBQW9CO0lBQ3BCLElBQVcsSUFBSTtRQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEtBQUssWUFBWSxFQUFFO1lBQzVDLE9BQVEsSUFBSSxDQUFDLE9BQWUsQ0FBQyxJQUFJLENBQUE7U0FDbEM7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFvQkQ7Ozs7O09BS0c7SUFDSCxZQUMrQyxhQUFrQixFQUNBLE1BQTZCLEVBQzNFLFVBQXNCO1FBRk0sa0JBQWEsR0FB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SSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6RDtRQUVELHNDQUFzQztRQUN0QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLE9BQU8sQ0FBQyxDQUFNO1FBQ3BCLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7OEdBek5VLHNCQUFzQixrQkErQ1gsTUFBTSw2QkFDTix3QkFBd0I7a0hBaERuQyxzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBZ0RJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsTUFBTTs7MEJBQ3pCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRGVjb2RlZEFjY2Vzc1Rva2VuIH0gZnJvbSAnLi4vLi4vcmJhYy9tb2RlbHMvZGVjb2RlZC1hY2Nlc3MtdG9rZW4nO1xyXG5pbXBvcnQgeyBIWUJSSURfU0FNTF9PQVVUSF9DT05GSUcsIGtleVBhdGhQcmVmaXggfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgSVNzb1Jlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL2lTc29SZXNwb25zZU1vZGVsJztcclxuaW1wb3J0IHsgSHlicmlkU2FtbE9BdXRoQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2h5YnJpZC1zYW1sLW9hdXRoLWNvbmZpZyc7XHJcbmltcG9ydCB7IHBhc2NhbFRvQ2FtZWwgfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucy9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IEFjY291bnRNYW5hZ2VtZW50UmVmcmVzaFJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZWQvYWNjb3VudE1hbmFnZW1lbnRSZWZyZXNoUmVxdWVzdE1vZGVsJztcclxuaW1wb3J0IHsgUmVmcmVzaFJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGVkL3JlZnJlc2hSZXNwb25zZU1vZGVsJztcclxuXHJcbi8qKiBUaGUgaHlicmlkIFNBTUwgT2F1dGggU2VydmljZSAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIeWJyaWRTYW1sT2F1dGhTZXJ2aWNlIHtcclxuXHJcbiAgLyoqIFRoZSBrZXkgcGF0aCB1c2VkIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIGxvY2FsIHN0b3JhZ2UgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkga2V5UGF0aDogc3RyaW5nO1xyXG5cclxuICAvKiogVGhlIG9hdXRoIGFjY2VzcyB0b2tlbiAqL1xyXG4gIHB1YmxpYyBnZXQgYWNjZXNzVG9rZW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9hY2Nlc3NUb2tlbjtcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgYWNjZXNzIHRva2VuIG9ic2VydmFibGUgKi9cclxuICBwdWJsaWMgYWNjZXNzVG9rZW4kOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG4gIC8qKiBHZXRzIHRoZSBoYXNoICovXHJcbiAgcHVibGljIGdldCBoYXNoKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGFGb3JtYXQgPT09ICdQYXNjYWxDYXNlJykge1xyXG4gICAgICByZXR1cm4gKHRoaXMucmF3RGF0YSBhcyBhbnkpLkhhc2hcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5yYXdEYXRhLmhhc2g7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIHJhdyBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZSAqL1xyXG4gIHByaXZhdGUgcmF3RGF0YTogSVNzb1Jlc3BvbnNlTW9kZWw7XHJcblxyXG4gIC8qKiBUaGUgYWNjZXNzIHRva2VuICovXHJcbiAgcHJpdmF0ZSBfYWNjZXNzVG9rZW46IHN0cmluZztcclxuXHJcbiAgLyoqIFRoZSB3aW5kb3cgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogV2luZG93O1xyXG5cclxuICAvKiogVGhlIGJlaGF2aW9yIHN1YmplY3QgZm9yIHRoZSBhY2Nlc3MgdG9rZW4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGFjY2Vzc1Rva2VuQnM6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xyXG5cclxuICAvKiogVGhlIGFybWF0dXJlIGFjY2VzcyB0b2tlbiBrZXkgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGFjY2Vzc1Rva2VuU2Vzc2lvblN0b3JhZ2VLZXk6IHN0cmluZyA9ICdTb2YtQXJtLUFjY2Vzcy1Ub2tlbic7XHJcblxyXG4gIC8qKiBUaGUgdG9rZW4gZW5kcG9pbnQgKi9cclxuICBwcml2YXRlIHRva2VuRW5kcG9pbnQ6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogY29uc3RydWN0cyB0aGUgc2VydmljZVxyXG4gICAqIEBwYXJhbSB3aW5kb3dHZW5lcmljIFRoZSB3aW5kb3cgaW50ZXJmYWNlXHJcbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgc2VydmljZSBjb25maWd1cmF0aW9uc1xyXG4gICAqIEBwYXJhbSBodHRwQ2xpZW50IFRoZSBodHRwIGNsaWVudFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChXSU5ET1cpIHByaXZhdGUgcmVhZG9ubHkgd2luZG93R2VuZXJpYzogYW55LFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChIWUJSSURfU0FNTF9PQVVUSF9DT05GSUcpIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBIeWJyaWRTYW1sT0F1dGhDb25maWcsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnRcclxuICApIHtcclxuICAgIC8vIHNldCB0aGUgd2luZG93IHRvIGJlIHN0cm9uZ2x5IHR5cGVkLCBjb21waWxlIGVycm9yIG1ha2VzIGl0IHNvIGl0IGNhbid0IGJlIGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICB0aGlzLndpbmRvdyA9IHRoaXMud2luZG93R2VuZXJpYyB8fCB3aW5kb3c7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0h5YnJpZFNhbWxPYXV0aFNlcnZpY2Ugc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgSFlCUklEX1NBTUxfT0FVVEhfQ09ORklHIHRvIHlvdXIgcHJvdmlkZXJzIHRvIHVzZSB0aGUgc2VydmljZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZWZyZXNoVGltZU1pbnV0ZXMgPSB0aGlzLmNvbmZpZz8udG9rZW5SZWZyZXNoVGltZU1pbnV0ZXMgfHwgMjA7IC8vIHVzZSAyMCBtaW4gdG9rZW4gcmVmcmVzaCB0aW1lIGlmIG5vbiBwcm92aWRlZFxyXG5cclxuICAgIC8vIHNldCB0aGUgdG9rZW4gZW5kcG9pbnRcclxuICAgIGlmICh0aGlzLmNvbmZpZz8udG9rZW5FbmRwb2ludCQpIHtcclxuICAgICAgdGhpcy5jb25maWcudG9rZW5FbmRwb2ludCQuc3Vic2NyaWJlKGVuZHBvaW50ID0+IHRoaXMudG9rZW5FbmRwb2ludCA9IGVuZHBvaW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0hZQlJJRF9TQU1MX09BVVRIX0NPTkZJRy50b2tlbkVuZHBvaW50JCBpcyBub3QgcHJvdmlkZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgdGhlIGtleSBwYXRoIGZyb20gdGhlIGtleSBwYXRoIHByZWZpeCBhbmQgc3VmZml4XHJcbiAgICB0aGlzLmtleVBhdGggPSBgJHtrZXlQYXRoUHJlZml4fSR7dGhpcy5jb25maWc/LmtleVBhdGhTdWZmaXh9YDtcclxuXHJcbiAgICAvLyByZWFkIHZhbHVlcyBmcm9tIGxvY2FsIHN0b3JhZ2UgYmFzZWQgb24gdGhlIGtleSBwYXRoXHJcbiAgICBjb25zdCByYXdEYXRhID0gdGhpcy5nZXRSYXdEYXRhKCk7XHJcbiAgICBpZiAoIXJhd0RhdGEpIHtcclxuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLndpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuYWNjZXNzVG9rZW5TZXNzaW9uU3RvcmFnZUtleSk7XHJcbiAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuID0gdG9rZW47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnPy5kYXRhRm9ybWF0ID09PSAnUGFzY2FsQ2FzZScpIHtcclxuICAgICAgICB0aGlzLnJhd0RhdGEgPSBKU09OLnBhcnNlKHJhd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuID0gKHRoaXMucmF3RGF0YSBhcyBhbnkpLkFjY2Vzc1Rva2VuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmF3RGF0YSA9IHRoaXMudG9DYW1lbChKU09OLnBhcnNlKHJhd0RhdGEpKTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbiA9IHRoaXMucmF3RGF0YS5hY2Nlc3NUb2tlbjtcclxuICAgICAgfVxyXG4gICAgICAvLyBwb3B1bGF0ZSB0aGUgYWNjZXNzIHRva2VuXHJcbiAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5hY2Nlc3NUb2tlblNlc3Npb25TdG9yYWdlS2V5LCB0aGlzLl9hY2Nlc3NUb2tlbik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHVwIHRoZSBvYnNlcnZhYmxlIGFuZCBiZWhhdmlvciBzdWJqZWN0XHJcbiAgICB0aGlzLmFjY2Vzc1Rva2VuQnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2FjY2Vzc1Rva2VuKTtcclxuICAgIHRoaXMuYWNjZXNzVG9rZW4kID0gdGhpcy5hY2Nlc3NUb2tlbkJzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IG5ldyBEZWNvZGVkQWNjZXNzVG9rZW4odGhpcy5hY2Nlc3NUb2tlbik7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGVNaWxpUyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGlmICgoZGVjb2RlZC5leHAgKiAxMDAwKSA8PSBjdXJyZW50RGF0ZU1pbGlTICsgKHJlZnJlc2hUaW1lTWludXRlcyAqIDYwMDAwKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4odGhpcy50b2tlbkVuZHBvaW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdTdGFydGluZyBIeWJyaWRTYW1sT0F1dGhTZXJ2aWNlIHdpdGhvdXQgdG9rZW4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdzdGFydGluZyBIeWJyaWRTYW1sT0F1dGhTZXJ2aWNlIHdpdGhvdXQgdG9rZW4gb3IgbWFsZm9ybWVkIHRva2VuJywgdGhpcy5hY2Nlc3NUb2tlbiwgZSk7XHJcbiAgICB9XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmcmVzaFRva2VuKHRoaXMudG9rZW5FbmRwb2ludCk7XHJcbiAgICB9LCByZWZyZXNoVGltZU1pbnV0ZXMgKiA2MDAwMCk7IC8vIHggbWludXRlcyB0aW1lcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgbWludXRlXHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyB0aGUgcmF3IGRhdGEgY2FzdGVkIHRvIHRoZSBwcm92aWRlZCB0eXBlICovXHJcbiAgcHVibGljIGdldEFzc2VydGlvbkRhdGE8VD4oKTogVCB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YUZvcm1hdCA9PT0gJ1Bhc2NhbENhc2UnKSB7XHJcbiAgICAgIGlmICghdGhpcy5yYXdEYXRhIHx8ICEoKHRoaXMucmF3RGF0YSBhcyBhbnkpLkFzc2VydGlvbnMpKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh0aGlzLnJhd0RhdGEgYXMgYW55KS5Bc3NlcnRpb25zIGFzIFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLnJhd0RhdGEgfHwgIXRoaXMucmF3RGF0YS5hc3NlcnRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucmF3RGF0YS5hc3NlcnRpb25zIGFzIFQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBpcmVzIHRoZSBzZXNzaW9uIGJ5IGNsZWFyaW5nIHRoZSBzZXJ2aWNlIGFuZCBsb2NhbCBzdG9yYWdlXHJcbiAgICogQHBhcmFtIHNob3VsZEV4cGlyZUJvdGggVHJ1ZSBpZiB0aGUgYm90aCBzZXNzaW9uIGFuZCBsb2NhbCBzdG9yYWdlIHNob3VsZCBiZSBleHBpcmVkXHJcbiAgICovXHJcbiAgcHVibGljIGV4cGlyZVNlc3Npb24oc2hvdWxkRXhwaXJlQm90aDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBpZiAoc2hvdWxkRXhwaXJlQm90aCkge1xyXG4gICAgICB0aGlzLndpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmtleVBhdGgpO1xyXG4gICAgICB0aGlzLndpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMua2V5UGF0aCk7XHJcbiAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5hY2Nlc3NUb2tlblNlc3Npb25TdG9yYWdlS2V5KTtcclxuICAgICAgdGhpcy5yYXdEYXRhID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZz8uYnJvd3NlclN0b3JhZ2VJbXBsZW1lbnRhdGlvbiA9PT0gJ3Nlc3Npb24nKSB7XHJcbiAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5rZXlQYXRoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLndpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmtleVBhdGgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmFjY2Vzc1Rva2VuU2Vzc2lvblN0b3JhZ2VLZXkpO1xyXG5cclxuICAgIHRoaXMucmF3RGF0YSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZnJlc2hlcyB0aGUgYWNjZXNzIHRva2VuIHVzaW5nIHRoZSBwcm92aWRlZCBlbmRwb2ludFxyXG4gICAqIEBwYXJhbSB0b2tlbkVuZHBvaW50IFRoZSBmdWxsIHRva2VuIGVuZHBvaW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW4odG9rZW5FbmRwb2ludDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucmF3RGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIHNzbyByZXNwb25zZSBtb2RlbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBtYWtlIGFwaSBjYWxsIHRvIGdldCBhIHRva2VuLCB1c2VzIGFzc2VydGlvbnMsIGhhc2gsIGFuZCBhc3NlcnRpb24gcHJvdmlkZXIgaW1wbGVtZW50YXRpb24gc3RyaW5nXHJcbiAgICBjb25zdCByZXE6IEFjY291bnRNYW5hZ2VtZW50UmVmcmVzaFJlcXVlc3RNb2RlbCA9IHtcclxuICAgICAgc3NvUmVzcG9uc2VNb2RlbDogdGhpcy5yYXdEYXRhXHJcbiAgICB9O1xyXG4gICAgdGhpcy5odHRwQ2xpZW50LnBvc3Q8UmVmcmVzaFJlc3BvbnNlTW9kZWw+KHRva2VuRW5kcG9pbnQsIHJlcSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWc/LmRhdGFGb3JtYXQgPT09ICdQYXNjYWxDYXNlJykge1xyXG4gICAgICAgICAgICAodGhpcy5yYXdEYXRhIGFzIGFueSkuQWNjZXNzVG9rZW4gPSByZXMuYWNjZXNzVG9rZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yYXdEYXRhLmFjY2Vzc1Rva2VuID0gcmVzLmFjY2Vzc1Rva2VuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW4gPSByZXMuYWNjZXNzVG9rZW47XHJcbiAgICAgICAgICB0aGlzLndpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmtleVBhdGgsIEpTT04uc3RyaW5naWZ5KHRoaXMucmF3RGF0YSkpO1xyXG4gICAgICAgICAgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmFjY2Vzc1Rva2VuU2Vzc2lvblN0b3JhZ2VLZXksIHJlcy5hY2Nlc3NUb2tlbik7XHJcbiAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuQnMubmV4dCh0aGlzLl9hY2Nlc3NUb2tlbik7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gb2YoZXJyb3IpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHsgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogZ2V0cyB0aGUgcmF3IGRhdGEgKi9cclxuICBwcml2YXRlIGdldFJhd0RhdGEoKTogYW55IHtcclxuICAgIGNvbnN0IGxzRGF0YSA9IHRoaXMud2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMua2V5UGF0aCk7XHJcbiAgICBpZiAodGhpcy5jb25maWc/LmJyb3dzZXJTdG9yYWdlSW1wbGVtZW50YXRpb24gPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAvLyBmaXJzdCBtb3ZlIGxvY2FsIHN0b3JhZ2UgZGF0YSBpZiB0aGVyZSBpcyBhbnlcclxuICAgICAgaWYgKGxzRGF0YSkge1xyXG4gICAgICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5rZXlQYXRoLCBsc0RhdGEpO1xyXG4gICAgICAgIHRoaXMud2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMua2V5UGF0aCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHJldHVybiB0aGUgc2Vzc2lvbiBzdG9yYWdlIGRhdGFcclxuICAgICAgcmV0dXJuIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5rZXlQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvdGhlcndpc2UgcmV0dXJuIGxvY2FsIHN0b3JhZ2UgZGF0YVxyXG4gICAgcmV0dXJuIGxzRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnZlcnRzIG9iamVjdCBrZXlzIHRvIGNhbWVsIGNhc2VcclxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjkzMTgyOC9jb252ZXJ0LXJldHVybmVkLWpzb24tb2JqZWN0LXByb3BlcnRpZXMtdG8tbG93ZXItZmlyc3QtY2FtZWxjYXNlXHJcbiAgICogQHBhcmFtIG8gVGhlIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdG9DYW1lbChvOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHBhc2NhbFRvQ2FtZWwobyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import { Subscription } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../services/oauth2-role.service";
|
|
5
|
-
export class RbacActionDirective {
|
|
6
|
-
/**
|
|
7
|
-
* Constructs the component
|
|
8
|
-
* @param templateRef The template reference
|
|
9
|
-
* @param viewContainer The view container reference
|
|
10
|
-
* @param oAuth2RoleService The oauth 2 role service
|
|
11
|
-
*/
|
|
12
|
-
constructor(templateRef, viewContainer, oAuth2RoleService) {
|
|
13
|
-
this.templateRef = templateRef;
|
|
14
|
-
this.viewContainer = viewContainer;
|
|
15
|
-
this.oAuth2RoleService = oAuth2RoleService;
|
|
16
|
-
/** The directive subscription */
|
|
17
|
-
this.directiveSub = new Subscription();
|
|
18
|
-
}
|
|
19
|
-
/** Life cycle hook for directive initialization */
|
|
20
|
-
ngOnInit() {
|
|
21
|
-
this.directiveSub.add(this.oAuth2RoleService.hasActionAccess(this.sofArRbacAction)
|
|
22
|
-
.subscribe(hasAccess => {
|
|
23
|
-
if (hasAccess) {
|
|
24
|
-
if (!this.isContentRendered) {
|
|
25
|
-
this.viewContainer.createEmbeddedView(this.templateRef);
|
|
26
|
-
}
|
|
27
|
-
this.isContentRendered = true;
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
this.viewContainer.clear();
|
|
31
|
-
this.isContentRendered = false;
|
|
32
|
-
}
|
|
33
|
-
}));
|
|
34
|
-
}
|
|
35
|
-
/** Life cycle hook for directive destruction */
|
|
36
|
-
ngOnDestroy() {
|
|
37
|
-
this.directiveSub.unsubscribe();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
43
|
-
type: Directive,
|
|
44
|
-
args: [{
|
|
45
|
-
selector: '[sofArRbacAction]'
|
|
46
|
-
}]
|
|
47
|
-
}], ctorParameters:
|
|
48
|
-
type: Input
|
|
49
|
-
}] } });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../services/oauth2-role.service";
|
|
5
|
+
export class RbacActionDirective {
|
|
6
|
+
/**
|
|
7
|
+
* Constructs the component
|
|
8
|
+
* @param templateRef The template reference
|
|
9
|
+
* @param viewContainer The view container reference
|
|
10
|
+
* @param oAuth2RoleService The oauth 2 role service
|
|
11
|
+
*/
|
|
12
|
+
constructor(templateRef, viewContainer, oAuth2RoleService) {
|
|
13
|
+
this.templateRef = templateRef;
|
|
14
|
+
this.viewContainer = viewContainer;
|
|
15
|
+
this.oAuth2RoleService = oAuth2RoleService;
|
|
16
|
+
/** The directive subscription */
|
|
17
|
+
this.directiveSub = new Subscription();
|
|
18
|
+
}
|
|
19
|
+
/** Life cycle hook for directive initialization */
|
|
20
|
+
ngOnInit() {
|
|
21
|
+
this.directiveSub.add(this.oAuth2RoleService.hasActionAccess(this.sofArRbacAction)
|
|
22
|
+
.subscribe(hasAccess => {
|
|
23
|
+
if (hasAccess) {
|
|
24
|
+
if (!this.isContentRendered) {
|
|
25
|
+
this.viewContainer.createEmbeddedView(this.templateRef);
|
|
26
|
+
}
|
|
27
|
+
this.isContentRendered = true;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.viewContainer.clear();
|
|
31
|
+
this.isContentRendered = false;
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
/** Life cycle hook for directive destruction */
|
|
36
|
+
ngOnDestroy() {
|
|
37
|
+
this.directiveSub.unsubscribe();
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RbacActionDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.Oauth2RoleService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
40
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: RbacActionDirective, selector: "[sofArRbacAction]", inputs: { sofArRbacAction: "sofArRbacAction" }, ngImport: i0 }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RbacActionDirective, decorators: [{
|
|
43
|
+
type: Directive,
|
|
44
|
+
args: [{
|
|
45
|
+
selector: '[sofArRbacAction]'
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.Oauth2RoleService }], propDecorators: { sofArRbacAction: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}] } });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmJhYy1hY3Rpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJtYXR1cmUvc3JjL2xpYi9yYmFjL2RpcmVjdGl2ZXMvcmJhYy1hY3Rpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBS3BDLE1BQU0sT0FBTyxtQkFBbUI7SUFXOUI7Ozs7O09BS0c7SUFDSCxZQUNtQixXQUE2QixFQUM3QixhQUErQixFQUMvQixpQkFBb0M7UUFGcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBZnZELGlDQUFpQztRQUNoQixpQkFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBZTdELENBQUM7SUFFTCxtREFBbUQ7SUFDNUMsUUFBUTtRQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQzthQUMvRSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDckIsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3pEO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7YUFDL0I7aUJBQ0k7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsZ0RBQWdEO0lBQ3pDLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzhHQTNDVSxtQkFBbUI7a0dBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFIL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2lCQUM5QjsrSUFJaUIsZUFBZTtzQkFBOUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYXV0aDJSb2xlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL29hdXRoMi1yb2xlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3NvZkFyUmJhY0FjdGlvbl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYmFjQWN0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAvKiogVGhlIGFjdGlvbiBvZiB0aGUgZGlyZWN0aXZlICovXHJcbiAgQElucHV0KCkgcHVibGljIHNvZkFyUmJhY0FjdGlvbjogc3RyaW5nO1xyXG5cclxuICAvKiogVGhlIGRpcmVjdGl2ZSBzdWJzY3JpcHRpb24gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGRpcmVjdGl2ZVN1YjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAvKiogVHJ1ZSBpZiBjb250ZW50IGlzIHJlbmRlcmVkICovXHJcbiAgcHJpdmF0ZSBpc0NvbnRlbnRSZW5kZXJlZDogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0cyB0aGUgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIHRlbXBsYXRlUmVmIFRoZSB0ZW1wbGF0ZSByZWZlcmVuY2VcclxuICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlXHJcbiAgICogQHBhcmFtIG9BdXRoMlJvbGVTZXJ2aWNlIFRoZSBvYXV0aCAyIHJvbGUgc2VydmljZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgb0F1dGgyUm9sZVNlcnZpY2U6IE9hdXRoMlJvbGVTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqIExpZmUgY3ljbGUgaG9vayBmb3IgZGlyZWN0aXZlIGluaXRpYWxpemF0aW9uICovXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVTdWIuYWRkKHRoaXMub0F1dGgyUm9sZVNlcnZpY2UuaGFzQWN0aW9uQWNjZXNzKHRoaXMuc29mQXJSYmFjQWN0aW9uKVxyXG4gICAgICAuc3Vic2NyaWJlKGhhc0FjY2VzcyA9PiB7XHJcbiAgICAgICAgaWYgKGhhc0FjY2Vzcykge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmlzQ29udGVudFJlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlzQ29udGVudFJlbmRlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuICAgICAgICAgIHRoaXMuaXNDb250ZW50UmVuZGVyZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKiBMaWZlIGN5Y2xlIGhvb2sgZm9yIGRpcmVjdGl2ZSBkZXN0cnVjdGlvbiAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlyZWN0aXZlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|