@softheon/armature 10.45.5 → 15.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/assets/styles/material-overrides.scss +103 -88
  2. package/assets/styles/sof-styles.scss +442 -376
  3. package/esm2020/lib/alert-banner/alert-banner-api.mjs +10 -0
  4. package/esm2020/lib/alert-banner/alert-banner.module.mjs +41 -0
  5. package/esm2020/lib/alert-banner/components/alert-banner/alert-banner.component.mjs +83 -0
  6. package/esm2020/lib/alert-banner/models/alert-banner-config.mjs +2 -0
  7. package/esm2020/lib/alert-banner/models/alert-banner-context.mjs +2 -0
  8. package/esm2020/lib/alert-banner/models/constants.mjs +16 -0
  9. package/esm2020/lib/alert-banner/services/alert-banner.service.mjs +44 -0
  10. package/esm2020/lib/armature.module.mjs +176 -0
  11. package/esm2020/lib/base-components/base-component-api.mjs +9 -0
  12. package/esm2020/lib/base-components/base-component.module.mjs +93 -0
  13. package/esm2020/lib/base-components/sof-alert/sof-alert.component.mjs +79 -0
  14. package/esm2020/lib/base-components/sof-banner/sof-banner.component.mjs +49 -0
  15. package/esm2020/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.mjs +188 -0
  16. package/esm2020/lib/base-components/sof-modal/sof-modal.component.mjs +58 -0
  17. package/esm2020/lib/base-components/sof-progress-bar/sof-progress-bar.component.mjs +79 -0
  18. package/esm2020/lib/component-save-print/components/component-save-print/component-save-print.component.mjs +91 -0
  19. package/esm2020/lib/component-save-print/services/component-save-print.service.mjs +30 -0
  20. package/esm2020/lib/component-save-print/sof-ar-component-save-print.module.mjs +32 -0
  21. package/esm2020/lib/core/client-generated/api/session.service.mjs +242 -0
  22. package/esm2020/lib/core/client-generated/configuration.mjs +59 -0
  23. package/esm2020/lib/core/client-generated/encoder.mjs +17 -0
  24. package/esm2020/lib/core/client-generated/model/applicationUserModel.mjs +20 -0
  25. package/esm2020/lib/core/client-generated/model/assertedUserModel.mjs +2 -0
  26. package/esm2020/lib/core/client-generated/model/brandingModel.mjs +2 -0
  27. package/esm2020/lib/core/client-generated/model/errorModel.mjs +13 -0
  28. package/esm2020/lib/core/client-generated/model/folderLink.mjs +13 -0
  29. package/esm2020/lib/core/client-generated/model/identityProfile.mjs +2 -0
  30. package/esm2020/lib/core/client-generated/model/models.mjs +20 -0
  31. package/esm2020/lib/core/client-generated/model/oAuthModel.mjs +13 -0
  32. package/esm2020/lib/core/client-generated/model/preferencesRow.mjs +13 -0
  33. package/esm2020/lib/core/client-generated/model/rolesRow.mjs +13 -0
  34. package/esm2020/lib/core/client-generated/model/sessionGetResponseModel.mjs +2 -0
  35. package/esm2020/lib/core/client-generated/model/sessionPostRequestModel.mjs +2 -0
  36. package/esm2020/lib/core/client-generated/model/sessionPostResponseModel.mjs +2 -0
  37. package/esm2020/lib/core/client-generated/model/sessionPutRequestModel.mjs +2 -0
  38. package/esm2020/lib/core/client-generated/model/sessionPutResponseModel.mjs +2 -0
  39. package/esm2020/lib/core/client-generated/model/sessionResponseModel.mjs +2 -0
  40. package/esm2020/lib/core/client-generated/model/settingsProfile.mjs +2 -0
  41. package/esm2020/lib/core/client-generated/model/themePaletteColorsModel.mjs +13 -0
  42. package/esm2020/lib/core/client-generated/model/themePaletteModel.mjs +2 -0
  43. package/esm2020/lib/core/client-generated/model/trackingModel.mjs +13 -0
  44. package/esm2020/lib/core/client-generated/model/validationRecordsRow.mjs +13 -0
  45. package/esm2020/lib/core/client-generated/variables.mjs +9 -0
  46. package/esm2020/lib/core/components/app-template/app-template.component.mjs +250 -0
  47. package/esm2020/lib/core/functions/guid.mjs +11 -0
  48. package/esm2020/lib/core/functions/naming-convention.mjs +33 -0
  49. package/esm2020/lib/core/initializer/abstract-startup-service.mjs +4 -0
  50. package/esm2020/lib/core/initializer/initializer.service.mjs +189 -0
  51. package/esm2020/lib/core/interceptors/armature-auth-token-append.interceptor.mjs +73 -0
  52. package/esm2020/lib/core/models/base-config.mjs +2 -0
  53. package/esm2020/lib/core/models/constants.mjs +13 -0
  54. package/esm2020/lib/core/models/data-store-config.mjs +4 -0
  55. package/esm2020/lib/core/models/header-config.mjs +2 -0
  56. package/esm2020/lib/core/models/http-verbs.mjs +9 -0
  57. package/esm2020/lib/core/models/navigation-config.mjs +2 -0
  58. package/esm2020/lib/core/models/oidc-auth-settings.mjs +2 -0
  59. package/esm2020/lib/core/models/route-path.mjs +7 -0
  60. package/esm2020/lib/core/models/session-config.mjs +4 -0
  61. package/esm2020/lib/core/models/styles.mjs +2 -0
  62. package/esm2020/lib/core/models/typed-session.mjs +4 -0
  63. package/esm2020/lib/core/models/user-entity-service-config.mjs +12 -0
  64. package/esm2020/lib/core/services/authorization.service.mjs +175 -0
  65. package/esm2020/lib/core/services/banner.service.mjs +43 -0
  66. package/esm2020/lib/core/services/base-config.service.mjs +32 -0
  67. package/esm2020/lib/core/services/custom-auth-config.service.mjs +4 -0
  68. package/esm2020/lib/core/services/default-config.service.mjs +19 -0
  69. package/esm2020/lib/core/services/session.service.mjs +385 -0
  70. package/esm2020/lib/core/services/user-entity.service.mjs +140 -0
  71. package/esm2020/lib/distributed-cache/client-generated/api/api.mjs +4 -0
  72. package/esm2020/lib/distributed-cache/client-generated/api/cache.service.mjs +213 -0
  73. package/esm2020/lib/distributed-cache/client-generated/configuration.mjs +59 -0
  74. package/esm2020/lib/distributed-cache/client-generated/encoder.mjs +17 -0
  75. package/esm2020/lib/distributed-cache/client-generated/model/cacheExpirationType.mjs +16 -0
  76. package/esm2020/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.mjs +2 -0
  77. package/esm2020/lib/distributed-cache/client-generated/model/models.mjs +5 -0
  78. package/esm2020/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.mjs +13 -0
  79. package/esm2020/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.mjs +13 -0
  80. package/esm2020/lib/distributed-cache/client-generated/variables.mjs +9 -0
  81. package/esm2020/lib/distributed-cache/distributed-cache-api.mjs +8 -0
  82. package/esm2020/lib/distributed-cache/distributed-cache.module.mjs +38 -0
  83. package/esm2020/lib/distributed-cache/models/constants.mjs +3 -0
  84. package/esm2020/lib/distributed-cache/models/policy-person.mjs +9 -0
  85. package/esm2020/lib/distributed-cache/services/server-cache.service.mjs +48 -0
  86. package/esm2020/lib/error/components/error-common/error-common.component.mjs +25 -0
  87. package/esm2020/lib/error/error-api.mjs +7 -0
  88. package/esm2020/lib/error/error.module.mjs +31 -0
  89. package/esm2020/lib/error/models/error-common-config.mjs +8 -0
  90. package/esm2020/lib/faq/components/faq/faq.component.mjs +40 -0
  91. package/esm2020/lib/faq/faq-api.mjs +8 -0
  92. package/esm2020/lib/faq/faq.module.mjs +41 -0
  93. package/esm2020/lib/faq/models/faq-config.mjs +4 -0
  94. package/esm2020/lib/faq/models/faq.mjs +8 -0
  95. package/esm2020/lib/footer/components/footer/footer.component.mjs +25 -0
  96. package/esm2020/lib/footer/components/site-map/site-map.component.mjs +25 -0
  97. package/esm2020/lib/footer/footer-api.mjs +10 -0
  98. package/esm2020/lib/footer/footer.module.mjs +45 -0
  99. package/esm2020/lib/footer/models/enum/site-map-direction.mjs +15 -0
  100. package/esm2020/lib/footer/models/footer-config.mjs +4 -0
  101. package/esm2020/lib/footer/models/site-map-models.mjs +2 -0
  102. package/esm2020/lib/forms/components/sof-address/sof-address.component.mjs +110 -0
  103. package/esm2020/lib/forms/directives/alphanumeric/alphanumeric.directive.mjs +78 -0
  104. package/esm2020/lib/forms/directives/input-trim/input-trim.directive.mjs +110 -0
  105. package/esm2020/lib/forms/directives/letters-only/letters-only.directive.mjs +72 -0
  106. package/esm2020/lib/forms/directives/numbers-only/numbers-only.directive.mjs +60 -0
  107. package/esm2020/lib/forms/forms-api.mjs +19 -0
  108. package/esm2020/lib/forms/forms.module.mjs +83 -0
  109. package/esm2020/lib/forms/models/address.mjs +2 -0
  110. package/esm2020/lib/forms/models/constants.mjs +10 -0
  111. package/esm2020/lib/forms/models/county.mjs +2 -0
  112. package/esm2020/lib/forms/models/enums/states.mjs +58 -0
  113. package/esm2020/lib/forms/pipes/phone-format.pipe.mjs +33 -0
  114. package/esm2020/lib/forms/services/alert.service.mjs +167 -0
  115. package/esm2020/lib/header/components/header/header.component.mjs +161 -0
  116. package/esm2020/lib/header/components/mobile-header-menu/mobile-header-menu.component.mjs +39 -0
  117. package/esm2020/lib/header/header-api.mjs +12 -0
  118. package/esm2020/lib/header/header.module.mjs +85 -0
  119. package/esm2020/lib/header/models/header-auth.settings.mjs +32 -0
  120. package/esm2020/lib/header/models/header-language.settings.mjs +2 -0
  121. package/esm2020/lib/header/models/header-theme.settings.mjs +2 -0
  122. package/esm2020/lib/header/models/header.settings.mjs +2 -0
  123. package/esm2020/lib/header/models/mobile-header-nav.settings.mjs +2 -0
  124. package/esm2020/lib/navigation/components/navigation/navigation.component.mjs +555 -0
  125. package/esm2020/lib/navigation/models/nav-theme.settings.mjs +2 -0
  126. package/esm2020/lib/navigation/models/nav.settings.mjs +2 -0
  127. package/esm2020/lib/navigation/models/navigation.mjs +2 -0
  128. package/esm2020/lib/navigation/navigation-api.mjs +9 -0
  129. package/esm2020/lib/navigation/navigation.module.mjs +126 -0
  130. package/esm2020/lib/oauth/models/constants.mjs +6 -0
  131. package/esm2020/lib/oauth/models/generated/accountManagementAssertionModel.mjs +2 -0
  132. package/esm2020/lib/oauth/models/generated/accountManagementRefreshRequestModel.mjs +2 -0
  133. package/esm2020/lib/oauth/models/generated/accountManagementResponseModel.mjs +2 -0
  134. package/esm2020/lib/oauth/models/generated/coverageDetail.mjs +19 -0
  135. package/esm2020/lib/oauth/models/generated/finance.mjs +13 -0
  136. package/esm2020/lib/oauth/models/generated/iSsoResponseModel.mjs +13 -0
  137. package/esm2020/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.mjs +2 -0
  138. package/esm2020/lib/oauth/models/generated/person.mjs +13 -0
  139. package/esm2020/lib/oauth/models/generated/policy.mjs +2 -0
  140. package/esm2020/lib/oauth/models/generated/refreshResponseModel.mjs +13 -0
  141. package/esm2020/lib/oauth/models/hybrid-saml-oauth-config.mjs +4 -0
  142. package/esm2020/lib/oauth/oauth-api.mjs +15 -0
  143. package/esm2020/lib/oauth/oauth.module.mjs +29 -0
  144. package/esm2020/lib/oauth/services/hybrid-saml-oauth.service.mjs +201 -0
  145. package/esm2020/lib/rbac/directives/rbac-action.directive.mjs +50 -0
  146. package/esm2020/lib/rbac/models/access-token-claims.mjs +23 -0
  147. package/esm2020/lib/rbac/models/constants.mjs +4 -0
  148. package/esm2020/lib/rbac/models/decoded-access-token.mjs +69 -0
  149. package/esm2020/lib/rbac/models/rbac-config.mjs +4 -0
  150. package/esm2020/lib/rbac/models/role-access.mjs +10 -0
  151. package/esm2020/lib/rbac/rbac-api.mjs +15 -0
  152. package/esm2020/lib/rbac/rbac.module.mjs +51 -0
  153. package/esm2020/lib/rbac/services/ar-role-nav.service.mjs +91 -0
  154. package/esm2020/lib/rbac/services/oauth2-role.service.mjs +114 -0
  155. package/esm2020/lib/rbac/services/role-nav.service.mjs +4 -0
  156. package/esm2020/lib/resize-panels/components/resize-panels/resize-panels.component.mjs +156 -0
  157. package/esm2020/lib/resize-panels/models/resize-event.mjs +2 -0
  158. package/esm2020/lib/resize-panels/resize-panels-api.mjs +5 -0
  159. package/esm2020/lib/resize-panels/resize-panels.module.mjs +23 -0
  160. package/esm2020/lib/rum/models/arm-error.mjs +29 -0
  161. package/esm2020/lib/rum/models/rum-config.mjs +4 -0
  162. package/esm2020/lib/rum/rum-api.mjs +10 -0
  163. package/esm2020/lib/rum/rum.module.mjs +48 -0
  164. package/esm2020/lib/rum/services/rum.service.mjs +115 -0
  165. package/esm2020/lib/rum/services/shared-error.service.mjs +45 -0
  166. package/esm2020/lib/rum/services/softheon-error-handler.service.mjs +76 -0
  167. package/esm2020/lib/saml/components/redirect-saml/redirect-saml.component.mjs +79 -0
  168. package/esm2020/lib/saml/models/i-saml-request.mjs +2 -0
  169. package/esm2020/lib/saml/models/i-saml-response.mjs +2 -0
  170. package/esm2020/lib/saml/models/redirect-saml-request.mjs +4 -0
  171. package/esm2020/lib/saml/models/sso-gateway-model.mjs +4 -0
  172. package/esm2020/lib/saml/saml-api.mjs +15 -0
  173. package/esm2020/lib/saml/saml.module.mjs +43 -0
  174. package/esm2020/lib/saml/services/entry/abstract-saml-entry.service.mjs +4 -0
  175. package/esm2020/lib/saml/services/entry/sso-gateway-entry.service.mjs +36 -0
  176. package/esm2020/lib/saml/services/send-off/abstract-saml.service.mjs +4 -0
  177. package/esm2020/lib/saml/services/send-off/saml.service.mjs +39 -0
  178. package/esm2020/lib/sof-pipe/constants/constants.mjs +17 -0
  179. package/esm2020/lib/sof-pipe/models/sof-date-pipe-format.mjs +2 -0
  180. package/esm2020/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.mjs +39 -0
  181. package/esm2020/lib/sof-pipe/pipes/sof-date/sof-date.pipe.mjs +59 -0
  182. package/esm2020/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.mjs +28 -0
  183. package/esm2020/lib/sof-pipe/sof-pipe.api.mjs +9 -0
  184. package/esm2020/lib/sof-pipe/sof-pipe.module.mjs +39 -0
  185. package/esm2020/lib/theming/directives/css-override.directive.mjs +69 -0
  186. package/esm2020/lib/theming/models/css-override.mjs +11 -0
  187. package/esm2020/lib/theming/services/theme.service.mjs +167 -0
  188. package/esm2020/lib/theming/theme-api.mjs +6 -0
  189. package/esm2020/lib/theming/theme.module.mjs +31 -0
  190. package/esm2020/public-api.mjs +48 -0
  191. package/esm2020/softheon-armature.mjs +5 -0
  192. package/fesm2015/softheon-armature.mjs +6767 -0
  193. package/fesm2015/softheon-armature.mjs.map +1 -0
  194. package/fesm2020/softheon-armature.mjs +6829 -0
  195. package/fesm2020/softheon-armature.mjs.map +1 -0
  196. package/index.d.ts +5 -0
  197. package/lib/alert-banner/alert-banner.module.d.ts +9 -0
  198. package/lib/alert-banner/components/alert-banner/alert-banner.component.d.ts +3 -0
  199. package/lib/alert-banner/services/alert-banner.service.d.ts +3 -0
  200. package/lib/armature.module.d.ts +15 -0
  201. package/lib/base-components/base-component.module.d.ts +24 -0
  202. package/lib/base-components/sof-alert/sof-alert.component.d.ts +3 -0
  203. package/lib/base-components/sof-banner/sof-banner.component.d.ts +3 -0
  204. package/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.d.ts +3 -0
  205. package/lib/base-components/sof-modal/sof-modal.component.d.ts +3 -0
  206. package/lib/base-components/sof-progress-bar/sof-progress-bar.component.d.ts +3 -0
  207. package/lib/component-save-print/components/component-save-print/component-save-print.component.d.ts +3 -0
  208. package/lib/component-save-print/services/component-save-print.service.d.ts +3 -0
  209. package/lib/component-save-print/sof-ar-component-save-print.module.d.ts +6 -0
  210. package/lib/core/client-generated/api/session.service.d.ts +3 -11
  211. package/lib/core/components/app-template/app-template.component.d.ts +3 -0
  212. package/lib/core/initializer/initializer.service.d.ts +3 -0
  213. package/lib/core/interceptors/armature-auth-token-append.interceptor.d.ts +3 -0
  214. package/lib/core/models/http-verbs.d.ts +1 -1
  215. package/lib/core/services/authorization.service.d.ts +3 -0
  216. package/lib/core/services/banner.service.d.ts +3 -0
  217. package/lib/core/services/base-config.service.d.ts +3 -0
  218. package/lib/core/services/default-config.service.d.ts +3 -0
  219. package/lib/core/services/session.service.d.ts +3 -0
  220. package/lib/core/services/user-entity.service.d.ts +3 -0
  221. package/lib/distributed-cache/client-generated/api/cache.service.d.ts +3 -11
  222. package/lib/distributed-cache/client-generated/model/cacheExpirationType.d.ts +1 -1
  223. package/lib/distributed-cache/distributed-cache.module.d.ts +5 -0
  224. package/lib/distributed-cache/services/server-cache.service.d.ts +3 -0
  225. package/lib/error/components/error-common/error-common.component.d.ts +3 -0
  226. package/lib/error/error.module.d.ts +8 -0
  227. package/lib/faq/components/faq/faq.component.d.ts +3 -0
  228. package/lib/faq/faq.module.d.ts +12 -0
  229. package/lib/footer/components/footer/footer.component.d.ts +3 -0
  230. package/lib/footer/components/site-map/site-map.component.d.ts +3 -0
  231. package/lib/footer/footer.module.d.ts +11 -0
  232. package/lib/forms/components/sof-address/sof-address.component.d.ts +3 -0
  233. package/lib/forms/directives/alphanumeric/alphanumeric.directive.d.ts +3 -0
  234. package/lib/forms/directives/input-trim/input-trim.directive.d.ts +3 -0
  235. package/lib/forms/directives/letters-only/letters-only.directive.d.ts +3 -0
  236. package/lib/forms/directives/numbers-only/numbers-only.directive.d.ts +3 -0
  237. package/lib/forms/forms.module.d.ts +17 -0
  238. package/lib/forms/pipes/phone-format.pipe.d.ts +3 -0
  239. package/lib/forms/services/alert.service.d.ts +3 -0
  240. package/lib/header/components/header/header.component.d.ts +4 -1
  241. package/lib/header/components/mobile-header-menu/mobile-header-menu.component.d.ts +3 -0
  242. package/lib/header/header.module.d.ts +18 -0
  243. package/lib/navigation/components/navigation/navigation.component.d.ts +6 -3
  244. package/lib/navigation/navigation.module.d.ts +22 -0
  245. package/lib/oauth/oauth.module.d.ts +6 -0
  246. package/lib/oauth/services/hybrid-saml-oauth.service.d.ts +3 -0
  247. package/lib/rbac/directives/rbac-action.directive.d.ts +3 -0
  248. package/lib/rbac/rbac.module.d.ts +6 -0
  249. package/lib/rbac/services/ar-role-nav.service.d.ts +3 -0
  250. package/lib/rbac/services/oauth2-role.service.d.ts +3 -0
  251. package/lib/resize-panels/components/resize-panels/resize-panels.component.d.ts +3 -0
  252. package/lib/resize-panels/resize-panels.module.d.ts +6 -0
  253. package/lib/rum/rum.module.d.ts +5 -0
  254. package/lib/rum/services/rum.service.d.ts +3 -0
  255. package/lib/rum/services/shared-error.service.d.ts +3 -0
  256. package/lib/rum/services/softheon-error-handler.service.d.ts +3 -0
  257. package/lib/saml/components/redirect-saml/redirect-saml.component.d.ts +3 -0
  258. package/lib/saml/saml.module.d.ts +6 -0
  259. package/lib/saml/services/entry/sso-gateway-entry.service.d.ts +3 -0
  260. package/lib/saml/services/send-off/saml.service.d.ts +3 -0
  261. package/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.d.ts +3 -0
  262. package/lib/sof-pipe/pipes/sof-date/sof-date.pipe.d.ts +3 -0
  263. package/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.d.ts +3 -0
  264. package/lib/sof-pipe/sof-pipe.module.d.ts +8 -0
  265. package/lib/theming/directives/css-override.directive.d.ts +3 -0
  266. package/lib/theming/services/theme.service.d.ts +3 -0
  267. package/lib/theming/theme.module.d.ts +6 -0
  268. package/package.json +39 -27
  269. package/bundles/softheon-armature.umd.js +0 -7212
  270. package/bundles/softheon-armature.umd.js.map +0 -1
  271. package/bundles/softheon-armature.umd.min.js +0 -16
  272. package/bundles/softheon-armature.umd.min.js.map +0 -1
  273. package/esm2015/lib/alert-banner/alert-banner-api.js +0 -10
  274. package/esm2015/lib/alert-banner/alert-banner.module.js +0 -30
  275. package/esm2015/lib/alert-banner/components/alert-banner/alert-banner.component.js +0 -78
  276. package/esm2015/lib/alert-banner/models/alert-banner-config.js +0 -2
  277. package/esm2015/lib/alert-banner/models/alert-banner-context.js +0 -2
  278. package/esm2015/lib/alert-banner/models/constants.js +0 -16
  279. package/esm2015/lib/alert-banner/services/alert-banner.service.js +0 -43
  280. package/esm2015/lib/armature.module.js +0 -142
  281. package/esm2015/lib/base-components/base-component-api.js +0 -9
  282. package/esm2015/lib/base-components/base-component.module.js +0 -61
  283. package/esm2015/lib/base-components/sof-alert/sof-alert.component.js +0 -67
  284. package/esm2015/lib/base-components/sof-banner/sof-banner.component.js +0 -44
  285. package/esm2015/lib/base-components/sof-button-toggle-group/sof-button-toggle-group.component.js +0 -169
  286. package/esm2015/lib/base-components/sof-modal/sof-modal.component.js +0 -49
  287. package/esm2015/lib/base-components/sof-progress-bar/sof-progress-bar.component.js +0 -76
  288. package/esm2015/lib/component-save-print/components/component-save-print/component-save-print.component.js +0 -97
  289. package/esm2015/lib/component-save-print/services/component-save-print.service.js +0 -29
  290. package/esm2015/lib/component-save-print/sof-ar-component-save-print.module.js +0 -25
  291. package/esm2015/lib/core/client-generated/api/session.service.js +0 -235
  292. package/esm2015/lib/core/client-generated/configuration.js +0 -59
  293. package/esm2015/lib/core/client-generated/encoder.js +0 -17
  294. package/esm2015/lib/core/client-generated/model/applicationUserModel.js +0 -20
  295. package/esm2015/lib/core/client-generated/model/assertedUserModel.js +0 -2
  296. package/esm2015/lib/core/client-generated/model/brandingModel.js +0 -2
  297. package/esm2015/lib/core/client-generated/model/errorModel.js +0 -13
  298. package/esm2015/lib/core/client-generated/model/folderLink.js +0 -13
  299. package/esm2015/lib/core/client-generated/model/identityProfile.js +0 -2
  300. package/esm2015/lib/core/client-generated/model/models.js +0 -20
  301. package/esm2015/lib/core/client-generated/model/oAuthModel.js +0 -13
  302. package/esm2015/lib/core/client-generated/model/preferencesRow.js +0 -13
  303. package/esm2015/lib/core/client-generated/model/rolesRow.js +0 -13
  304. package/esm2015/lib/core/client-generated/model/sessionGetResponseModel.js +0 -2
  305. package/esm2015/lib/core/client-generated/model/sessionPostRequestModel.js +0 -2
  306. package/esm2015/lib/core/client-generated/model/sessionPostResponseModel.js +0 -2
  307. package/esm2015/lib/core/client-generated/model/sessionPutRequestModel.js +0 -2
  308. package/esm2015/lib/core/client-generated/model/sessionPutResponseModel.js +0 -2
  309. package/esm2015/lib/core/client-generated/model/sessionResponseModel.js +0 -2
  310. package/esm2015/lib/core/client-generated/model/settingsProfile.js +0 -2
  311. package/esm2015/lib/core/client-generated/model/themePaletteColorsModel.js +0 -13
  312. package/esm2015/lib/core/client-generated/model/themePaletteModel.js +0 -2
  313. package/esm2015/lib/core/client-generated/model/trackingModel.js +0 -13
  314. package/esm2015/lib/core/client-generated/model/validationRecordsRow.js +0 -13
  315. package/esm2015/lib/core/client-generated/variables.js +0 -9
  316. package/esm2015/lib/core/components/app-template/app-template.component.js +0 -249
  317. package/esm2015/lib/core/functions/guid.js +0 -11
  318. package/esm2015/lib/core/functions/naming-convention.js +0 -33
  319. package/esm2015/lib/core/initializer/abstract-startup-service.js +0 -4
  320. package/esm2015/lib/core/initializer/initializer.service.js +0 -206
  321. package/esm2015/lib/core/interceptors/armature-auth-token-append.interceptor.js +0 -75
  322. package/esm2015/lib/core/models/base-config.js +0 -2
  323. package/esm2015/lib/core/models/constants.js +0 -13
  324. package/esm2015/lib/core/models/data-store-config.js +0 -4
  325. package/esm2015/lib/core/models/header-config.js +0 -2
  326. package/esm2015/lib/core/models/http-verbs.js +0 -9
  327. package/esm2015/lib/core/models/navigation-config.js +0 -2
  328. package/esm2015/lib/core/models/oidc-auth-settings.js +0 -2
  329. package/esm2015/lib/core/models/route-path.js +0 -7
  330. package/esm2015/lib/core/models/session-config.js +0 -4
  331. package/esm2015/lib/core/models/styles.js +0 -2
  332. package/esm2015/lib/core/models/typed-session.js +0 -4
  333. package/esm2015/lib/core/models/user-entity-service-config.js +0 -12
  334. package/esm2015/lib/core/services/authorization.service.js +0 -178
  335. package/esm2015/lib/core/services/banner.service.js +0 -42
  336. package/esm2015/lib/core/services/base-config.service.js +0 -31
  337. package/esm2015/lib/core/services/custom-auth-config.service.js +0 -4
  338. package/esm2015/lib/core/services/default-config.service.js +0 -18
  339. package/esm2015/lib/core/services/session.service.js +0 -386
  340. package/esm2015/lib/core/services/user-entity.service.js +0 -147
  341. package/esm2015/lib/distributed-cache/client-generated/api/api.js +0 -4
  342. package/esm2015/lib/distributed-cache/client-generated/api/cache.service.js +0 -206
  343. package/esm2015/lib/distributed-cache/client-generated/configuration.js +0 -59
  344. package/esm2015/lib/distributed-cache/client-generated/encoder.js +0 -17
  345. package/esm2015/lib/distributed-cache/client-generated/model/cacheExpirationType.js +0 -16
  346. package/esm2015/lib/distributed-cache/client-generated/model/createCacheEntryRequestModel.js +0 -2
  347. package/esm2015/lib/distributed-cache/client-generated/model/models.js +0 -5
  348. package/esm2015/lib/distributed-cache/client-generated/model/retrieveCacheEntryResponseModel.js +0 -13
  349. package/esm2015/lib/distributed-cache/client-generated/model/updateCacheEntryRequestModel.js +0 -13
  350. package/esm2015/lib/distributed-cache/client-generated/variables.js +0 -9
  351. package/esm2015/lib/distributed-cache/distributed-cache-api.js +0 -8
  352. package/esm2015/lib/distributed-cache/distributed-cache.module.js +0 -26
  353. package/esm2015/lib/distributed-cache/models/constants.js +0 -3
  354. package/esm2015/lib/distributed-cache/models/policy-person.js +0 -9
  355. package/esm2015/lib/distributed-cache/services/server-cache.service.js +0 -52
  356. package/esm2015/lib/error/components/error-common/error-common.component.js +0 -24
  357. package/esm2015/lib/error/error-api.js +0 -7
  358. package/esm2015/lib/error/error.module.js +0 -22
  359. package/esm2015/lib/error/models/error-common-config.js +0 -8
  360. package/esm2015/lib/faq/components/faq/faq.component.js +0 -35
  361. package/esm2015/lib/faq/faq-api.js +0 -8
  362. package/esm2015/lib/faq/faq.module.js +0 -32
  363. package/esm2015/lib/faq/models/faq-config.js +0 -4
  364. package/esm2015/lib/faq/models/faq.js +0 -8
  365. package/esm2015/lib/footer/components/footer/footer.component.js +0 -25
  366. package/esm2015/lib/footer/components/site-map/site-map.component.js +0 -23
  367. package/esm2015/lib/footer/footer-api.js +0 -10
  368. package/esm2015/lib/footer/footer.module.js +0 -30
  369. package/esm2015/lib/footer/models/enum/site-map-direction.js +0 -15
  370. package/esm2015/lib/footer/models/footer-config.js +0 -4
  371. package/esm2015/lib/footer/models/site-map-models.js +0 -2
  372. package/esm2015/lib/forms/components/sof-address/sof-address.component.js +0 -99
  373. package/esm2015/lib/forms/directives/alphanumeric/alphanumeric.directive.js +0 -75
  374. package/esm2015/lib/forms/directives/input-trim/input-trim.directive.js +0 -97
  375. package/esm2015/lib/forms/directives/letters-only/letters-only.directive.js +0 -68
  376. package/esm2015/lib/forms/directives/numbers-only/numbers-only.directive.js +0 -58
  377. package/esm2015/lib/forms/forms-api.js +0 -19
  378. package/esm2015/lib/forms/forms.module.js +0 -63
  379. package/esm2015/lib/forms/models/address.js +0 -2
  380. package/esm2015/lib/forms/models/constants.js +0 -10
  381. package/esm2015/lib/forms/models/county.js +0 -2
  382. package/esm2015/lib/forms/models/enums/states.js +0 -58
  383. package/esm2015/lib/forms/pipes/phone-format.pipe.js +0 -29
  384. package/esm2015/lib/forms/services/alert.service.js +0 -170
  385. package/esm2015/lib/header/components/header/header.component.js +0 -157
  386. package/esm2015/lib/header/components/mobile-header-menu/mobile-header-menu.component.js +0 -37
  387. package/esm2015/lib/header/header-api.js +0 -12
  388. package/esm2015/lib/header/header.module.js +0 -51
  389. package/esm2015/lib/header/models/header-auth.settings.js +0 -32
  390. package/esm2015/lib/header/models/header-language.settings.js +0 -2
  391. package/esm2015/lib/header/models/header-theme.settings.js +0 -2
  392. package/esm2015/lib/header/models/header.settings.js +0 -2
  393. package/esm2015/lib/header/models/mobile-header-nav.settings.js +0 -2
  394. package/esm2015/lib/navigation/components/navigation/navigation.component.js +0 -544
  395. package/esm2015/lib/navigation/models/nav-theme.settings.js +0 -2
  396. package/esm2015/lib/navigation/models/nav.settings.js +0 -2
  397. package/esm2015/lib/navigation/models/navigation.js +0 -2
  398. package/esm2015/lib/navigation/navigation-api.js +0 -9
  399. package/esm2015/lib/navigation/navigation.module.js +0 -67
  400. package/esm2015/lib/oauth/models/constants.js +0 -6
  401. package/esm2015/lib/oauth/models/generated/accountManagementAssertionModel.js +0 -2
  402. package/esm2015/lib/oauth/models/generated/accountManagementRefreshRequestModel.js +0 -2
  403. package/esm2015/lib/oauth/models/generated/accountManagementResponseModel.js +0 -2
  404. package/esm2015/lib/oauth/models/generated/coverageDetail.js +0 -19
  405. package/esm2015/lib/oauth/models/generated/finance.js +0 -13
  406. package/esm2015/lib/oauth/models/generated/iSsoResponseModel.js +0 -13
  407. package/esm2015/lib/oauth/models/generated/iSsoResponseModelAccountManagementAssertionModel.js +0 -2
  408. package/esm2015/lib/oauth/models/generated/person.js +0 -13
  409. package/esm2015/lib/oauth/models/generated/policy.js +0 -2
  410. package/esm2015/lib/oauth/models/generated/refreshResponseModel.js +0 -13
  411. package/esm2015/lib/oauth/models/hybrid-saml-oauth-config.js +0 -4
  412. package/esm2015/lib/oauth/oauth-api.js +0 -15
  413. package/esm2015/lib/oauth/oauth.module.js +0 -20
  414. package/esm2015/lib/oauth/services/hybrid-saml-oauth.service.js +0 -202
  415. package/esm2015/lib/rbac/directives/rbac-action.directive.js +0 -52
  416. package/esm2015/lib/rbac/models/access-token-claims.js +0 -23
  417. package/esm2015/lib/rbac/models/constants.js +0 -4
  418. package/esm2015/lib/rbac/models/decoded-access-token.js +0 -69
  419. package/esm2015/lib/rbac/models/rbac-config.js +0 -4
  420. package/esm2015/lib/rbac/models/role-access.js +0 -10
  421. package/esm2015/lib/rbac/rbac-api.js +0 -15
  422. package/esm2015/lib/rbac/rbac.module.js +0 -43
  423. package/esm2015/lib/rbac/services/ar-role-nav.service.js +0 -90
  424. package/esm2015/lib/rbac/services/oauth2-role.service.js +0 -120
  425. package/esm2015/lib/rbac/services/role-nav.service.js +0 -4
  426. package/esm2015/lib/resize-panels/components/resize-panels/resize-panels.component.js +0 -142
  427. package/esm2015/lib/resize-panels/models/resize-event.js +0 -2
  428. package/esm2015/lib/resize-panels/resize-panels-api.js +0 -5
  429. package/esm2015/lib/resize-panels/resize-panels.module.js +0 -18
  430. package/esm2015/lib/rum/models/arm-error.js +0 -29
  431. package/esm2015/lib/rum/models/rum-config.js +0 -4
  432. package/esm2015/lib/rum/rum-api.js +0 -10
  433. package/esm2015/lib/rum/rum.module.js +0 -40
  434. package/esm2015/lib/rum/services/rum.service.js +0 -118
  435. package/esm2015/lib/rum/services/shared-error.service.js +0 -46
  436. package/esm2015/lib/rum/services/softheon-error-handler.service.js +0 -81
  437. package/esm2015/lib/saml/components/redirect-saml/redirect-saml.component.js +0 -76
  438. package/esm2015/lib/saml/models/i-saml-request.js +0 -2
  439. package/esm2015/lib/saml/models/i-saml-response.js +0 -2
  440. package/esm2015/lib/saml/models/redirect-saml-request.js +0 -4
  441. package/esm2015/lib/saml/models/sso-gateway-model.js +0 -4
  442. package/esm2015/lib/saml/saml-api.js +0 -15
  443. package/esm2015/lib/saml/saml.module.js +0 -36
  444. package/esm2015/lib/saml/services/entry/abstract-saml-entry.service.js +0 -4
  445. package/esm2015/lib/saml/services/entry/sso-gateway-entry.service.js +0 -35
  446. package/esm2015/lib/saml/services/send-off/abstract-saml.service.js +0 -9
  447. package/esm2015/lib/saml/services/send-off/saml.service.js +0 -41
  448. package/esm2015/lib/sof-pipe/constants/constants.js +0 -17
  449. package/esm2015/lib/sof-pipe/models/sof-date-pipe-format.js +0 -2
  450. package/esm2015/lib/sof-pipe/pipes/sof-blank/sof-blank.pipe.js +0 -33
  451. package/esm2015/lib/sof-pipe/pipes/sof-date/sof-date.pipe.js +0 -54
  452. package/esm2015/lib/sof-pipe/pipes/sof-ssn/sof-ssn.pipe.js +0 -24
  453. package/esm2015/lib/sof-pipe/sof-pipe.api.js +0 -9
  454. package/esm2015/lib/sof-pipe/sof-pipe.module.js +0 -28
  455. package/esm2015/lib/theming/directives/css-override.directive.js +0 -67
  456. package/esm2015/lib/theming/models/css-override.js +0 -11
  457. package/esm2015/lib/theming/services/theme.service.js +0 -166
  458. package/esm2015/lib/theming/theme-api.js +0 -6
  459. package/esm2015/lib/theming/theme.module.js +0 -24
  460. package/esm2015/public-api.js +0 -48
  461. package/esm2015/softheon-armature.js +0 -12
  462. package/fesm2015/softheon-armature.js +0 -6517
  463. package/fesm2015/softheon-armature.js.map +0 -1
  464. package/softheon-armature.d.ts +0 -11
  465. package/softheon-armature.metadata.json +0 -1
@@ -0,0 +1,43 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Service for managing the banner
6
+ */
7
+ export class BannerService {
8
+ constructor() {
9
+ /** Behavior subject for show banner */
10
+ this.showBanner = new BehaviorSubject(false);
11
+ /** Behavior subject for banner message */
12
+ this.message = new BehaviorSubject(undefined);
13
+ /** Behavior subject for whether to show check mark or not */
14
+ this.showCheckMark = new BehaviorSubject(true);
15
+ this.showBanner$ = this.showBanner.asObservable();
16
+ this.message$ = this.message.asObservable();
17
+ this.showCheckMark$ = this.showCheckMark.asObservable();
18
+ }
19
+ /**
20
+ * Shows the messaage in the banner
21
+ * @param message The banner message
22
+ */
23
+ showMessage(message, showCheckMark = true) {
24
+ this.showBanner.next(true);
25
+ this.message.next(message);
26
+ this.showCheckMark.next(showCheckMark);
27
+ }
28
+ /**
29
+ * Hide Notification Message
30
+ */
31
+ hideMessage() {
32
+ this.showBanner.next(false);
33
+ }
34
+ }
35
+ BannerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BannerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
36
+ BannerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BannerService, providedIn: 'root' });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BannerService, decorators: [{
38
+ type: Injectable,
39
+ args: [{
40
+ providedIn: 'root'
41
+ }]
42
+ }], ctorParameters: function () { return []; } });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9zcmMvbGliL2NvcmUvc2VydmljZXMvYmFubmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQUVuRDs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBb0J4QjtRQVRBLHVDQUF1QztRQUMvQixlQUFVLEdBQTZCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRW5GLDBDQUEwQztRQUNsQyxZQUFPLEdBQTRCLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRWxGLDZEQUE2RDtRQUNyRCxrQkFBYSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUluRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLE9BQWUsRUFBRSxnQkFBeUIsSUFBSTtRQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7OzBHQTFDVSxhQUFhOzhHQUFiLGFBQWEsY0FGWixNQUFNOzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIGZvciBtYW5hZ2luZyB0aGUgYmFubmVyXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW5uZXJTZXJ2aWNlIHtcclxuXHJcbiAgLyoqIE9ic2VydmFibGUgZm9yIHdoZXRoZXIgdGhlIGJhbm5lciBzaG91bGQgYmUgc2hvd24gKi9cclxuICBwdWJsaWMgc2hvd0Jhbm5lciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblxyXG4gIC8qKiBPYnNlcnZhYmxlIGZvciB0aGUgYmFubmVyIG1lc3NhZ2UgKi9cclxuICBwdWJsaWMgbWVzc2FnZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuXHJcbiAgLyoqIE9ic2VydmFibGUgZm9yIHdoZXRoZXIgb2Ygbm90IHRvIHNob3cgdGhlIGNoZWNrIG1hcmsgb24gdGhlIGJhbm5lciAqL1xyXG4gIHB1YmxpYyBzaG93Q2hlY2tNYXJrJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgLyoqIEJlaGF2aW9yIHN1YmplY3QgZm9yIHNob3cgYmFubmVyICovXHJcbiAgcHJpdmF0ZSBzaG93QmFubmVyOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqIEJlaGF2aW9yIHN1YmplY3QgZm9yIGJhbm5lciBtZXNzYWdlICovXHJcbiAgcHJpdmF0ZSBtZXNzYWdlOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG5cclxuICAvKiogQmVoYXZpb3Igc3ViamVjdCBmb3Igd2hldGhlciB0byBzaG93IGNoZWNrIG1hcmsgb3Igbm90ICovXHJcbiAgcHJpdmF0ZSBzaG93Q2hlY2tNYXJrOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICApIHtcclxuICAgIHRoaXMuc2hvd0Jhbm5lciQgPSB0aGlzLnNob3dCYW5uZXIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB0aGlzLm1lc3NhZ2UkID0gdGhpcy5tZXNzYWdlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgdGhpcy5zaG93Q2hlY2tNYXJrJCA9IHRoaXMuc2hvd0NoZWNrTWFyay5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3dzIHRoZSBtZXNzYWFnZSBpbiB0aGUgYmFubmVyXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIGJhbm5lciBtZXNzYWdlXHJcbiAgICovXHJcbiAgcHVibGljIHNob3dNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgc2hvd0NoZWNrTWFyazogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0Jhbm5lci5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5tZXNzYWdlLm5leHQobWVzc2FnZSk7XHJcbiAgICB0aGlzLnNob3dDaGVja01hcmsubmV4dChzaG93Q2hlY2tNYXJrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpZGUgTm90aWZpY2F0aW9uIE1lc3NhZ2UgXHJcbiAgICovXHJcbiAgcHVibGljIGhpZGVNZXNzYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93QmFubmVyLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,32 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ /** The base config service */
5
+ export class BaseConfigService {
6
+ /** Gets the configurations */
7
+ get config() {
8
+ return this.configBs.value;
9
+ }
10
+ /**
11
+ * sets the configs
12
+ * @param value The new configuration value
13
+ */
14
+ set config(value) {
15
+ this.configBs.next(value);
16
+ }
17
+ /** Constructs the service */
18
+ constructor() {
19
+ /** The configuration behavior subject */
20
+ this.configBs = new BehaviorSubject(undefined);
21
+ this.config$ = this.configBs.asObservable();
22
+ }
23
+ }
24
+ BaseConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
25
+ BaseConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseConfigService, providedIn: 'root' });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BaseConfigService, decorators: [{
27
+ type: Injectable,
28
+ args: [{
29
+ providedIn: 'root'
30
+ }]
31
+ }], ctorParameters: function () { return []; } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvY29yZS9zZXJ2aWNlcy9iYXNlLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFHbkQsOEJBQThCO0FBSTlCLE1BQU0sT0FBZ0IsaUJBQWlCO0lBS3JDLDhCQUE4QjtJQUM5QixJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLE1BQU0sQ0FBQyxLQUFRO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFLRCw2QkFBNkI7SUFDN0I7UUFwQkEseUNBQXlDO1FBQ3hCLGFBQVEsR0FBdUIsSUFBSSxlQUFlLENBQUksU0FBUyxDQUFDLENBQUM7UUFvQmhGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDOzs4R0F4Qm1CLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRnpCLE1BQU07MkZBRUUsaUJBQWlCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJhc2VDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvYmFzZS1jb25maWcnO1xyXG5cclxuLyoqIFRoZSBiYXNlIGNvbmZpZyBzZXJ2aWNlICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb25maWdTZXJ2aWNlPFQgPSBCYXNlQ29uZmlnPiB7XHJcblxyXG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiBiZWhhdmlvciBzdWJqZWN0ICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdCczogQmVoYXZpb3JTdWJqZWN0PFQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPih1bmRlZmluZWQpO1xyXG5cclxuICAvKiogR2V0cyB0aGUgY29uZmlndXJhdGlvbnMgKi9cclxuICBwdWJsaWMgZ2V0IGNvbmZpZygpOiBUIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ0JzLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0cyB0aGUgY29uZmlnc1xyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGNvbmZpZ3VyYXRpb24gdmFsdWVcclxuICAgKi9cclxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVCkge1xyXG4gICAgdGhpcy5jb25maWdCcy5uZXh0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiBvYnNlcnZhYmxlICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyQ6IE9ic2VydmFibGU8VD47XHJcblxyXG4gIC8qKiBDb25zdHJ1Y3RzIHRoZSBzZXJ2aWNlICovXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmNvbmZpZyQgPSB0aGlzLmNvbmZpZ0JzLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,4 @@
1
+ /** Custom Authorization Service */
2
+ export class CustomAuthConfigService {
3
+ }
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWF1dGgtY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9zcmMvbGliL2NvcmUvc2VydmljZXMvY3VzdG9tLWF1dGgtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsbUNBQW1DO0FBQ25DLE1BQU0sT0FBZ0IsdUJBQXVCO0NBRzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aENvbmZpZyB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5cclxuLyoqIEN1c3RvbSBBdXRob3JpemF0aW9uIFNlcnZpY2UgKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEN1c3RvbUF1dGhDb25maWdTZXJ2aWNlIHtcclxuICAvKiogQ29uZmlndXJlIEF1dGggU2V0dGluZ3MgKi9cclxuICBwdWJsaWMgYWJzdHJhY3QgY29uZmlndXJlQXV0aFNldHRpbmdzKCk6IFByb21pc2U8QXV0aENvbmZpZz5cclxufVxyXG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BaseConfigService } from './base-config.service';
3
+ import * as i0 from "@angular/core";
4
+ export class DefaultConfigService extends BaseConfigService {
5
+ /** Constructs the service */
6
+ constructor() {
7
+ super();
8
+ }
9
+ ;
10
+ }
11
+ DefaultConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DefaultConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
12
+ DefaultConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DefaultConfigService, providedIn: 'root' });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DefaultConfigService, decorators: [{
14
+ type: Injectable,
15
+ args: [{
16
+ providedIn: 'root'
17
+ }]
18
+ }], ctorParameters: function () { return []; } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL3NyYy9saWIvY29yZS9zZXJ2aWNlcy9kZWZhdWx0LWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBSzFELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFFekQsNkJBQTZCO0lBQzdCO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBQUEsQ0FBQzs7aUhBTFMsb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vYmFzZS1jb25maWcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWZhdWx0Q29uZmlnU2VydmljZSBleHRlbmRzIEJhc2VDb25maWdTZXJ2aWNlIHtcclxuXHJcbiAgLyoqIENvbnN0cnVjdHMgdGhlIHNlcnZpY2UgKi9cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfTtcclxufVxyXG4iXX0=
@@ -0,0 +1,385 @@
1
+ import { HttpHeaders } from '@angular/common/http';
2
+ import { Inject, Injectable, Optional } from '@angular/core';
3
+ import { BehaviorSubject, of } from 'rxjs';
4
+ import { switchMap, take } from 'rxjs/operators';
5
+ import { SESSION_CONFIG, WINDOW } from '../models/constants';
6
+ import { httpVerb } from '../models/http-verbs';
7
+ import { SessionConfig } from '../models/session-config';
8
+ import { newGuid } from '../functions/guid';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "angular-oauth2-oidc";
11
+ import * as i2 from "@angular/common/http";
12
+ import * as i3 from "../models/session-config";
13
+ /** the data store retrieve complete session key */
14
+ const dataStoreRetrieveCompleteSessionKey = 'dataStoreRetrieve';
15
+ /** The session service */
16
+ export class SessionService {
17
+ /** True if client side session management */
18
+ get isClientSessionManagement() {
19
+ return this.sessionConfig.sessionManagementImplementation === 'client';
20
+ }
21
+ /** True if server side session management */
22
+ get isServerSessionManagement() {
23
+ return this.sessionConfig.sessionManagementImplementation === 'server';
24
+ }
25
+ /** True if using browser local storage */
26
+ get useBrowserLocalStorage() {
27
+ return this.sessionConfig.browserStorageImplementation === 'local';
28
+ }
29
+ /** True if using browser session storage */
30
+ get useBrowserSessionStorage() {
31
+ return this.sessionConfig.browserStorageImplementation === 'session';
32
+ }
33
+ /** The session id */
34
+ get sessionId() {
35
+ if (!this._sessionId) {
36
+ this.isClientSessionManagement ? this.initClientSessionId() : this.initServerSessionId();
37
+ }
38
+ return this._sessionId;
39
+ }
40
+ /** gets the session */
41
+ get session() {
42
+ return this.sessionData.value;
43
+ }
44
+ /** sets the session */
45
+ set session(value) {
46
+ this.sessionData.next(value);
47
+ this.window.sessionStorage.setItem(this.sessionConfig.keyPath, this.encode(value));
48
+ }
49
+ /**
50
+ * Constructs the service
51
+ * @param sessionConfig The session configurations
52
+ * @param _window The window interface
53
+ * @param authService The OAuth odic 2 service
54
+ * @param httpClient The http client
55
+ */
56
+ constructor(sessionConfig, _window, authService, httpClient) {
57
+ this.sessionConfig = sessionConfig;
58
+ this._window = _window;
59
+ this.authService = authService;
60
+ this.httpClient = httpClient;
61
+ /** True when the data store retrieve is complete */
62
+ this.isDataStoreRetrieveComplete = false;
63
+ /** The local storage key */
64
+ this.storageKey = 'Sof-Arm-Session-Id';
65
+ /** Teh current update data store call */
66
+ this.currentUpdateDataStoreCall = of({});
67
+ /** The session data behavior subject */
68
+ this.sessionData = new BehaviorSubject(undefined);
69
+ /** True when the service has finished initializing */
70
+ this.isInitializedBs = new BehaviorSubject(false);
71
+ /** True if the data store is initialized */
72
+ this.isDataStoreInitBs = new BehaviorSubject(false);
73
+ /** True if data store is provided */
74
+ this.isDataStoreProvided = false;
75
+ this.isInitialized$ = this.isInitializedBs.asObservable();
76
+ this.isDataStoreInit$ = this.isDataStoreInitBs.asObservable();
77
+ if (!this.sessionConfig) {
78
+ this.sessionConfig = new SessionConfig();
79
+ }
80
+ this.isDataStoreProvided = !!this.sessionConfig?.dataStoreConfig;
81
+ this.window = _window;
82
+ if (!this.window) {
83
+ this.window = window;
84
+ }
85
+ const dataStoreLoadedValue = this.window.sessionStorage.getItem(dataStoreRetrieveCompleteSessionKey);
86
+ this.isDataStoreRetrieveComplete = !!dataStoreLoadedValue ? dataStoreLoadedValue.toLowerCase() === 'true' : false;
87
+ // if not using a data store, update the initialized to true for it
88
+ if (!this.isDataStoreProvided) {
89
+ this.isDataStoreInitBs.next(true);
90
+ }
91
+ if (!this.sessionConfig?.browserStorageImplementation) {
92
+ this.sessionConfig.browserStorageImplementation = 'session';
93
+ }
94
+ if (!this.sessionConfig?.sessionManagementImplementation) {
95
+ this.sessionConfig.sessionManagementImplementation = 'client';
96
+ }
97
+ if (this.isServerSessionManagement && !this.sessionConfig) {
98
+ throw new Error('Cannot user server session management with null sessionConfig please provide: GlobalInjectionTokens.sessionConfig');
99
+ }
100
+ if (this.isClientSessionManagement) {
101
+ this.initClientSessionManagement();
102
+ return;
103
+ }
104
+ this.initServerSessionManagement();
105
+ }
106
+ /**
107
+ * Redirects to a url with a ref to the existing session
108
+ * @param uri The uri to redirect to
109
+ * @param syncSession Sync session.
110
+ * @param configs Redirect configs.
111
+ */
112
+ redirect(uri, syncSession = false, configs = {}) {
113
+ // if the host name isn't in the uri, we are going to a different domain, so use the gateway on the other domain's server
114
+ let formAction = `${this.sessionConfig.transferBasePath}/ssogateway/v2/sso/inbound-transfer/${this.sessionConfig.keyPath}`;
115
+ if (uri.indexOf(window.location.hostname) === -1) {
116
+ const uriParts = uri.split('/');
117
+ // this results in ['https:', '', 'domain.host'], use 0 and 2 to get the base url of the redirect uri
118
+ formAction = `${uriParts[0]}//${uriParts[2]}/ssogateway/v2/sso/inbound-transfer/${this.sessionConfig.keyPath}`;
119
+ }
120
+ const form = document.createElement('form');
121
+ const input = document.createElement('input');
122
+ const inputDestination = document.createElement('input');
123
+ form.method = 'POST';
124
+ form.action = formAction;
125
+ if (configs.targetNewTab) {
126
+ // The parent session should already be present in child window as per browsing context rules, but for whatever reason form.target = '_blank' does not do that.
127
+ // Need to use window.open here so the parent window's session also gets carried over to the new tab.
128
+ // For reference: https://stackoverflow.com/questions/17297287/sessionstorage-on-new-window-isnt-empty-when-following-a-link-with-target-bl
129
+ form.target = 'customWindow';
130
+ window.open('', 'customWindow');
131
+ }
132
+ input.name = 'data';
133
+ input.value = this.window.sessionStorage.getItem(this.sessionConfig.keyPath);
134
+ inputDestination.name = 'destination';
135
+ inputDestination.value = uri;
136
+ form.appendChild(input);
137
+ form.appendChild(inputDestination);
138
+ document.body.appendChild(form);
139
+ form.submit();
140
+ }
141
+ /**
142
+ * Updates the session
143
+ * @param body The session put request body
144
+ */
145
+ updateSession(body, securableDelegate, skipDataStore) {
146
+ if (!this._sessionId) {
147
+ console.error('No session has been initialized, skipping update call');
148
+ return undefined;
149
+ }
150
+ if (!securableDelegate) {
151
+ throw new Error('SessionService:updateSession -> Argument is null or undefined, arg: securableDelegate');
152
+ }
153
+ if (Array.isArray(body.sessionData) && !Array.isArray(securableDelegate)) {
154
+ throw new Error('SessionService:updateSession -> Type miss match, arg: body.SessionData (type of Array) and arg: securableDelegate (type of (arg: any) => any) both must be array or non-array');
155
+ }
156
+ if (!Array.isArray(body.sessionData) && Array.isArray(securableDelegate)) {
157
+ throw new Error('SessionService:updateSession -> Type miss match, arg: body.SessionData (type of any) and arg: securableDelegate (type of Array) both must be array or non-array');
158
+ }
159
+ // create response model and update observable to emit new session value
160
+ const model = {
161
+ initializingOrigin: body.initializingOrigin,
162
+ branding: body.branding,
163
+ oAuth: body.oAuth,
164
+ sessionId: this._sessionId,
165
+ tracking: body.tracking,
166
+ sessionData: body.sessionData
167
+ };
168
+ this.session = model;
169
+ const putModel = {
170
+ initializingOrigin: body.initializingOrigin,
171
+ sessionData: (Array.isArray(body.sessionData)
172
+ ? body.sessionData.map((d, index) => securableDelegate[index](d)) : securableDelegate(body.sessionData)),
173
+ branding: body.branding,
174
+ tracking: body.tracking,
175
+ oAuth: body.oAuth
176
+ };
177
+ // if data store is provided run the delegate to determine the body and the uri to use for the update
178
+ if (this.isDataStoreProvided && !skipDataStore) {
179
+ const updateTuple = this.sessionConfig?.dataStoreConfig.updateRequestDelegate(this.sessionConfig?.dataStoreConfig.baseUri, body.sessionData);
180
+ // switch map to cancel existing calls with newer ones to avoid reverting data
181
+ if (this.sessionConfig?.dataStoreConfig.shouldUpdateDataStoreDelegate(body.sessionData)) {
182
+ this.currentUpdateDataStoreCall.pipe(switchMap(() => {
183
+ switch (this.sessionConfig?.dataStoreConfig.updateVerb) {
184
+ case httpVerb.POST:
185
+ return this.httpClient.post(updateTuple.uri, updateTuple.body);
186
+ case httpVerb.PUT:
187
+ default:
188
+ return this.httpClient.put(updateTuple.uri, updateTuple.body);
189
+ }
190
+ }))
191
+ .subscribe(() => {
192
+ this.isDataStoreRetrieveComplete = true;
193
+ this.window.sessionStorage.setItem(dataStoreRetrieveCompleteSessionKey, 'true');
194
+ });
195
+ }
196
+ }
197
+ return this.session$;
198
+ }
199
+ /** Removes the session */
200
+ removeSession() {
201
+ this.sessionData.next(undefined);
202
+ this.window.sessionStorage.removeItem(dataStoreRetrieveCompleteSessionKey);
203
+ this.window.sessionStorage.removeItem(this.sessionConfig.keyPath);
204
+ }
205
+ /**
206
+ * @deprecated removing in the next version
207
+ * Syncs the session
208
+ * Returns the observable indicating when the session has been synced
209
+ */
210
+ syncSession() {
211
+ return of(true);
212
+ }
213
+ /**
214
+ * @deprecated removing in the next version
215
+ * Refreshes the session
216
+ */
217
+ refreshSession() {
218
+ }
219
+ /** Initialize server session management */
220
+ initServerSessionManagement() {
221
+ this.session$ = this.sessionData.asObservable();
222
+ const getFromDataStore = () => {
223
+ if (!this.sessionConfig?.dataStoreConfig || !this.authService || this.isDataStoreRetrieveComplete) {
224
+ return;
225
+ }
226
+ // load data from data store anon
227
+ const loadDataStore = () => this.determineDataStoreFunction(this.sessionConfig?.dataStoreConfig.retrieveVerb, this.sessionConfig?.dataStoreConfig.retrieveRequestDelegate, this.sessionConfig?.dataStoreConfig.baseUri, undefined)
228
+ .subscribe(res => {
229
+ this.isInitialized$.subscribe(isInit => {
230
+ if (!isInit) {
231
+ return;
232
+ }
233
+ this.session$.pipe(take(1))
234
+ .subscribe(ses => {
235
+ this.updateSession(this.sessionConfig?.dataStoreConfig.retrieveResponseDelegate(res, ses), this.sessionConfig?.dataStoreConfig.retrieveSecurableDelegate(res), true);
236
+ this.isDataStoreInitBs.next(true);
237
+ this.isDataStoreRetrieveComplete = true;
238
+ this.window.sessionStorage.setItem(dataStoreRetrieveCompleteSessionKey, 'true');
239
+ });
240
+ });
241
+ });
242
+ if (!this.authService.hasValidAccessToken()) {
243
+ // HACK: I couldn't do this based on an event so I had to get creative
244
+ const interval = setInterval(() => {
245
+ if (this.authService.hasValidAccessToken()) {
246
+ loadDataStore();
247
+ clearInterval(interval);
248
+ }
249
+ }, 250);
250
+ }
251
+ else {
252
+ return loadDataStore();
253
+ }
254
+ };
255
+ const body = {
256
+ sessionData: undefined,
257
+ branding: undefined
258
+ };
259
+ const encodedSession = this.window.sessionStorage.getItem(this.sessionConfig.keyPath);
260
+ this._sessionId = `Session-${newGuid()}`;
261
+ if (!encodedSession) {
262
+ this.session = body;
263
+ this.isInitializedBs.next(true);
264
+ getFromDataStore();
265
+ }
266
+ else {
267
+ this.session = this.decode(encodedSession);
268
+ this.isInitializedBs.next(true);
269
+ getFromDataStore();
270
+ }
271
+ }
272
+ /** Initializes the server side session id */
273
+ initServerSessionId() {
274
+ if (!this._sessionId) {
275
+ console.warn('Session Initializing, subscribe to session$ to get the session info. Session Id will be populated upon initialization');
276
+ return;
277
+ }
278
+ }
279
+ /** Initializes client side session management */
280
+ initClientSessionManagement() {
281
+ if (this.useBrowserSessionStorage) {
282
+ const sesId = this.window.sessionStorage.getItem(this.storageKey);
283
+ this._sessionId = sesId || newGuid();
284
+ this.setSessionStorage();
285
+ }
286
+ else if (this.useBrowserLocalStorage) {
287
+ const sesId = this.window.localStorage.getItem(this.storageKey);
288
+ this._sessionId = sesId || newGuid();
289
+ this.setLocalStorage();
290
+ }
291
+ this.isInitializedBs.next(true);
292
+ }
293
+ getSessionIdFromStorage() {
294
+ if (this.useBrowserLocalStorage) {
295
+ return this.window.localStorage.getItem(this.storageKey);
296
+ }
297
+ else if (this.useBrowserSessionStorage) {
298
+ return this.window.sessionStorage.getItem(this.storageKey);
299
+ }
300
+ }
301
+ /** Initialize the client side session id */
302
+ initClientSessionId() {
303
+ this._sessionId = newGuid();
304
+ if (this.useBrowserSessionStorage) {
305
+ this.setSessionStorage();
306
+ }
307
+ else if (this.useBrowserLocalStorage) {
308
+ this.setLocalStorage();
309
+ }
310
+ }
311
+ /** Sets session storage */
312
+ setSessionStorage() {
313
+ this.window.sessionStorage.setItem(this.storageKey, this._sessionId);
314
+ }
315
+ /** Sets local storage */
316
+ setLocalStorage() {
317
+ this.window.localStorage.setItem(this.storageKey, this._sessionId);
318
+ }
319
+ /**
320
+ * Determines the type of http call to make for the data store
321
+ * @param verb The verb
322
+ * @param delegate The delegate
323
+ * @param uri The uri
324
+ */
325
+ determineDataStoreFunction(verb, delegate, uri, body) {
326
+ const tuple = delegate(uri, body);
327
+ const headers = new HttpHeaders({
328
+ 'Content-Type': 'application/json'
329
+ });
330
+ switch (verb) {
331
+ case httpVerb.PUT:
332
+ return this.httpClient.put(tuple.uri, tuple.body, { headers });
333
+ case httpVerb.POST:
334
+ return this.httpClient.post(tuple.uri, tuple.body, { headers });
335
+ case httpVerb.GET:
336
+ return this.httpClient.get(tuple.uri, { headers });
337
+ case httpVerb.PATCH:
338
+ return this.httpClient.patch(tuple.uri, tuple.body, { headers });
339
+ case httpVerb.DELETE:
340
+ return this.httpClient.delete(tuple.uri, { headers });
341
+ default:
342
+ throw new Error('Http verb must be one of: PATCH, PUT, POST, DELETE, GET');
343
+ }
344
+ }
345
+ /**
346
+ * Encodes the object
347
+ * @param value The object
348
+ */
349
+ encode(value) {
350
+ return window.btoa(unescape(encodeURIComponent(JSON.stringify(value))));
351
+ }
352
+ /**
353
+ * Decodes the string
354
+ * @param str The string
355
+ */
356
+ decode(str) {
357
+ return JSON.parse(decodeURIComponent(escape(window.atob(str))));
358
+ }
359
+ }
360
+ SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SessionService, deps: [{ token: SESSION_CONFIG, optional: true }, { token: WINDOW, optional: true }, { token: i1.OAuthService, optional: true }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
361
+ SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SessionService, providedIn: 'root' });
362
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: SessionService, decorators: [{
363
+ type: Injectable,
364
+ args: [{
365
+ providedIn: 'root'
366
+ }]
367
+ }], ctorParameters: function () { return [{ type: i3.SessionConfig, decorators: [{
368
+ type: Optional
369
+ }, {
370
+ type: Inject,
371
+ args: [SESSION_CONFIG]
372
+ }] }, { type: undefined, decorators: [{
373
+ type: Optional
374
+ }, {
375
+ type: Inject,
376
+ args: [WINDOW]
377
+ }] }, { type: i1.OAuthService, decorators: [{
378
+ type: Optional
379
+ }] }, { type: i2.HttpClient }]; } });
380
+ /**
381
+ * Redirect Session Configs.
382
+ */
383
+ export class RedirectSessionConfigs {
384
+ }
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJtYXR1cmUvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL3Nlc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RCxPQUFPLEVBQVksUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFFNUMsbURBQW1EO0FBQ25ELE1BQU0sbUNBQW1DLEdBQUcsbUJBQW1CLENBQUM7QUFFaEUsMEJBQTBCO0FBSTFCLE1BQU0sT0FBTyxjQUFjO0lBdUJ6Qiw2Q0FBNkM7SUFDN0MsSUFBWSx5QkFBeUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLCtCQUErQixLQUFLLFFBQVEsQ0FBQztJQUN6RSxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLElBQVkseUJBQXlCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQywrQkFBK0IsS0FBSyxRQUFRLENBQUM7SUFDekUsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxJQUFZLHNCQUFzQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMs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S0FBSyxRQUFRLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN4RDtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7U0FDOUU7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLEtBQVU7UUFDdkIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxNQUFNLENBQUMsR0FBVztRQUN4QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7MkdBeGFVLGNBQWMsa0JBeUZILGNBQWMsNkJBQ2QsTUFBTTsrR0ExRmpCLGNBQWMsY0FGYixNQUFNOzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkEwRkksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFDakMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxNQUFNOzswQkFDekIsUUFBUTs7QUFnVmI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0NBTWxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uUG9zdFJlcXVlc3RNb2RlbCwgU2Vzc2lvblB1dFJlcXVlc3RNb2RlbCwgU2Vzc2lvblJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9jbGllbnQtZ2VuZXJhdGVkL21vZGVsL21vZGVscyc7XHJcbmltcG9ydCB7IFNFU1NJT05fQ09ORklHLCBXSU5ET1cgfSBmcm9tICcuLi9tb2RlbHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgSHR0cFZlcmIsIGh0dHBWZXJiIH0gZnJvbSAnLi4vbW9kZWxzL2h0dHAtdmVyYnMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL3Nlc3Npb24tY29uZmlnJztcclxuaW1wb3J0IHsgVHlwZWRTZXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGVkLXNlc3Npb24nO1xyXG5pbXBvcnQgeyBuZXdHdWlkIH0gZnJvbSAnLi4vZnVuY3Rpb25zL2d1aWQnO1xyXG5cclxuLyoqIHRoZSBkYXRhIHN0b3JlIHJldHJpZXZlIGNvbXBsZXRlIHNlc3Npb24ga2V5ICovXHJcbmNvbnN0IGRhdGFTdG9yZVJldHJpZXZlQ29tcGxldGVTZXNzaW9uS2V5ID0gJ2RhdGFTdG9yZVJldHJpZXZlJztcclxuXHJcbi8qKiBUaGUgc2Vzc2lvbiBzZXJ2aWNlICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlc3Npb25TZXJ2aWNlPFQgPSBhbnk+IHtcclxuXHJcbiAgLyoqIFRoZSBzZXNzaW9uIGlkICovXHJcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBUcnVlIHdoZW4gdGhlIGRhdGEgc3RvcmUgcmV0cmlldmUgaXMgY29tcGxldGUgKi9cclxuICBwcml2YXRlIGlzRGF0YVN0b3JlUmV0cmlldmVDb21wbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogVGhlIGxvY2FsIHN0b3JhZ2Uga2V5ICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlS2V5OiBzdHJpbmcgPSAnU29mLUFybS1TZXNzaW9uLUlkJztcclxuXHJcbiAgLyoqIFRlaCBjdXJyZW50IHVwZGF0ZSBkYXRhIHN0b3JlIGNhbGwgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRVcGRhdGVEYXRhU3RvcmVDYWxsOiBPYnNlcnZhYmxlPGFueT4gPSBvZih7fSk7XHJcblxyXG4gIC8qKiBUaGUgc2Vzc2lvbiBkYXRhIGJlaGF2aW9yIHN1YmplY3QgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25EYXRhOiBCZWhhdmlvclN1YmplY3Q8VHlwZWRTZXNzaW9uPFQ+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHlwZWRTZXNzaW9uPFQ+Pih1bmRlZmluZWQpO1xyXG5cclxuICAvKiogVHJ1ZSB3aGVuIHRoZSBzZXJ2aWNlIGhhcyBmaW5pc2hlZCBpbml0aWFsaXppbmcgKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWRCczogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBUcnVlIGlmIHRoZSBkYXRhIHN0b3JlIGlzIGluaXRpYWxpemVkICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc0RhdGFTdG9yZUluaXRCczogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8qKiBUcnVlIGlmIGNsaWVudCBzaWRlIHNlc3Npb24gbWFuYWdlbWVudCAqL1xyXG4gIHByaXZhdGUgZ2V0IGlzQ2xpZW50U2Vzc2lvbk1hbmFnZW1lbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29uZmlnLnNlc3Npb25NYW5hZ2VtZW50SW1wbGVtZW50YXRpb24gPT09ICdjbGllbnQnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgaWYgc2VydmVyIHNpZGUgc2Vzc2lvbiBtYW5hZ2VtZW50ICovXHJcbiAgcHJpdmF0ZSBnZXQgaXNTZXJ2ZXJTZXNzaW9uTWFuYWdlbWVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25Db25maWcuc2Vzc2lvbk1hbmFnZW1lbnRJbXBsZW1lbnRhdGlvbiA9PT0gJ3NlcnZlcic7XHJcbiAgfVxyXG5cclxuICAvKiogVHJ1ZSBpZiB1c2luZyBicm93c2VyIGxvY2FsIHN0b3JhZ2UgKi9cclxuICBwcml2YXRlIGdldCB1c2VCcm93c2VyTG9jYWxTdG9yYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkNvbmZpZy5icm93c2VyU3RvcmFnZUltcGxlbWVudGF0aW9uID09PSAnbG9jYWwnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgaWYgdXNpbmcgYnJvd3NlciBzZXNzaW9uIHN0b3JhZ2UgKi9cclxuICBwcml2YXRlIGdldCB1c2VCcm93c2VyU2Vzc2lvblN0b3JhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29uZmlnLmJyb3dzZXJTdG9yYWdlSW1wbGVtZW50YXRpb24gPT09ICdzZXNzaW9uJztcclxuICB9XHJcblxyXG4gIC8qKiBUaGUgd2luZG93ICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3c6IFdpbmRvdztcclxuXHJcbiAgLyoqIFRydWUgaWYgZGF0YSBzdG9yZSBpcyBwcm92aWRlZCAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNEYXRhU3RvcmVQcm92aWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogVGhlIHNlc3Npb24gaWQgKi9cclxuICBwdWJsaWMgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9zZXNzaW9uSWQpIHtcclxuICAgICAgdGhpcy5pc0NsaWVudFNlc3Npb25NYW5hZ2VtZW50ID8gdGhpcy5pbml0Q2xpZW50U2Vzc2lvbklkKCkgOiB0aGlzLmluaXRTZXJ2ZXJTZXNzaW9uSWQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSBzZXNzaW9uICovXHJcbiAgcHVibGljIHNlc3Npb24kOiBPYnNlcnZhYmxlPFR5cGVkU2Vzc2lvbjxUPj47XHJcblxyXG4gIC8qKiBUaGUgc2Vzc2lvbiByZWZyZXNoIG9ic2VydmFibGUgKi9cclxuICBwdWJsaWMgc2Vzc2lvblJlZnJlc2gkOiBPYnNlcnZhYmxlPGFueT47XHJcblxyXG4gIC8qKiBJbmRpY2F0ZXMgd2hlbiB0aGUgc2VydmljZSBoYXMgZmluaXNoZWQgaW5pdGlhbGl6aW5nICovXHJcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAvKiogVHJ1ZSBpZiB0aGUgZGF0YSBzdG9yZSBpcyBpbml0aWFsaXplZCAqL1xyXG4gIHB1YmxpYyBpc0RhdGFTdG9yZUluaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAvKiogZ2V0cyB0aGUgc2Vzc2lvbiAqL1xyXG4gIHB1YmxpYyBnZXQgc2Vzc2lvbigpOiBUeXBlZFNlc3Npb248VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkRhdGEudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKiogc2V0cyB0aGUgc2Vzc2lvbiAqL1xyXG4gIHB1YmxpYyBzZXQgc2Vzc2lvbih2YWx1ZTogVHlwZWRTZXNzaW9uPFQ+KSB7XHJcbiAgICB0aGlzLnNlc3Npb25EYXRhLm5leHQodmFsdWUpO1xyXG4gICAgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnNlc3Npb25Db25maWcua2V5UGF0aCwgdGhpcy5lbmNvZGUodmFsdWUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdHMgdGhlIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gc2Vzc2lvbkNvbmZpZyBUaGUgc2Vzc2lvbiBjb25maWd1cmF0aW9uc1xyXG4gICAqIEBwYXJhbSBfd2luZG93IFRoZSB3aW5kb3cgaW50ZXJmYWNlXHJcbiAgICogQHBhcmFtIGF1dGhTZXJ2aWNlIFRoZSBPQXV0aCBvZGljIDIgc2VydmljZVxyXG4gICAqIEBwYXJhbSBodHRwQ2xpZW50IFRoZSBodHRwIGNsaWVudFxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTRVNTSU9OX0NPTkZJRykgcmVhZG9ubHkgc2Vzc2lvbkNvbmZpZzogU2Vzc2lvbkNvbmZpZyxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoV0lORE9XKSByZWFkb25seSBfd2luZG93OiBhbnksXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnRcclxuICApIHtcclxuICAgIHRoaXMuaXNJbml0aWFsaXplZCQgPSB0aGlzLmlzSW5pdGlhbGl6ZWRCcy5hc09ic2VydmFibGUoKTtcclxuICAgIHRoaXMuaXNEYXRhU3RvcmVJbml0JCA9IHRoaXMuaXNEYXRhU3RvcmVJbml0QnMuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbkNvbmZpZykge1xyXG4gICAgICB0aGlzLnNlc3Npb25Db25maWcgPSBuZXcgU2Vzc2lvbkNvbmZpZygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0RhdGFTdG9yZVByb3ZpZGVkID0gISF0aGlzLnNlc3Npb25Db25maWc/LmRhdGFTdG9yZUNvbmZpZztcclxuICAgIHRoaXMud2luZG93ID0gX3dpbmRvdztcclxuICAgIGlmICghdGhpcy53aW5kb3cpIHtcclxuICAgICAgdGhpcy53aW5kb3cgPSB3aW5kb3c7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhU3RvcmVMb2FkZWRWYWx1ZSA9IHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YVN0b3JlUmV0cmlldmVDb21wbGV0ZVNlc3Npb25LZXkpO1xyXG4gICAgdGhpcy5pc0RhdGFTdG9yZVJldHJpZXZlQ29tcGxldGUgPSAhIWRhdGFTdG9yZUxvYWRlZFZhbHVlID8gZGF0YVN0b3JlTG9hZGVkVmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnIDogZmFsc2U7XHJcbiAgICAvLyBpZiBub3QgdXNpbmcgYSBkYXRhIHN0b3JlLCB1cGRhdGUgdGhlIGluaXRpYWxpemVkIHRvIHRydWUgZm9yIGl0XHJcbiAgICBpZiAoIXRoaXMuaXNEYXRhU3RvcmVQcm92aWRlZCkge1xyXG4gICAgICB0aGlzLmlzRGF0YVN0b3JlSW5pdEJzLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuc2Vzc2lvbkNvbmZpZz8uYnJvd3NlclN0b3JhZ2VJbXBsZW1lbnRhdGlvbikge1xyXG4gICAgICB0aGlzLnNlc3Npb25Db25maWcuYnJvd3NlclN0b3JhZ2VJbXBsZW1lbnRhdGlvbiA9ICdzZXNzaW9uJztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zZXNzaW9uQ29uZmlnPy5zZXNzaW9uTWFuYWdlbWVudEltcGxlbWVudGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuc2Vzc2lvbkNvbmZpZy5zZXNzaW9uTWFuYWdlbWVudEltcGxlbWVudGF0aW9uID0gJ2NsaWVudCc7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1NlcnZlclNlc3Npb25NYW5hZ2VtZW50ICYmICF0aGlzLnNlc3Npb25Db25maWcpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlciBzZXJ2ZXIgc2Vzc2lvbiBtYW5hZ2VtZW50IHdpdGggbnVsbCBzZXNzaW9uQ29uZmlnIHBsZWFzZSBwcm92aWRlOiBHbG9iYWxJbmplY3Rpb25Ub2tlbnMuc2Vzc2lvbkNvbmZpZycpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNDbGllbnRTZXNzaW9uTWFuYWdlbWVudCkge1xyXG4gICAgICB0aGlzLmluaXRDbGllbnRTZXNzaW9uTWFuYWdlbWVudCgpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdFNlcnZlclNlc3Npb25NYW5hZ2VtZW50KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWRpcmVjdHMgdG8gYSB1cmwgd2l0aCBhIHJlZiB0byB0aGUgZXhpc3Rpbmcgc2Vzc2lvblxyXG4gICAqIEBwYXJhbSB1cmkgVGhlIHVyaSB0byByZWRpcmVjdCB0b1xyXG4gICAqIEBwYXJhbSBzeW5jU2Vzc2lvbiBTeW5jIHNlc3Npb24uXHJcbiAgICogQHBhcmFtIGNvbmZpZ3MgUmVkaXJlY3QgY29uZmlncy5cclxuICAgKi9cclxuICBwdWJsaWMgcmVkaXJlY3QodXJpOiBzdHJpbmcsIHN5bmNTZXNzaW9uOiBib29sZWFuID0gZmFsc2UsIGNvbmZpZ3M6IFJlZGlyZWN0U2Vzc2lvbkNvbmZpZ3MgPSB7fSk6IHZvaWQge1xyXG4gICAgLy8gaWYgdGhlIGhvc3QgbmFtZSBpc24ndCBpbiB0aGUgdXJpLCB3ZSBhcmUgZ29pbmcgdG8gYSBkaWZmZXJlbnQgZG9tYWluLCBzbyB1c2UgdGhlIGdhdGV3YXkgb24gdGhlIG90aGVyIGRvbWFpbidzIHNlcnZlclxyXG4gICAgbGV0IGZvcm1BY3Rpb24gPSBgJHt0aGlzLnNlc3Npb25Db25maWcudHJhbnNmZXJCYXNlUGF0aH0vc3NvZ2F0ZXdheS92Mi9zc28vaW5ib3VuZC10cmFuc2Zlci8ke3RoaXMuc2Vzc2lvbkNvbmZpZy5rZXlQYXRofWA7XHJcbiAgICBpZiAodXJpLmluZGV4T2Yod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKSA9PT0gLTEpIHtcclxuICAgICAgY29uc3QgdXJpUGFydHMgPSB1cmkuc3BsaXQoJy8nKTtcclxuICAgICAgLy8gdGhpcyByZXN1bHRzIGluIFsnaHR0cHM6JywgJycsICdkb21haW4uaG9zdCddLCB1c2UgMCBhbmQgMiB0byBnZXQgdGhlIGJhc2UgdXJsIG9mIHRoZSByZWRpcmVjdCB1cmlcclxuICAgICAgZm9ybUFjdGlvbiA9IGAke3VyaVBhcnRzWzBdfS8vJHt1cmlQYXJ0c1syXX0vc3NvZ2F0ZXdheS92Mi9zc28vaW5ib3VuZC10cmFuc2Zlci8ke3RoaXMuc2Vzc2lvbkNvbmZpZy5rZXlQYXRofWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xyXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgY29uc3QgaW5wdXREZXN0aW5hdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICBmb3JtLm1ldGhvZCA9ICdQT1NUJztcclxuICAgIGZvcm0uYWN0aW9uID0gZm9ybUFjdGlvbjtcclxuICAgIGlmIChjb25maWdzLnRhcmdldE5ld1RhYikge1xyXG4gICAgICAvLyBUaGUgcGFyZW50IHNlc3Npb24gc2hvdWxkIGFscmVhZHkgYmUgcHJlc2VudCBpbiBjaGlsZCB3aW5kb3cgYXMgcGVyIGJyb3dzaW5nIGNvbnRleHQgcnVsZXMsIGJ1dCBmb3Igd2hhdGV2ZXIgcmVhc29uIGZvcm0udGFyZ2V0ID0gJ19ibGFuaycgZG9lcyBub3QgZG8gdGhhdC5cclxuICAgICAgLy8gTmVlZCB0byB1c2Ugd2luZG93Lm9wZW4gaGVyZSBzbyB0aGUgcGFyZW50IHdpbmRvdydzIHNlc3Npb24gYWxzbyBnZXRzIGNhcnJpZWQgb3ZlciB0byB0aGUgbmV3IHRhYi5cclxuICAgICAgLy8gRm9yIHJlZmVyZW5jZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTcyOTcyODcvc2Vzc2lvbnN0b3JhZ2Utb24tbmV3LXdpbmRvdy1pc250LWVtcHR5LXdoZW4tZm9sbG93aW5nLWEtbGluay13aXRoLXRhcmdldC1ibFxyXG4gICAgICBmb3JtLnRhcmdldCA9ICdjdXN0b21XaW5kb3cnO1xyXG4gICAgICB3aW5kb3cub3BlbignJywgJ2N1c3RvbVdpbmRvdycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlucHV0Lm5hbWUgPSAnZGF0YSc7XHJcbiAgICBpbnB1dC52YWx1ZSA9IHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zZXNzaW9uQ29uZmlnLmtleVBhdGgpO1xyXG4gICAgaW5wdXREZXN0aW5hdGlvbi5uYW1lID0gJ2Rlc3RpbmF0aW9uJztcclxuICAgIGlucHV0RGVzdGluYXRpb24udmFsdWUgPSB1cmk7XHJcbiAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcclxuICAgIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXREZXN0aW5hdGlvbik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xyXG4gICAgZm9ybS5zdWJtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHNlc3Npb25cclxuICAgKiBAcGFyYW0gYm9keSBUaGUgc2Vzc2lvbiBwdXQgcmVxdWVzdCBib2R5XHJcbiAgICovXHJcbiAgcHVibGljIHVwZGF0ZVNlc3Npb24oXHJcbiAgICBib2R5OiBUeXBlZFNlc3Npb248VD4sXHJcbiAgICBzZWN1cmFibGVEZWxlZ2F0ZTogQXJyYXk8KGFyZzogYW55KSA9PiBhbnk+IHwgKChhcmc6IGFueSkgPT4gYW55KSxcclxuICAgIHNraXBEYXRhU3RvcmU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICghdGhpcy5fc2Vzc2lvbklkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlc3Npb24gaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIHNraXBwaW5nIHVwZGF0ZSBjYWxsJyk7XHJcblxyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzZWN1cmFibGVEZWxlZ2F0ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb25TZXJ2aWNlOnVwZGF0ZVNlc3Npb24gLT4gQXJndW1lbnQgaXMgbnVsbCBvciB1bmRlZmluZWQsIGFyZzogc2VjdXJhYmxlRGVsZWdhdGUnKTtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGJvZHkuc2Vzc2lvbkRhdGEpICYmICFBcnJheS5pc0FycmF5KHNlY3VyYWJsZURlbGVnYXRlKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ1Nlc3Npb25TZXJ2aWNlOnVwZGF0ZVNlc3Npb24gLT4gVHlwZSBtaXNzIG1hdGNoLCBhcmc6IGJvZHkuU2Vzc2lvbkRhdGEgKHR5cGUgb2YgQXJyYXkpIGFuZCBhcmc6IHNlY3VyYWJsZURlbGVnYXRlICh0eXBlIG9mIChhcmc6IGFueSkgPT4gYW55KSBib3RoIG11c3QgYmUgYXJyYXkgb3Igbm9uLWFycmF5J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJvZHkuc2Vzc2lvbkRhdGEpICYmIEFycmF5LmlzQXJyYXkoc2VjdXJhYmxlRGVsZWdhdGUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnU2Vzc2lvblNlcnZpY2U6dXBkYXRlU2Vzc2lvbiAtPiBUeXBlIG1pc3MgbWF0Y2gsIGFyZzogYm9keS5TZXNzaW9uRGF0YSAodHlwZSBvZiBhbnkpIGFuZCBhcmc6IHNlY3VyYWJsZURlbGVnYXRlICh0eXBlIG9mIEFycmF5KSAgYm90aCBtdXN0IGJlIGFycmF5IG9yIG5vbi1hcnJheSdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIGNyZWF0ZSByZXNwb25zZSBtb2RlbCBhbmQgdXBkYXRlIG9ic2VydmFibGUgdG8gZW1pdCBuZXcgc2Vzc2lvbiB2YWx1ZVxyXG4gICAgY29uc3QgbW9kZWw6IFNlc3Npb25SZXNwb25zZU1vZGVsID0ge1xyXG4gICAgICBpbml0aWFsaXppbmdPcmlnaW46IGJvZHkuaW5pdGlhbGl6aW5nT3JpZ2luLFxyXG4gICAgICBicmFuZGluZzogYm9keS5icmFuZGluZyxcclxuICAgICAgb0F1dGg6IGJvZHkub0F1dGgsXHJcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fc2Vzc2lvbklkLFxyXG4gICAgICB0cmFja2luZzogYm9keS50cmFja2luZyxcclxuICAgICAgc2Vzc2lvbkRhdGE6IGJvZHkuc2Vzc2lvbkRhdGFcclxuICAgIH07XHJcbiAgICB0aGlzLnNlc3Npb24gPSBtb2RlbDtcclxuXHJcbiAgICBjb25zdCBwdXRNb2RlbDogU2Vzc2lvblB1dFJlcXVlc3RNb2RlbCA9IHtcclxuICAgICAgaW5pdGlhbGl6aW5nT3JpZ2luOiBib2R5LmluaXRpYWxpemluZ09yaWdpbixcclxuICAgICAgc2Vzc2lvbkRhdGE6XHJcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoYm9keS5zZXNzaW9uRGF0YSlcclxuICAgICAgICAgID8gYm9keS5zZXNzaW9uRGF0YS5tYXAoKGQsIGluZGV4KSA9PiBzZWN1cmFibGVEZWxlZ2F0ZVtpbmRleF0oZCkpIDogKHNlY3VyYWJsZURlbGVnYXRlIGFzICgoYXJnOiBhbnkpID0+IGFueSkpKGJvZHkuc2Vzc2lvbkRhdGEpKSxcclxuICAgICAgYnJhbmRpbmc6IGJvZHkuYnJhbmRpbmcsXHJcbiAgICAgIHRyYWNraW5nOiBib2R5LnRyYWNraW5nLFxyXG4gICAgICBvQXV0aDogYm9keS5vQXV0aFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBpZiBkYXRhIHN0b3JlIGlzIHByb3ZpZGVkIHJ1biB0aGUgZGVsZWdhdGUgdG8gZGV0ZXJtaW5lIHRoZSBib2R5IGFuZCB0aGUgdXJpIHRvIHVzZSBmb3IgdGhlIHVwZGF0ZVxyXG4gICAgaWYgKHRoaXMuaXNEYXRhU3RvcmVQcm92aWRlZCAmJiAhc2tpcERhdGFTdG9yZSkge1xyXG4gICAgICBjb25zdCB1cGRhdGVUdXBsZSA9XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uQ29uZmlnPy5kYXRhU3RvcmVDb25maWcudXBkYXRlUmVxdWVzdERlbGVnYXRlKHRoaXMuc2Vzc2lvbkNvbmZpZz8uZGF0YVN0b3JlQ29uZmlnLmJhc2VVcmksIGJvZHkuc2Vzc2lvbkRhdGEpO1xyXG4gICAgICAvLyBzd2l0Y2ggbWFwIHRvIGNhbmNlbCBleGlzdGluZyBjYWxscyB3aXRoIG5ld2VyIG9uZXMgdG8gYXZvaWQgcmV2ZXJ0aW5nIGRhdGFcclxuICAgICAgaWYgKHRoaXMuc2Vzc2lvbkNvbmZpZz8uZGF0YVN0b3JlQ29uZmlnLnNob3VsZFVwZGF0ZURhdGFTdG9yZURlbGVnYXRlKGJvZHkuc2Vzc2lvbkRhdGEpKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VXBkYXRlRGF0YVN0b3JlQ2FsbC5waXBlKHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2Vzc2lvbkNvbmZpZz8uZGF0YVN0b3JlQ29uZmlnLnVwZGF0ZVZlcmIpIHtcclxuICAgICAgICAgICAgY2FzZSBodHRwVmVyYi5QT1NUOlxyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdCh1cGRhdGVUdXBsZS51cmksIHVwZGF0ZVR1cGxlLmJvZHkpO1xyXG4gICAgICAgICAgICBjYXNlIGh0dHBWZXJiLlBVVDpcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnB1dCh1cGRhdGVUdXBsZS51cmksIHVwZGF0ZVR1cGxlLmJvZHkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhU3RvcmVSZXRyaWV2ZUNvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShkYXRhU3RvcmVSZXRyaWV2ZUNvbXBsZXRlU2Vzc2lvbktleSwgJ3RydWUnKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiQ7XHJcbiAgfVxyXG5cclxuICAvKiogUmVtb3ZlcyB0aGUgc2Vzc2lvbiAqL1xyXG4gIHB1YmxpYyByZW1vdmVTZXNzaW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXNzaW9uRGF0YS5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICB0aGlzLndpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGRhdGFTdG9yZVJldHJpZXZlQ29tcGxldGVTZXNzaW9uS2V5KTtcclxuICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5zZXNzaW9uQ29uZmlnLmtleVBhdGgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgcmVtb3ZpbmcgaW4gdGhlIG5leHQgdmVyc2lvblxyXG4gICAqIFN5bmNzIHRoZSBzZXNzaW9uXHJcbiAgICogUmV0dXJucyB0aGUgb2JzZXJ2YWJsZSBpbmRpY2F0aW5nIHdoZW4gdGhlIHNlc3Npb24gaGFzIGJlZW4gc3luY2VkXHJcbiAgICovXHJcbiAgcHVibGljIHN5bmNTZXNzaW9uKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCByZW1vdmluZyBpbiB0aGUgbmV4dCB2ZXJzaW9uXHJcbiAgICogUmVmcmVzaGVzIHRoZSBzZXNzaW9uXHJcbiAgICovXHJcbiAgcHVibGljIHJlZnJlc2hTZXNzaW9uKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLyoqIEluaXRpYWxpemUgc2VydmVyIHNlc3Npb24gbWFuYWdlbWVudCAqL1xyXG4gIHByaXZhdGUgaW5pdFNlcnZlclNlc3Npb25NYW5hZ2VtZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXNzaW9uJCA9IHRoaXMuc2Vzc2lvbkRhdGEuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgY29uc3QgZ2V0RnJvbURhdGFTdG9yZSA9ICgpOiBhbnkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvbkNvbmZpZz8uZGF0YVN0b3JlQ29uZmlnIHx8ICF0aGlzLmF1dGhTZXJ2aWNlIHx8IHRoaXMuaXNEYXRhU3RvcmVSZXRyaWV2ZUNvbXBsZXRlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsb2FkIGRhdGEgZnJvbSBkYXRhIHN0b3JlIGFub25cclxuICAgICAgY29uc3QgbG9hZERhdGFTdG9yZSA9ICgpID0+XHJcbiAgICAgICAgdGhpcy5kZXRlcm1pbmVEYXRhU3RvcmVGdW5jdGlvbih0aGlzLnNlc3Npb25Db25maWc/LmRhdGFTdG9yZUNvbmZpZy5yZXRyaWV2ZVZlcmIsXHJcbiAgICAgICAgICB0aGlzLnNlc3Npb25Db25maWc/LmRhdGFTdG9yZUNvbmZpZy5yZXRyaWV2ZVJlcXVlc3REZWxlZ2F0ZSxcclxuICAgICAgICAgIHRoaXMuc2Vzc2lvbkNvbmZpZz8uZGF0YVN0b3JlQ29uZmlnLmJhc2VVcmksXHJcbiAgICAgICAgICB1bmRlZmluZWQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCQuc3Vic2NyaWJlKGlzSW5pdCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpc0luaXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uJC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHNlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Vzc2lvbih0aGlzLnNlc3Npb25Db25maWc/LmRhdGFTdG9yZUNvbmZpZy5yZXRyaWV2ZVJlc3BvbnNlRGVsZWdhdGUocmVzLCBzZXMpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkNvbmZpZz8uZGF0YVN0b3JlQ29uZmlnLnJldHJpZXZlU2VjdXJhYmxlRGVsZWdhdGUocmVzKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhU3RvcmVJbml0QnMubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFTdG9yZVJldHJpZXZlQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLndpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGRhdGFTdG9yZVJldHJpZXZlQ29tcGxldGVTZXNzaW9uS2V5LCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgLy8gSEFDSzogSSBjb3VsZG4ndCBkbyB0aGlzIGJhc2VkIG9uIGFuIGV2ZW50IHNvIEkgaGFkIHRvIGdldCBjcmVhdGl2ZVxyXG4gICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGxvYWREYXRhU3RvcmUoKTtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMjUwKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbG9hZERhdGFTdG9yZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGJvZHk6IFNlc3Npb25Qb3N0UmVxdWVzdE1vZGVsID0ge1xyXG4gICAgICBzZXNzaW9uRGF0YTogdW5kZWZpbmVkLFxyXG4gICAgICBicmFuZGluZzogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGVuY29kZWRTZXNzaW9uID0gdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnNlc3Npb25Db25maWcua2V5UGF0aCk7XHJcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBgU2Vzc2lvbi0ke25ld0d1aWQoKX1gO1xyXG4gICAgaWYgKCFlbmNvZGVkU2Vzc2lvbikge1xyXG4gICAgICB0aGlzLnNlc3Npb24gPSBib2R5O1xyXG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWRCcy5uZXh0KHRydWUpO1xyXG4gICAgICBnZXRGcm9tRGF0YVN0b3JlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZXNzaW9uID0gdGhpcy5kZWNvZGUoZW5jb2RlZFNlc3Npb24pO1xyXG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWRCcy5uZXh0KHRydWUpO1xyXG4gICAgICBnZXRGcm9tRGF0YVN0b3JlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIHNlcnZlciBzaWRlIHNlc3Npb24gaWQgKi9cclxuICBwcml2YXRlIGluaXRTZXJ2ZXJTZXNzaW9uSWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX3Nlc3Npb25JZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1Nlc3Npb24gSW5pdGlhbGl6aW5nLCBzdWJzY3JpYmUgdG8gc2Vzc2lvbiQgdG8gZ2V0IHRoZSBzZXNzaW9uIGluZm8uIFNlc3Npb24gSWQgd2lsbCBiZSBwb3B1bGF0ZWQgdXBvbiBpbml0aWFsaXphdGlvbicpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEluaXRpYWxpemVzIGNsaWVudCBzaWRlIHNlc3Npb24gbWFuYWdlbWVudCAqL1xyXG4gIHByaXZhdGUgaW5pdENsaWVudFNlc3Npb25NYW5hZ2VtZW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlQnJvd3NlclNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgIGNvbnN0IHNlc0lkID0gdGhpcy53aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpO1xyXG4gICAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNJZCB8fCBuZXdHdWlkKCk7XHJcbiAgICAgIHRoaXMuc2V0U2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMudXNlQnJvd3NlckxvY2FsU3RvcmFnZSkge1xyXG4gICAgICBjb25zdCBzZXNJZCA9IHRoaXMud2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSk7XHJcbiAgICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc0lkIHx8IG5ld0d1aWQoKTtcclxuICAgICAgdGhpcy5zZXRMb2NhbFN0b3JhZ2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNJbml0aWFsaXplZEJzLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlc3Npb25JZEZyb21TdG9yYWdlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy51c2VCcm93c2VyTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy51c2VCcm93c2VyU2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBJbml0aWFsaXplIHRoZSBjbGllbnQgc2lkZSBzZXNzaW9uIGlkICovXHJcbiAgcHJpdmF0ZSBpbml0Q2xpZW50U2Vzc2lvbklkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2Vzc2lvbklkID0gbmV3R3VpZCgpO1xyXG4gICAgaWYgKHRoaXMudXNlQnJvd3NlclNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgIHRoaXMuc2V0U2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMudXNlQnJvd3NlckxvY2FsU3RvcmFnZSkge1xyXG4gICAgICB0aGlzLnNldExvY2FsU3RvcmFnZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFNldHMgc2Vzc2lvbiBzdG9yYWdlICovXHJcbiAgcHJpdmF0ZSBzZXRTZXNzaW9uU3RvcmFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMud2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCB0aGlzLl9zZXNzaW9uSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNldHMgbG9jYWwgc3RvcmFnZSAqL1xyXG4gIHByaXZhdGUgc2V0TG9jYWxTdG9yYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy53aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCB0aGlzLl9zZXNzaW9uSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZiBodHRwIGNhbGwgdG8gbWFrZSBmb3IgdGhlIGRhdGEgc3RvcmVcclxuICAgKiBAcGFyYW0gdmVyYiBUaGUgdmVyYlxyXG4gICAqIEBwYXJhbSBkZWxlZ2F0ZSBUaGUgZGVsZWdhdGVcclxuICAgKiBAcGFyYW0gdXJpIFRoZSB1cmlcclxuICAgKi9cclxuICBwcml2YXRlIGRldGVybWluZURhdGFTdG9yZUZ1bmN0aW9uKFxyXG4gICAgdmVyYjogSHR0cFZlcmIsXHJcbiAgICBkZWxlZ2F0ZTogKGJhc2VVcmk6IHN0cmluZywgYm9keTogVCkgPT4geyB1cmk6IHN0cmluZywgYm9keT86IGFueSB9LFxyXG4gICAgdXJpOiBzdHJpbmcsXHJcbiAgICBib2R5OiBhbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgdHVwbGUgPSBkZWxlZ2F0ZSh1cmksIGJvZHkpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcclxuICAgIH0pO1xyXG4gICAgc3dpdGNoICh2ZXJiKSB7XHJcbiAgICAgIGNhc2UgaHR0cFZlcmIuUFVUOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucHV0KHR1cGxlLnVyaSwgdHVwbGUuYm9keSwgeyBoZWFkZXJzIH0pO1xyXG4gICAgICBjYXNlIGh0dHBWZXJiLlBPU1Q6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KHR1cGxlLnVyaSwgdHVwbGUuYm9keSwgeyBoZWFkZXJzIH0pO1xyXG4gICAgICBjYXNlIGh0dHBWZXJiLkdFVDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0dXBsZS51cmksIHsgaGVhZGVycyB9KTtcclxuICAgICAgY2FzZSBodHRwVmVyYi5QQVRDSDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBhdGNoKHR1cGxlLnVyaSwgdHVwbGUuYm9keSwgeyBoZWFkZXJzIH0pO1xyXG4gICAgICBjYXNlIGh0dHBWZXJiLkRFTEVURTpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZSh0dXBsZS51cmksIHsgaGVhZGVycyB9KTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0h0dHAgdmVyYiBtdXN0IGJlIG9uZSBvZjogUEFUQ0gsIFBVVCwgUE9TVCwgREVMRVRFLCBHRVQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuY29kZXMgdGhlIG9iamVjdFxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbmNvZGUodmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gd2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlY29kZXMgdGhlIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVjb2RlKHN0cjogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUod2luZG93LmF0b2Ioc3RyKSkpKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWRpcmVjdCBTZXNzaW9uIENvbmZpZ3MuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUmVkaXJlY3RTZXNzaW9uQ29uZmlncyB7XHJcbiAgLyoqIElmIHNlc3Npb24gc2hvdWxkIGJlIHN5bmNlZC4gKi9cclxuICBzeW5jU2Vzc2lvbj86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBJZiBuZXcgdGFiIHNob3VsZCBiZSB0YXJnZXRlZC4gKi9cclxuICB0YXJnZXROZXdUYWI/OiBib29sZWFuO1xyXG59Il19