@keycloakify/angular 0.0.1-rc.0 → 0.0.1-rc.10

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 (497) hide show
  1. package/account/DefaultPage.d.ts +37 -0
  2. package/account/DefaultPage.js +33 -0
  3. package/account/KcContext.d.ts +1 -0
  4. package/account/KcContext.js +2 -0
  5. package/account/classes/component-reference.class.d.ts +6 -0
  6. package/account/classes/component-reference.class.js +3 -0
  7. package/account/containers/template.component.d.ts +26 -0
  8. package/account/containers/template.component.js +66 -0
  9. package/account/directives/kc-class.directive.d.ts +26 -0
  10. package/account/directives/kc-class.directive.js +137 -0
  11. package/account/i18n.d.ts +4 -0
  12. package/account/i18n.js +2 -0
  13. package/account/pages/account/account.component.d.ts +14 -0
  14. package/account/pages/account/account.component.js +39 -0
  15. package/account/pages/applications/applications.component.d.ts +13 -0
  16. package/account/pages/applications/applications.component.js +37 -0
  17. package/account/pages/federatedIdentity/federatedIdentity.component.d.ts +13 -0
  18. package/account/pages/federatedIdentity/federatedIdentity.component.js +36 -0
  19. package/account/pages/log/log.component.d.ts +13 -0
  20. package/account/pages/log/log.component.js +36 -0
  21. package/account/pages/password/password.component.d.ts +28 -0
  22. package/account/pages/password/password.component.js +107 -0
  23. package/account/pages/sessions/sessions.component.d.ts +13 -0
  24. package/account/pages/sessions/sessions.component.js +36 -0
  25. package/account/pages/totp/totp.component.d.ts +13 -0
  26. package/account/pages/totp/totp.component.js +37 -0
  27. package/account/providers/keycloakify-angular.providers.d.ts +15 -0
  28. package/account/providers/keycloakify-angular.providers.js +48 -0
  29. package/account/services/i18n.service.d.ts +6 -0
  30. package/account/services/i18n.service.js +12 -0
  31. package/account/services/resource-injector.service.d.ts +10 -0
  32. package/account/services/resource-injector.service.js +37 -0
  33. package/account/tokens/classes.token.d.ts +16 -0
  34. package/account/tokens/classes.token.js +3 -0
  35. package/account/tokens/i18n.token.d.ts +2 -0
  36. package/account/tokens/i18n.token.js +3 -0
  37. package/account/tokens/kc-context.token.d.ts +3 -0
  38. package/account/tokens/kc-context.token.js +3 -0
  39. package/lib/directives/attributes.directive.d.ts +8 -0
  40. package/lib/directives/attributes.directive.js +26 -0
  41. package/lib/models/script.model.js +1 -1
  42. package/lib/pipes/input-type.pipe.d.ts +7 -0
  43. package/lib/pipes/input-type.pipe.js +20 -0
  44. package/lib/pipes/is-array-with-empty-object.pipe.d.ts +7 -0
  45. package/lib/pipes/is-array-with-empty-object.pipe.js +20 -0
  46. package/lib/pipes/kc-sanitize.pipe.d.ts +9 -0
  47. package/lib/pipes/kc-sanitize.pipe.js +29 -0
  48. package/lib/pipes/to-array.pipe.d.ts +7 -0
  49. package/lib/pipes/to-array.pipe.js +21 -0
  50. package/lib/pipes/to-number.pipe.d.ts +7 -0
  51. package/lib/pipes/to-number.pipe.js +20 -0
  52. package/lib/services/resource-injector.service.d.ts +5 -2
  53. package/lib/services/resource-injector.service.js +19 -22
  54. package/lib/tokens/use-default-css.token.d.ts +2 -0
  55. package/lib/tokens/use-default-css.token.js +3 -0
  56. package/login/DefaultPage.d.ts +28 -28
  57. package/login/DefaultPage.js +74 -74
  58. package/login/KcContext.d.ts +1 -1
  59. package/login/KcContext.js +1 -1
  60. package/login/classes/component-reference.class.d.ts +1 -1
  61. package/login/classes/component-reference.class.js +1 -1
  62. package/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.d.ts +7 -2
  63. package/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.js +19 -36
  64. package/login/components/field-errors/field-errors.component.d.ts +7 -4
  65. package/login/components/field-errors/field-errors.component.js +23 -35
  66. package/login/components/group-label/group-label.component.d.ts +8 -3
  67. package/login/components/group-label/group-label.component.js +29 -41
  68. package/login/components/input-field-by-type/input-field-by-type.component.d.ts +7 -4
  69. package/login/components/input-field-by-type/input-field-by-type.component.js +33 -50
  70. package/login/components/input-tag/input-tag.component.d.ts +9 -4
  71. package/login/components/input-tag/input-tag.component.js +47 -64
  72. package/login/components/input-tag-selects/input-tag-selects.component.d.ts +11 -6
  73. package/login/components/input-tag-selects/input-tag-selects.component.js +41 -56
  74. package/login/components/logout-other-sessions/logout-other-sessions.component.d.ts +7 -2
  75. package/login/components/logout-other-sessions/logout-other-sessions.component.js +25 -36
  76. package/login/components/password-wrapper/password-wrapper.component.d.ts +8 -3
  77. package/login/components/password-wrapper/password-wrapper.component.js +27 -38
  78. package/login/components/select-tag/select-tag.component.d.ts +9 -4
  79. package/login/components/select-tag/select-tag.component.js +32 -47
  80. package/login/components/textarea-tag/textarea-tag.component.d.ts +7 -4
  81. package/login/components/textarea-tag/textarea-tag.component.js +28 -42
  82. package/login/components/user-profile-form-fields/user-profile-form-fields.component.d.ts +11 -5
  83. package/login/components/user-profile-form-fields/user-profile-form-fields.component.js +45 -57
  84. package/login/containers/template.component.d.ts +11 -8
  85. package/login/containers/template.component.js +36 -42
  86. package/login/directives/kc-class.directive.d.ts +5 -2
  87. package/login/directives/kc-class.directive.js +35 -43
  88. package/login/i18n.d.ts +2 -2
  89. package/login/i18n.js +1 -1
  90. package/login/pages/code/code.component.d.ts +8 -3
  91. package/login/pages/code/code.component.js +28 -31
  92. package/login/pages/delete-account-confirm/delete-account-confirm.component.d.ts +8 -3
  93. package/login/pages/delete-account-confirm/delete-account-confirm.component.js +28 -31
  94. package/login/pages/delete-credential/delete-credential.component.d.ts +8 -3
  95. package/login/pages/delete-credential/delete-credential.component.js +28 -31
  96. package/login/pages/error/error.component.d.ts +8 -3
  97. package/login/pages/error/error.component.js +28 -31
  98. package/login/pages/frontchannel-logout/frontchannel-logout.component.d.ts +9 -4
  99. package/login/pages/frontchannel-logout/frontchannel-logout.component.js +28 -31
  100. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.d.ts +13 -3
  101. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.js +40 -41
  102. package/login/pages/info/info.component.d.ts +8 -9
  103. package/login/pages/info/info.component.js +31 -43
  104. package/login/pages/login/login.component.d.ts +8 -3
  105. package/login/pages/login/login.component.js +33 -47
  106. package/login/pages/login-config-totp/login-config-totp.component.d.ts +8 -3
  107. package/login/pages/login-config-totp/login-config-totp.component.js +31 -42
  108. package/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.d.ts +8 -3
  109. package/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.js +28 -31
  110. package/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.d.ts +8 -3
  111. package/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.js +28 -31
  112. package/login/pages/login-idp-link-email/login-idp-link-email.component.d.ts +8 -3
  113. package/login/pages/login-idp-link-email/login-idp-link-email.component.js +28 -31
  114. package/login/pages/login-oauth-grant/login-oauth-grant.component.d.ts +8 -3
  115. package/login/pages/login-oauth-grant/login-oauth-grant.component.js +29 -33
  116. package/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.d.ts +8 -3
  117. package/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.js +28 -31
  118. package/login/pages/login-otp/login-otp.component.d.ts +8 -3
  119. package/login/pages/login-otp/login-otp.component.js +30 -33
  120. package/login/pages/login-page-expired/login-page-expired.component.d.ts +8 -3
  121. package/login/pages/login-page-expired/login-page-expired.component.js +27 -30
  122. package/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.d.ts +9 -6
  123. package/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.js +37 -44
  124. package/login/pages/login-password/login-password.component.d.ts +8 -3
  125. package/login/pages/login-password/login-password.component.js +31 -40
  126. package/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.d.ts +8 -3
  127. package/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.js +30 -38
  128. package/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.d.ts +8 -3
  129. package/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.js +30 -33
  130. package/login/pages/login-reset-otp/login-reset-otp.component.d.ts +8 -3
  131. package/login/pages/login-reset-otp/login-reset-otp.component.js +29 -32
  132. package/login/pages/login-reset-password/login-reset-password.component.d.ts +8 -3
  133. package/login/pages/login-reset-password/login-reset-password.component.js +30 -33
  134. package/login/pages/login-update-password/login-update-password.component.d.ts +8 -3
  135. package/login/pages/login-update-password/login-update-password.component.js +32 -42
  136. package/login/pages/login-update-profile/login-update-profile.component.d.ts +13 -3
  137. package/login/pages/login-update-profile/login-update-profile.component.js +39 -39
  138. package/login/pages/login-username/login-username.component.d.ts +8 -3
  139. package/login/pages/login-username/login-username.component.js +32 -45
  140. package/login/pages/login-verify-email/login-verify-email.component.d.ts +8 -3
  141. package/login/pages/login-verify-email/login-verify-email.component.js +28 -31
  142. package/login/pages/login-x509-info/login-x509-info.component.d.ts +8 -3
  143. package/login/pages/login-x509-info/login-x509-info.component.js +28 -31
  144. package/login/pages/logout-confirm/logout-confirm.component.d.ts +8 -3
  145. package/login/pages/logout-confirm/logout-confirm.component.js +28 -31
  146. package/login/pages/register/register.component.d.ts +13 -3
  147. package/login/pages/register/register.component.js +41 -48
  148. package/login/pages/saml-post-form/saml-post-form.component.d.ts +9 -4
  149. package/login/pages/saml-post-form/saml-post-form.component.js +32 -35
  150. package/login/pages/select-authenticator/select-authenticator.component.d.ts +8 -3
  151. package/login/pages/select-authenticator/select-authenticator.component.js +29 -39
  152. package/login/pages/terms/terms.component.d.ts +8 -3
  153. package/login/pages/terms/terms.component.js +28 -31
  154. package/login/pages/update-email/update-email.component.d.ts +13 -3
  155. package/login/pages/update-email/update-email.component.js +40 -41
  156. package/login/pages/webauthn-authenticate/webauthn-authenticate.component.d.ts +9 -6
  157. package/login/pages/webauthn-authenticate/webauthn-authenticate.component.js +37 -50
  158. package/login/pages/webauthn-error/webauthn-error.component.d.ts +8 -3
  159. package/login/pages/webauthn-error/webauthn-error.component.js +32 -40
  160. package/login/pages/webauthn-register/webauthn-register.component.d.ts +9 -6
  161. package/login/pages/webauthn-register/webauthn-register.component.js +36 -46
  162. package/login/providers/keycloakify-angular.providers.d.ts +16 -0
  163. package/login/providers/keycloakify-angular.providers.js +53 -0
  164. package/login/services/i18n.service.d.ts +6 -0
  165. package/login/services/i18n.service.js +12 -0
  166. package/login/services/login-resource-injector.service.d.ts +4 -1
  167. package/login/services/login-resource-injector.service.js +22 -25
  168. package/login/services/submit.service.d.ts +9 -0
  169. package/login/services/submit.service.js +20 -0
  170. package/login/services/user-profile-form.service.d.ts +16 -12
  171. package/login/services/user-profile-form.service.js +293 -305
  172. package/{lib/providers/keycloakify-angular.providers.d.ts → login/tokens/classes.token.d.ts} +14 -37
  173. package/login/tokens/classes.token.js +3 -0
  174. package/login/tokens/i18n.token.d.ts +2 -0
  175. package/login/tokens/i18n.token.js +3 -0
  176. package/login/tokens/kc-context.token.d.ts +3 -0
  177. package/login/tokens/kc-context.token.js +3 -0
  178. package/login/tokens/make-user-confirm-password.token.d.ts +2 -0
  179. package/login/tokens/make-user-confirm-password.token.js +3 -0
  180. package/package.json +123 -181
  181. package/src/account/DefaultPage.ts +49 -0
  182. package/src/account/KcContext.ts +1 -0
  183. package/src/account/classes/component-reference.class.ts +6 -0
  184. package/src/account/containers/template.component.html +125 -0
  185. package/src/account/containers/template.component.ts +71 -0
  186. package/src/account/directives/kc-class.directive.ts +150 -0
  187. package/src/account/i18n.ts +4 -0
  188. package/src/account/pages/account/account.component.html +165 -0
  189. package/src/account/pages/account/account.component.ts +34 -0
  190. package/src/account/pages/applications/applications.component.html +156 -0
  191. package/src/account/pages/applications/applications.component.ts +32 -0
  192. package/src/account/pages/federatedIdentity/federatedIdentity.component.html +97 -0
  193. package/src/account/pages/federatedIdentity/federatedIdentity.component.ts +31 -0
  194. package/src/account/pages/log/log.component.html +44 -0
  195. package/src/account/pages/log/log.component.ts +31 -0
  196. package/src/account/pages/password/password.component.html +131 -0
  197. package/src/account/pages/password/password.component.ts +110 -0
  198. package/src/account/pages/sessions/sessions.component.html +63 -0
  199. package/src/account/pages/sessions/sessions.component.ts +31 -0
  200. package/src/account/pages/totp/totp.component.html +258 -0
  201. package/src/account/pages/totp/totp.component.ts +32 -0
  202. package/src/account/providers/keycloakify-angular.providers.ts +64 -0
  203. package/src/account/services/i18n.service.ts +7 -0
  204. package/src/account/services/resource-injector.service.ts +37 -0
  205. package/src/account/tokens/classes.token.ts +6 -0
  206. package/src/account/tokens/i18n.token.ts +3 -0
  207. package/src/account/tokens/kc-context.token.ts +4 -0
  208. package/src/{login → lib}/directives/attributes.directive.ts +2 -2
  209. package/src/{login → lib}/pipes/input-type.pipe.ts +4 -4
  210. package/src/lib/pipes/is-array-with-empty-object.pipe.ts +16 -0
  211. package/src/lib/pipes/kc-sanitize.pipe.ts +34 -0
  212. package/src/lib/pipes/to-array.pipe.ts +15 -0
  213. package/src/lib/pipes/to-number.pipe.ts +13 -0
  214. package/src/lib/services/resource-injector.service.ts +7 -7
  215. package/src/lib/tokens/use-default-css.token.ts +3 -0
  216. package/src/login/DefaultPage.ts +76 -76
  217. package/src/login/KcContext.ts +1 -1
  218. package/src/login/classes/component-reference.class.ts +1 -1
  219. package/src/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.html +19 -19
  220. package/src/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.ts +15 -23
  221. package/src/login/components/field-errors/field-errors.component.html +10 -10
  222. package/src/login/components/field-errors/field-errors.component.ts +11 -16
  223. package/src/login/components/group-label/group-label.component.html +25 -25
  224. package/src/login/components/group-label/group-label.component.ts +17 -21
  225. package/src/login/components/input-field-by-type/input-field-by-type.component.html +57 -57
  226. package/src/login/components/input-field-by-type/input-field-by-type.component.ts +18 -35
  227. package/src/login/components/input-tag/input-tag.component.html +41 -45
  228. package/src/login/components/input-tag/input-tag.component.ts +25 -34
  229. package/src/login/components/input-tag-selects/input-tag-selects.component.html +22 -22
  230. package/src/login/components/input-tag-selects/input-tag-selects.component.ts +32 -43
  231. package/src/login/components/logout-other-sessions/logout-other-sessions.component.html +15 -15
  232. package/src/login/components/logout-other-sessions/logout-other-sessions.component.ts +13 -10
  233. package/src/login/components/password-wrapper/password-wrapper.component.html +13 -13
  234. package/src/login/components/password-wrapper/password-wrapper.component.ts +15 -25
  235. package/src/login/components/select-tag/select-tag.component.html +26 -26
  236. package/src/login/components/select-tag/select-tag.component.ts +23 -35
  237. package/src/login/components/textarea-tag/textarea-tag.component.html +13 -15
  238. package/src/login/components/textarea-tag/textarea-tag.component.ts +16 -25
  239. package/src/login/components/user-profile-form-fields/user-profile-form-fields.component.html +70 -73
  240. package/src/login/components/user-profile-form-fields/user-profile-form-fields.component.ts +33 -47
  241. package/src/login/containers/template.component.html +183 -183
  242. package/src/login/containers/template.component.ts +26 -42
  243. package/src/login/directives/kc-class.directive.ts +11 -11
  244. package/src/login/i18n.ts +2 -2
  245. package/src/login/pages/code/code.component.html +21 -21
  246. package/src/login/pages/code/code.component.ts +17 -17
  247. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.html +44 -42
  248. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.ts +17 -18
  249. package/src/login/pages/delete-credential/delete-credential.component.html +29 -29
  250. package/src/login/pages/delete-credential/delete-credential.component.ts +17 -24
  251. package/src/login/pages/error/error.component.html +20 -20
  252. package/src/login/pages/error/error.component.ts +17 -17
  253. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.html +31 -31
  254. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.ts +17 -25
  255. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.html +36 -36
  256. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.ts +34 -33
  257. package/src/login/pages/info/info.component.html +45 -45
  258. package/src/login/pages/info/info.component.ts +20 -37
  259. package/src/login/pages/login/login.component.html +194 -194
  260. package/src/login/pages/login/login.component.ts +22 -43
  261. package/src/login/pages/login-config-totp/login-config-totp.component.html +189 -179
  262. package/src/login/pages/login-config-totp/login-config-totp.component.ts +20 -39
  263. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.html +35 -35
  264. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.ts +17 -24
  265. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.html +34 -34
  266. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.ts +17 -26
  267. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.html +32 -30
  268. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.ts +17 -24
  269. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.html +83 -81
  270. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.ts +18 -26
  271. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.html +57 -57
  272. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.ts +17 -26
  273. package/src/login/pages/login-otp/login-otp.component.html +96 -96
  274. package/src/login/pages/login-otp/login-otp.component.ts +19 -25
  275. package/src/login/pages/login-page-expired/login-page-expired.component.html +31 -31
  276. package/src/login/pages/login-page-expired/login-page-expired.component.ts +16 -23
  277. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.html +183 -181
  278. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.ts +25 -32
  279. package/src/login/pages/login-password/login-password.component.html +82 -82
  280. package/src/login/pages/login-password/login-password.component.ts +20 -33
  281. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.html +142 -142
  282. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.ts +19 -34
  283. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.html +67 -67
  284. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.ts +19 -29
  285. package/src/login/pages/login-reset-otp/login-reset-otp.component.html +61 -59
  286. package/src/login/pages/login-reset-otp/login-reset-otp.component.ts +18 -24
  287. package/src/login/pages/login-reset-password/login-reset-password.component.html +84 -84
  288. package/src/login/pages/login-reset-password/login-reset-password.component.ts +19 -26
  289. package/src/login/pages/login-update-password/login-update-password.component.html +107 -107
  290. package/src/login/pages/login-update-password/login-update-password.component.ts +21 -38
  291. package/src/login/pages/login-update-profile/login-update-profile.component.html +52 -53
  292. package/src/login/pages/login-update-profile/login-update-profile.component.ts +31 -32
  293. package/src/login/pages/login-username/login-username.component.html +146 -146
  294. package/src/login/pages/login-username/login-username.component.ts +21 -38
  295. package/src/login/pages/login-verify-email/login-verify-email.component.html +22 -22
  296. package/src/login/pages/login-verify-email/login-verify-email.component.ts +17 -24
  297. package/src/login/pages/login-x509-info/login-x509-info.component.html +96 -96
  298. package/src/login/pages/login-x509-info/login-x509-info.component.ts +17 -23
  299. package/src/login/pages/logout-confirm/logout-confirm.component.html +51 -51
  300. package/src/login/pages/logout-confirm/logout-confirm.component.ts +17 -23
  301. package/src/login/pages/register/register.component.html +113 -113
  302. package/src/login/pages/register/register.component.ts +33 -39
  303. package/src/login/pages/saml-post-form/saml-post-form.component.html +47 -48
  304. package/src/login/pages/saml-post-form/saml-post-form.component.ts +19 -27
  305. package/src/login/pages/select-authenticator/select-authenticator.component.html +43 -44
  306. package/src/login/pages/select-authenticator/select-authenticator.component.ts +18 -32
  307. package/src/login/pages/terms/terms.component.html +32 -32
  308. package/src/login/pages/terms/terms.component.ts +17 -23
  309. package/src/login/pages/update-email/update-email.component.html +52 -52
  310. package/src/login/pages/update-email/update-email.component.ts +33 -33
  311. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.html +146 -148
  312. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.ts +26 -50
  313. package/src/login/pages/webauthn-error/webauthn-error.component.html +53 -53
  314. package/src/login/pages/webauthn-error/webauthn-error.component.ts +21 -32
  315. package/src/login/pages/webauthn-register/webauthn-register.component.html +73 -73
  316. package/src/login/pages/webauthn-register/webauthn-register.component.ts +26 -40
  317. package/src/login/providers/keycloakify-angular.providers.ts +68 -0
  318. package/src/login/services/i18n.service.ts +7 -0
  319. package/src/login/services/login-resource-injector.service.ts +13 -12
  320. package/src/login/services/submit.service.ts +12 -0
  321. package/src/login/services/user-profile-form.service.ts +185 -187
  322. package/src/login/tokens/classes.token.ts +6 -0
  323. package/src/login/tokens/i18n.token.ts +3 -0
  324. package/src/login/tokens/kc-context.token.ts +4 -0
  325. package/src/login/tokens/make-user-confirm-password.token.ts +5 -0
  326. package/src/tsconfig.json +6 -1
  327. package/stories/login/pages/login/login.stories.ts +146 -0
  328. package/lib/i18n.d.ts +0 -4
  329. package/lib/i18n.js +0 -6
  330. package/lib/i18n.js.map +0 -1
  331. package/lib/models/index.d.ts +0 -1
  332. package/lib/models/index.js +0 -2
  333. package/lib/models/index.js.map +0 -1
  334. package/lib/models/script.model.js.map +0 -1
  335. package/lib/providers/keycloakify-angular.providers.js +0 -58
  336. package/lib/providers/keycloakify-angular.providers.js.map +0 -1
  337. package/lib/public-api.d.ts +0 -10
  338. package/lib/public-api.js +0 -4
  339. package/lib/public-api.js.map +0 -1
  340. package/lib/services/i18n.service.d.ts +0 -3
  341. package/lib/services/i18n.service.js +0 -14
  342. package/lib/services/i18n.service.js.map +0 -1
  343. package/lib/services/index.d.ts +0 -2
  344. package/lib/services/index.js +0 -3
  345. package/lib/services/index.js.map +0 -1
  346. package/lib/services/resource-injector.service.js.map +0 -1
  347. package/login/DefaultPage.js.map +0 -1
  348. package/login/KcContext.js.map +0 -1
  349. package/login/classes/component-reference.class.js.map +0 -1
  350. package/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.html +0 -24
  351. package/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.js.map +0 -1
  352. package/login/components/field-errors/field-errors.component.html +0 -15
  353. package/login/components/field-errors/field-errors.component.js.map +0 -1
  354. package/login/components/group-label/group-label.component.html +0 -30
  355. package/login/components/group-label/group-label.component.js.map +0 -1
  356. package/login/components/index.d.ts +0 -11
  357. package/login/components/index.js +0 -12
  358. package/login/components/index.js.map +0 -1
  359. package/login/components/input-field-by-type/input-field-by-type.component.html +0 -63
  360. package/login/components/input-field-by-type/input-field-by-type.component.js.map +0 -1
  361. package/login/components/input-tag/input-tag.component.html +0 -49
  362. package/login/components/input-tag/input-tag.component.js.map +0 -1
  363. package/login/components/input-tag-selects/input-tag-selects.component.html +0 -29
  364. package/login/components/input-tag-selects/input-tag-selects.component.js.map +0 -1
  365. package/login/components/logout-other-sessions/logout-other-sessions.component.html +0 -19
  366. package/login/components/logout-other-sessions/logout-other-sessions.component.js.map +0 -1
  367. package/login/components/password-wrapper/password-wrapper.component.html +0 -15
  368. package/login/components/password-wrapper/password-wrapper.component.js.map +0 -1
  369. package/login/components/select-tag/select-tag.component.html +0 -31
  370. package/login/components/select-tag/select-tag.component.js.map +0 -1
  371. package/login/components/textarea-tag/textarea-tag.component.html +0 -18
  372. package/login/components/textarea-tag/textarea-tag.component.js.map +0 -1
  373. package/login/components/user-profile-form-fields/user-profile-form-fields.component.html +0 -85
  374. package/login/components/user-profile-form-fields/user-profile-form-fields.component.js.map +0 -1
  375. package/login/containers/template.component.html +0 -203
  376. package/login/containers/template.component.js.map +0 -1
  377. package/login/directives/attributes.directive.d.ts +0 -5
  378. package/login/directives/attributes.directive.js +0 -34
  379. package/login/directives/attributes.directive.js.map +0 -1
  380. package/login/directives/index.d.ts +0 -2
  381. package/login/directives/index.js +0 -3
  382. package/login/directives/index.js.map +0 -1
  383. package/login/directives/kc-class.directive.js.map +0 -1
  384. package/login/i18n.js.map +0 -1
  385. package/login/pages/code/code.component.html +0 -26
  386. package/login/pages/code/code.component.js.map +0 -1
  387. package/login/pages/delete-account-confirm/delete-account-confirm.component.html +0 -46
  388. package/login/pages/delete-account-confirm/delete-account-confirm.component.js.map +0 -1
  389. package/login/pages/delete-credential/delete-credential.component.html +0 -35
  390. package/login/pages/delete-credential/delete-credential.component.js.map +0 -1
  391. package/login/pages/error/error.component.html +0 -25
  392. package/login/pages/error/error.component.js.map +0 -1
  393. package/login/pages/frontchannel-logout/frontchannel-logout.component.html +0 -35
  394. package/login/pages/frontchannel-logout/frontchannel-logout.component.js.map +0 -1
  395. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.html +0 -41
  396. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.js.map +0 -1
  397. package/login/pages/info/info.component.html +0 -54
  398. package/login/pages/info/info.component.js.map +0 -1
  399. package/login/pages/login/login.component.html +0 -212
  400. package/login/pages/login/login.component.js.map +0 -1
  401. package/login/pages/login-config-totp/login-config-totp.component.html +0 -190
  402. package/login/pages/login-config-totp/login-config-totp.component.js.map +0 -1
  403. package/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.html +0 -41
  404. package/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.js.map +0 -1
  405. package/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.html +0 -40
  406. package/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.js.map +0 -1
  407. package/login/pages/login-idp-link-email/login-idp-link-email.component.html +0 -37
  408. package/login/pages/login-idp-link-email/login-idp-link-email.component.js.map +0 -1
  409. package/login/pages/login-oauth-grant/login-oauth-grant.component.html +0 -92
  410. package/login/pages/login-oauth-grant/login-oauth-grant.component.js.map +0 -1
  411. package/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.html +0 -63
  412. package/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.js.map +0 -1
  413. package/login/pages/login-otp/login-otp.component.html +0 -103
  414. package/login/pages/login-otp/login-otp.component.js.map +0 -1
  415. package/login/pages/login-page-expired/login-page-expired.component.html +0 -35
  416. package/login/pages/login-page-expired/login-page-expired.component.js.map +0 -1
  417. package/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.html +0 -203
  418. package/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.js.map +0 -1
  419. package/login/pages/login-password/login-password.component.html +0 -90
  420. package/login/pages/login-password/login-password.component.js.map +0 -1
  421. package/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.html +0 -155
  422. package/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.js.map +0 -1
  423. package/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.html +0 -76
  424. package/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.js.map +0 -1
  425. package/login/pages/login-reset-otp/login-reset-otp.component.html +0 -65
  426. package/login/pages/login-reset-otp/login-reset-otp.component.js.map +0 -1
  427. package/login/pages/login-reset-password/login-reset-password.component.html +0 -95
  428. package/login/pages/login-reset-password/login-reset-password.component.js.map +0 -1
  429. package/login/pages/login-update-password/login-update-password.component.html +0 -116
  430. package/login/pages/login-update-password/login-update-password.component.js.map +0 -1
  431. package/login/pages/login-update-profile/login-update-profile.component.html +0 -59
  432. package/login/pages/login-update-profile/login-update-profile.component.js.map +0 -1
  433. package/login/pages/login-username/login-username.component.html +0 -161
  434. package/login/pages/login-username/login-username.component.js.map +0 -1
  435. package/login/pages/login-verify-email/login-verify-email.component.html +0 -27
  436. package/login/pages/login-verify-email/login-verify-email.component.js.map +0 -1
  437. package/login/pages/login-x509-info/login-x509-info.component.html +0 -102
  438. package/login/pages/login-x509-info/login-x509-info.component.js.map +0 -1
  439. package/login/pages/logout-confirm/logout-confirm.component.html +0 -59
  440. package/login/pages/logout-confirm/logout-confirm.component.js.map +0 -1
  441. package/login/pages/register/register.component.html +0 -126
  442. package/login/pages/register/register.component.js.map +0 -1
  443. package/login/pages/saml-post-form/saml-post-form.component.html +0 -51
  444. package/login/pages/saml-post-form/saml-post-form.component.js.map +0 -1
  445. package/login/pages/select-authenticator/select-authenticator.component.html +0 -49
  446. package/login/pages/select-authenticator/select-authenticator.component.js.map +0 -1
  447. package/login/pages/terms/terms.component.html +0 -36
  448. package/login/pages/terms/terms.component.js.map +0 -1
  449. package/login/pages/update-email/update-email.component.html +0 -58
  450. package/login/pages/update-email/update-email.component.js.map +0 -1
  451. package/login/pages/webauthn-authenticate/webauthn-authenticate.component.html +0 -162
  452. package/login/pages/webauthn-authenticate/webauthn-authenticate.component.js.map +0 -1
  453. package/login/pages/webauthn-error/webauthn-error.component.html +0 -60
  454. package/login/pages/webauthn-error/webauthn-error.component.js.map +0 -1
  455. package/login/pages/webauthn-register/webauthn-register.component.html +0 -82
  456. package/login/pages/webauthn-register/webauthn-register.component.js.map +0 -1
  457. package/login/pipes/advanced-msg-str.pipe.d.ts +0 -5
  458. package/login/pipes/advanced-msg-str.pipe.js +0 -31
  459. package/login/pipes/advanced-msg-str.pipe.js.map +0 -1
  460. package/login/pipes/index.d.ts +0 -6
  461. package/login/pipes/index.js +0 -7
  462. package/login/pipes/index.js.map +0 -1
  463. package/login/pipes/input-type.pipe.d.ts +0 -4
  464. package/login/pipes/input-type.pipe.js +0 -23
  465. package/login/pipes/input-type.pipe.js.map +0 -1
  466. package/login/pipes/kc-sanitize.pipe.d.ts +0 -7
  467. package/login/pipes/kc-sanitize.pipe.js +0 -36
  468. package/login/pipes/kc-sanitize.pipe.js.map +0 -1
  469. package/login/pipes/msg-str.pipe.d.ts +0 -6
  470. package/login/pipes/msg-str.pipe.js +0 -31
  471. package/login/pipes/msg-str.pipe.js.map +0 -1
  472. package/login/pipes/to-array.pipe.d.ts +0 -4
  473. package/login/pipes/to-array.pipe.js +0 -24
  474. package/login/pipes/to-array.pipe.js.map +0 -1
  475. package/login/pipes/to-number.pipe.d.ts +0 -4
  476. package/login/pipes/to-number.pipe.js +0 -23
  477. package/login/pipes/to-number.pipe.js.map +0 -1
  478. package/login/services/index.d.ts +0 -2
  479. package/login/services/index.js +0 -3
  480. package/login/services/index.js.map +0 -1
  481. package/login/services/login-resource-injector.service.js.map +0 -1
  482. package/login/services/user-profile-form.service.js.map +0 -1
  483. package/src/lib/i18n.ts +0 -9
  484. package/src/lib/models/index.ts +0 -1
  485. package/src/lib/providers/keycloakify-angular.providers.ts +0 -92
  486. package/src/lib/public-api.ts +0 -12
  487. package/src/lib/services/i18n.service.ts +0 -5
  488. package/src/lib/services/index.ts +0 -2
  489. package/src/login/components/index.ts +0 -11
  490. package/src/login/directives/index.ts +0 -2
  491. package/src/login/pipes/advanced-msg-str.pipe.ts +0 -13
  492. package/src/login/pipes/index.ts +0 -6
  493. package/src/login/pipes/kc-sanitize.pipe.ts +0 -36
  494. package/src/login/pipes/msg-str.pipe.ts +0 -14
  495. package/src/login/pipes/to-array.pipe.ts +0 -15
  496. package/src/login/pipes/to-number.pipe.ts +0 -13
  497. package/src/login/services/index.ts +0 -2
@@ -0,0 +1,37 @@
1
+ import { KeyValuePipe, NgClass } from '@angular/common';
2
+ import { Component, forwardRef, inject } from '@angular/core';
3
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
4
+ import { TemplateComponent } from '../../../account/containers/template.component';
5
+ import { KcClassDirective } from '../../../account/directives/kc-class.directive';
6
+ import { ACCOUNT_CLASSES } from '../../../account/tokens/classes.token';
7
+ import { ACCOUNT_I18N } from '../../../account/tokens/i18n.token';
8
+ import { KC_ACCOUNT_CONTEXT } from '../../../account/tokens/kc-context.token';
9
+ import { IsArrayWithEmptyObjectPipe } from '../../../lib/pipes/is-array-with-empty-object.pipe';
10
+ import { USE_DEFAULT_CSS } from '../../../lib/tokens/use-default-css.token';
11
+ import * as i0 from "@angular/core";
12
+ export class ApplicationsComponent extends ComponentReference {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.i18n = inject(ACCOUNT_I18N);
16
+ this.kcContext = inject(KC_ACCOUNT_CONTEXT);
17
+ this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
18
+ this.classes = inject(ACCOUNT_CLASSES);
19
+ }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ApplicationsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: ApplicationsComponent, isStandalone: true, selector: "kc-root", providers: [
22
+ {
23
+ provide: ComponentReference,
24
+ useExisting: forwardRef(() => ApplicationsComponent)
25
+ }
26
+ ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let stateChecker = kcContext.stateChecker;\n@let applications = kcContext.applications?.applications;\n\n<kc-account-template [active]=\"'applications'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('applicationsHtmlTitle') }}</h2>\n </div>\n\n <form\n [action]=\"url.applicationsUrl\"\n method=\"post\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"referrer\"\n name=\"referrer\"\n [value]=\"stateChecker\"\n />\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <td>{{ i18n.msgStr('application') }}</td>\n <td>{{ i18n.msgStr('availableRoles') }}</td>\n <td>{{ i18n.msgStr('grantedPermissions') }}</td>\n <td>{{ i18n.msgStr('additionalGrants') }}</td>\n <td>{{ i18n.msgStr('action') }}</td>\n </tr>\n </thead>\n\n <tbody>\n @for (application of applications ?? []; track application) {\n <tr>\n <td>\n @if (application.effectiveUrl) {\n <a [href]=\"application.effectiveUrl\">\n @if (application.client.name) {\n {{ i18n.advancedMsgStr(application.client.name) }}\n } @else {\n {{ application.client.clientId }}\n }\n </a>\n } @else {\n @if (application.client.name) {\n {{ i18n.advancedMsgStr(application.client.name) }}\n } @else {\n {{ application.client.clientId }}\n }\n }\n </td>\n\n <td>\n @if (!(application.realmRolesAvailable | isArrayWithEmptyObject)) {\n @for (role of application.realmRolesAvailable; track role; let last = $last) {\n <span>\n @if (role.description) {\n {{ i18n.advancedMsgStr(role.description) }}\n } @else {\n {{ i18n.advancedMsgStr(role.name) }}\n }\n @if (!last) {\n ,&nbsp;\n }\n </span>\n }\n }\n @if (application.resourceRolesAvailable) {\n @for (resource of application.resourceRolesAvailable | keyvalue; track resource.key) {\n <span>\n @if (!(application.realmRolesAvailable | isArrayWithEmptyObject)) {\n ,&nbsp;\n }\n @for (\n clientRole of application.resourceRolesAvailable[resource.key];\n track clientRole;\n let roleLast = $last\n ) {\n <span>\n {{\n i18n.advancedMsgStr(\n clientRole.roleDescription ? clientRole.roleDescription : clientRole.roleName\n )\n }}\n {{ i18n.msgStr('inResource') }}\n <strong>\n {{\n clientRole.clientName\n ? i18n.advancedMsgStr(clientRole.clientName)\n : clientRole.clientId\n }}</strong\n >\n @if (!roleLast) {\n ,&nbsp;\n }\n </span>\n }\n </span>\n }\n }\n </td>\n\n <td>\n @if (application.client.consentRequired) {\n @for (claim of application.clientScopesGranted; track claim; let last = $last) {\n {{ i18n.advancedMsgStr(claim) }}\n @if (!last) {\n ,&nbsp;\n }\n }\n } @else {\n <strong>{{ i18n.msgStr('fullAccess') }}</strong>\n }\n </td>\n\n <td>\n @for (grant of application.additionalGrants; track grant; let last = $last) {\n {{ i18n.advancedMsgStr(grant) }}\n @if (!last) {\n ,&nbsp;\n }\n }\n </td>\n\n <td>\n @if (\n (application.client.consentRequired && application.clientScopesGranted.length > 0) ||\n application.additionalGrants.length > 0\n ) {\n <button\n type=\"submit\"\n [kcClass]=\"['kcButtonPrimaryClass', 'kcButtonClass']\"\n [id]=\"'revoke-' + application.client.clientId\"\n name=\"clientId\"\n [value]=\"application.client.id\"\n >\n {{ i18n.msgStr('revoke') }}\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </form>\n </div>\n </ng-container>\n</kc-account-template>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: TemplateComponent, selector: "kc-account-template", inputs: ["active"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: IsArrayWithEmptyObjectPipe, name: "isArrayWithEmptyObject" }] }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: ApplicationsComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass, KeyValuePipe, IsArrayWithEmptyObjectPipe], selector: 'kc-root', providers: [
31
+ {
32
+ provide: ComponentReference,
33
+ useExisting: forwardRef(() => ApplicationsComponent)
34
+ }
35
+ ], template: "@let url = kcContext.url;\n@let stateChecker = kcContext.stateChecker;\n@let applications = kcContext.applications?.applications;\n\n<kc-account-template [active]=\"'applications'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('applicationsHtmlTitle') }}</h2>\n </div>\n\n <form\n [action]=\"url.applicationsUrl\"\n method=\"post\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n id=\"referrer\"\n name=\"referrer\"\n [value]=\"stateChecker\"\n />\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <td>{{ i18n.msgStr('application') }}</td>\n <td>{{ i18n.msgStr('availableRoles') }}</td>\n <td>{{ i18n.msgStr('grantedPermissions') }}</td>\n <td>{{ i18n.msgStr('additionalGrants') }}</td>\n <td>{{ i18n.msgStr('action') }}</td>\n </tr>\n </thead>\n\n <tbody>\n @for (application of applications ?? []; track application) {\n <tr>\n <td>\n @if (application.effectiveUrl) {\n <a [href]=\"application.effectiveUrl\">\n @if (application.client.name) {\n {{ i18n.advancedMsgStr(application.client.name) }}\n } @else {\n {{ application.client.clientId }}\n }\n </a>\n } @else {\n @if (application.client.name) {\n {{ i18n.advancedMsgStr(application.client.name) }}\n } @else {\n {{ application.client.clientId }}\n }\n }\n </td>\n\n <td>\n @if (!(application.realmRolesAvailable | isArrayWithEmptyObject)) {\n @for (role of application.realmRolesAvailable; track role; let last = $last) {\n <span>\n @if (role.description) {\n {{ i18n.advancedMsgStr(role.description) }}\n } @else {\n {{ i18n.advancedMsgStr(role.name) }}\n }\n @if (!last) {\n ,&nbsp;\n }\n </span>\n }\n }\n @if (application.resourceRolesAvailable) {\n @for (resource of application.resourceRolesAvailable | keyvalue; track resource.key) {\n <span>\n @if (!(application.realmRolesAvailable | isArrayWithEmptyObject)) {\n ,&nbsp;\n }\n @for (\n clientRole of application.resourceRolesAvailable[resource.key];\n track clientRole;\n let roleLast = $last\n ) {\n <span>\n {{\n i18n.advancedMsgStr(\n clientRole.roleDescription ? clientRole.roleDescription : clientRole.roleName\n )\n }}\n {{ i18n.msgStr('inResource') }}\n <strong>\n {{\n clientRole.clientName\n ? i18n.advancedMsgStr(clientRole.clientName)\n : clientRole.clientId\n }}</strong\n >\n @if (!roleLast) {\n ,&nbsp;\n }\n </span>\n }\n </span>\n }\n }\n </td>\n\n <td>\n @if (application.client.consentRequired) {\n @for (claim of application.clientScopesGranted; track claim; let last = $last) {\n {{ i18n.advancedMsgStr(claim) }}\n @if (!last) {\n ,&nbsp;\n }\n }\n } @else {\n <strong>{{ i18n.msgStr('fullAccess') }}</strong>\n }\n </td>\n\n <td>\n @for (grant of application.additionalGrants; track grant; let last = $last) {\n {{ i18n.advancedMsgStr(grant) }}\n @if (!last) {\n ,&nbsp;\n }\n }\n </td>\n\n <td>\n @if (\n (application.client.consentRequired && application.clientScopesGranted.length > 0) ||\n application.additionalGrants.length > 0\n ) {\n <button\n type=\"submit\"\n [kcClass]=\"['kcButtonPrimaryClass', 'kcButtonClass']\"\n [id]=\"'revoke-' + application.client.clientId\"\n name=\"clientId\"\n [value]=\"application.client.id\"\n >\n {{ i18n.msgStr('revoke') }}\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </form>\n </div>\n </ng-container>\n</kc-account-template>\n" }]
36
+ }] });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FraWZ5LWFuZ3VsYXIvc3JjL2FjY291bnQvcGFnZXMvYXBwbGljYXRpb25zL2FwcGxpY2F0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9ha2lmeS1hbmd1bGFyL3NyYy9hY2NvdW50L3BhZ2VzL2FwcGxpY2F0aW9ucy9hcHBsaWNhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBaUJ4RixNQUFNLE9BQU8scUJBQXNCLFNBQVEsa0JBQWtCO0lBWjdEOztRQWFJLFNBQUksR0FBRyxNQUFNLENBQU8sWUFBWSxDQUFDLENBQUM7UUFDbEMsY0FBUyxHQUFHLE1BQU0sQ0FBcUQsa0JBQWtCLENBQUMsQ0FBQztRQUNsRixvQkFBZSxHQUFHLE1BQU0sQ0FBVSxlQUFlLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsTUFBTSxDQUFvQyxlQUFlLENBQUMsQ0FBQztLQUNqRjs4R0FMWSxxQkFBcUI7a0dBQXJCLHFCQUFxQixzREFQbkI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2FBQ3ZEO1NBQ0osaURDeEJMLDYyUUE0SkEsNENENUljLGdCQUFnQiwrRkFBRSxpQkFBaUIsK0VBQVcsWUFBWSw0Q0FBRSwwQkFBMEI7OzJGQVV2RixxQkFBcUI7a0JBWmpDLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsQ0FBQyxZQUN2RixTQUFTLGFBRVI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7eUJBQ3ZEO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5VmFsdWVQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWZlcmVuY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZS5jbGFzcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY29udGFpbmVycy90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvZGlyZWN0aXZlcy9rYy1jbGFzcy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQUNDT1VOVF9DTEFTU0VTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvY2xhc3Nlcy50b2tlbic7XG5pbXBvcnQgeyBBQ0NPVU5UX0kxOE4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9pMThuLnRva2VuJztcbmltcG9ydCB7IEtDX0FDQ09VTlRfQ09OVEVYVCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2tjLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgSXNBcnJheVdpdGhFbXB0eU9iamVjdFBpcGUgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvcGlwZXMvaXMtYXJyYXktd2l0aC1lbXB0eS1vYmplY3QucGlwZSc7XG5pbXBvcnQgeyBVU0VfREVGQVVMVF9DU1MgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvdG9rZW5zL3VzZS1kZWZhdWx0LWNzcy50b2tlbic7XG5pbXBvcnQgeyB0eXBlIENsYXNzS2V5IH0gZnJvbSAna2V5Y2xvYWtpZnkvYWNjb3VudCc7XG5pbXBvcnQgeyB0eXBlIEkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IHR5cGUgS2NDb250ZXh0IH0gZnJvbSAnLi4vLi4vS2NDb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS2NDbGFzc0RpcmVjdGl2ZSwgVGVtcGxhdGVDb21wb25lbnQsIE5nQ2xhc3MsIEtleVZhbHVlUGlwZSwgSXNBcnJheVdpdGhFbXB0eU9iamVjdFBpcGVdLFxuICAgIHNlbGVjdG9yOiAna2Mtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICdhcHBsaWNhdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDb21wb25lbnRSZWZlcmVuY2UsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBcHBsaWNhdGlvbnNDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFJlZmVyZW5jZSB7XG4gICAgaTE4biA9IGluamVjdDxJMThuPihBQ0NPVU5UX0kxOE4pO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxFeHRyYWN0PEtjQ29udGV4dCwgeyBwYWdlSWQ6ICdhcHBsaWNhdGlvbnMuZnRsJyB9Pj4oS0NfQUNDT1VOVF9DT05URVhUKTtcbiAgICBvdmVycmlkZSBkb1VzZURlZmF1bHRDc3MgPSBpbmplY3Q8Ym9vbGVhbj4oVVNFX0RFRkFVTFRfQ1NTKTtcbiAgICBvdmVycmlkZSBjbGFzc2VzID0gaW5qZWN0PFBhcnRpYWw8UmVjb3JkPENsYXNzS2V5LCBzdHJpbmc+Pj4oQUNDT1VOVF9DTEFTU0VTKTtcbn1cbiIsIkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgc3RhdGVDaGVja2VyID0ga2NDb250ZXh0LnN0YXRlQ2hlY2tlcjtcbkBsZXQgYXBwbGljYXRpb25zID0ga2NDb250ZXh0LmFwcGxpY2F0aW9ucz8uYXBwbGljYXRpb25zO1xuXG48a2MtYWNjb3VudC10ZW1wbGF0ZSBbYWN0aXZlXT1cIidhcHBsaWNhdGlvbnMnXCI+XG4gICAgPG5nLWNvbnRhaW5lciBjb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgPGgyPnt7IGkxOG4ubXNnU3RyKCdhcHBsaWNhdGlvbnNIdG1sVGl0bGUnKSB9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGZvcm1cbiAgICAgICAgICAgICAgICBbYWN0aW9uXT1cInVybC5hcHBsaWNhdGlvbnNVcmxcIlxuICAgICAgICAgICAgICAgIG1ldGhvZD1cInBvc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3RhdGVDaGVja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwicmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwicmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RhdGVDaGVja2VyXCJcbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGkxOG4ubXNnU3RyKCdhcHBsaWNhdGlvbicpIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgaTE4bi5tc2dTdHIoJ2F2YWlsYWJsZVJvbGVzJykgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpMThuLm1zZ1N0cignZ3JhbnRlZFBlcm1pc3Npb25zJykgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpMThuLm1zZ1N0cignYWRkaXRpb25hbEdyYW50cycpIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgaTE4bi5tc2dTdHIoJ2FjdGlvbicpIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYXBwbGljYXRpb24gb2YgYXBwbGljYXRpb25zID8/IFtdOyB0cmFjayBhcHBsaWNhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhcHBsaWNhdGlvbi5lZmZlY3RpdmVVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJhcHBsaWNhdGlvbi5lZmZlY3RpdmVVcmxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhcHBsaWNhdGlvbi5jbGllbnQubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5hZHZhbmNlZE1zZ1N0cihhcHBsaWNhdGlvbi5jbGllbnQubmFtZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHBsaWNhdGlvbi5jbGllbnQuY2xpZW50SWQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYXBwbGljYXRpb24uY2xpZW50Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5hZHZhbmNlZE1zZ1N0cihhcHBsaWNhdGlvbi5jbGllbnQubmFtZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwbGljYXRpb24uY2xpZW50LmNsaWVudElkIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIShhcHBsaWNhdGlvbi5yZWFsbVJvbGVzQXZhaWxhYmxlIHwgaXNBcnJheVdpdGhFbXB0eU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChyb2xlIG9mIGFwcGxpY2F0aW9uLnJlYWxtUm9sZXNBdmFpbGFibGU7IHRyYWNrIHJvbGU7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJvbGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLmFkdmFuY2VkTXNnU3RyKHJvbGUuZGVzY3JpcHRpb24pIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLmFkdmFuY2VkTXNnU3RyKHJvbGUubmFtZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFwcGxpY2F0aW9uLnJlc291cmNlUm9sZXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChyZXNvdXJjZSBvZiBhcHBsaWNhdGlvbi5yZXNvdXJjZVJvbGVzQXZhaWxhYmxlIHwga2V5dmFsdWU7IHRyYWNrIHJlc291cmNlLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIShhcHBsaWNhdGlvbi5yZWFsbVJvbGVzQXZhaWxhYmxlIHwgaXNBcnJheVdpdGhFbXB0eU9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRSb2xlIG9mIGFwcGxpY2F0aW9uLnJlc291cmNlUm9sZXNBdmFpbGFibGVbcmVzb3VyY2Uua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBjbGllbnRSb2xlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb2xlTGFzdCA9ICRsYXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4uYWR2YW5jZWRNc2dTdHIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50Um9sZS5yb2xlRGVzY3JpcHRpb24gPyBjbGllbnRSb2xlLnJvbGVEZXNjcmlwdGlvbiA6IGNsaWVudFJvbGUucm9sZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ2luUmVzb3VyY2UnKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRSb2xlLmNsaWVudE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpMThuLmFkdmFuY2VkTXNnU3RyKGNsaWVudFJvbGUuY2xpZW50TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjbGllbnRSb2xlLmNsaWVudElkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Ryb25nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghcm9sZUxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFwcGxpY2F0aW9uLmNsaWVudC5jb25zZW50UmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjbGFpbSBvZiBhcHBsaWNhdGlvbi5jbGllbnRTY29wZXNHcmFudGVkOyB0cmFjayBjbGFpbTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLmFkdmFuY2VkTXNnU3RyKGNsYWltKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGkxOG4ubXNnU3RyKCdmdWxsQWNjZXNzJykgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChncmFudCBvZiBhcHBsaWNhdGlvbi5hZGRpdGlvbmFsR3JhbnRzOyB0cmFjayBncmFudDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4uYWR2YW5jZWRNc2dTdHIoZ3JhbnQpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGxpY2F0aW9uLmNsaWVudC5jb25zZW50UmVxdWlyZWQgJiYgYXBwbGljYXRpb24uY2xpZW50U2NvcGVzR3JhbnRlZC5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLmFkZGl0aW9uYWxHcmFudHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiWydrY0J1dHRvblByaW1hcnlDbGFzcycsICdrY0J1dHRvbkNsYXNzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3Jldm9rZS0nICsgYXBwbGljYXRpb24uY2xpZW50LmNsaWVudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNsaWVudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFwcGxpY2F0aW9uLmNsaWVudC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigncmV2b2tlJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9rYy1hY2NvdW50LXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,13 @@
1
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
2
+ import { type ClassKey } from 'keycloakify/account';
3
+ import { type I18n } from '../../i18n';
4
+ import { type KcContext } from '../../KcContext';
5
+ import * as i0 from "@angular/core";
6
+ export declare class FederatedIdentityComponent extends ComponentReference {
7
+ i18n: I18n;
8
+ kcContext: KcContext.FederatedIdentity;
9
+ doUseDefaultCss: boolean;
10
+ classes: Partial<Record<ClassKey, string>>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<FederatedIdentityComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<FederatedIdentityComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,36 @@
1
+ import { NgClass } from '@angular/common';
2
+ import { Component, forwardRef, inject } from '@angular/core';
3
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
4
+ import { TemplateComponent } from '../../../account/containers/template.component';
5
+ import { KcClassDirective } from '../../../account/directives/kc-class.directive';
6
+ import { ACCOUNT_CLASSES } from '../../../account/tokens/classes.token';
7
+ import { ACCOUNT_I18N } from '../../../account/tokens/i18n.token';
8
+ import { KC_ACCOUNT_CONTEXT } from '../../../account/tokens/kc-context.token';
9
+ import { USE_DEFAULT_CSS } from '../../../lib/tokens/use-default-css.token';
10
+ import * as i0 from "@angular/core";
11
+ export class FederatedIdentityComponent extends ComponentReference {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.i18n = inject(ACCOUNT_I18N);
15
+ this.kcContext = inject(KC_ACCOUNT_CONTEXT);
16
+ this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
17
+ this.classes = inject(ACCOUNT_CLASSES);
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FederatedIdentityComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: FederatedIdentityComponent, isStandalone: true, selector: "kc-root", providers: [
21
+ {
22
+ provide: ComponentReference,
23
+ useExisting: forwardRef(() => FederatedIdentityComponent)
24
+ }
25
+ ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let federatedIdentity = kcContext.federatedIdentity;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'social'\">\n <ng-container content>\n <div class=\"main-layout social\">\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('federatedIdentitiesHtmlTitle') }}</h2>\n </div>\n </div>\n <div id=\"federated-identities\">\n @for (identity of federatedIdentity.identities; track identity) {\n <div class=\"row margin-bottom\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n [for]=\"identity.providerId\"\n class=\"control-label\"\n >\n {{ identity.displayName }}\n </label>\n </div>\n <div class=\"col-sm-5 col-md-5\">\n <input\n disabled\n class=\"form-control\"\n [value]=\"identity.userName\"\n />\n </div>\n <div class=\"col-sm-5 col-md-5\">\n @if (identity.connected) {\n @if (federatedIdentity.removeLinkPossible) {\n <form\n [action]=\"url.socialUrl\"\n method=\"post\"\n class=\"form-inline\"\n >\n <input\n type=\"hidden\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n name=\"action\"\n value=\"remove\"\n />\n <input\n type=\"hidden\"\n name=\"providerId\"\n [value]=\"identity.providerId\"\n />\n <button\n [id]=\"'remove-link-' + identity.providerId\"\n class=\"btn btn-default\"\n >\n {{ i18n.msgStr('doRemove') }}\n </button>\n </form>\n }\n } @else {\n <form\n [action]=\"url.socialUrl\"\n method=\"post\"\n class=\"form-inline\"\n >\n <input\n type=\"hidden\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n name=\"action\"\n value=\"add\"\n />\n <input\n type=\"hidden\"\n name=\"providerId\"\n [value]=\"identity.providerId\"\n />\n <button\n [id]=\"'add-link-' + identity.providerId\"\n class=\"btn btn-default\"\n >\n {{ i18n.msgStr('doAdd') }}\n </button>\n </form>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </ng-container>\n</kc-account-template>\n", dependencies: [{ kind: "component", type: TemplateComponent, selector: "kc-account-template", inputs: ["active"] }] }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FederatedIdentityComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass], selector: 'kc-root', providers: [
30
+ {
31
+ provide: ComponentReference,
32
+ useExisting: forwardRef(() => FederatedIdentityComponent)
33
+ }
34
+ ], template: "@let url = kcContext.url;\n@let federatedIdentity = kcContext.federatedIdentity;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'social'\">\n <ng-container content>\n <div class=\"main-layout social\">\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('federatedIdentitiesHtmlTitle') }}</h2>\n </div>\n </div>\n <div id=\"federated-identities\">\n @for (identity of federatedIdentity.identities; track identity) {\n <div class=\"row margin-bottom\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n [for]=\"identity.providerId\"\n class=\"control-label\"\n >\n {{ identity.displayName }}\n </label>\n </div>\n <div class=\"col-sm-5 col-md-5\">\n <input\n disabled\n class=\"form-control\"\n [value]=\"identity.userName\"\n />\n </div>\n <div class=\"col-sm-5 col-md-5\">\n @if (identity.connected) {\n @if (federatedIdentity.removeLinkPossible) {\n <form\n [action]=\"url.socialUrl\"\n method=\"post\"\n class=\"form-inline\"\n >\n <input\n type=\"hidden\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n name=\"action\"\n value=\"remove\"\n />\n <input\n type=\"hidden\"\n name=\"providerId\"\n [value]=\"identity.providerId\"\n />\n <button\n [id]=\"'remove-link-' + identity.providerId\"\n class=\"btn btn-default\"\n >\n {{ i18n.msgStr('doRemove') }}\n </button>\n </form>\n }\n } @else {\n <form\n [action]=\"url.socialUrl\"\n method=\"post\"\n class=\"form-inline\"\n >\n <input\n type=\"hidden\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <input\n type=\"hidden\"\n name=\"action\"\n value=\"add\"\n />\n <input\n type=\"hidden\"\n name=\"providerId\"\n [value]=\"identity.providerId\"\n />\n <button\n [id]=\"'add-link-' + identity.providerId\"\n class=\"btn btn-default\"\n >\n {{ i18n.msgStr('doAdd') }}\n </button>\n </form>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </ng-container>\n</kc-account-template>\n" }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVkZXJhdGVkSWRlbnRpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2V5Y2xvYWtpZnktYW5ndWxhci9zcmMvYWNjb3VudC9wYWdlcy9mZWRlcmF0ZWRJZGVudGl0eS9mZWRlcmF0ZWRJZGVudGl0eS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9ha2lmeS1hbmd1bGFyL3NyYy9hY2NvdW50L3BhZ2VzL2ZlZGVyYXRlZElkZW50aXR5L2ZlZGVyYXRlZElkZW50aXR5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBaUJ4RixNQUFNLE9BQU8sMEJBQTJCLFNBQVEsa0JBQWtCO0lBWmxFOztRQWFJLFNBQUksR0FBRyxNQUFNLENBQU8sWUFBWSxDQUFDLENBQUM7UUFDbEMsY0FBUyxHQUFHLE1BQU0sQ0FBMEQsa0JBQWtCLENBQUMsQ0FBQztRQUN2RixvQkFBZSxHQUFHLE1BQU0sQ0FBVSxlQUFlLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsTUFBTSxDQUFvQyxlQUFlLENBQUMsQ0FBQztLQUNqRjs4R0FMWSwwQkFBMEI7a0dBQTFCLDBCQUEwQixzREFQeEI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO2FBQzVEO1NBQ0osaURDdkJMLDhxSkFpR0EsNENEbEZnQyxpQkFBaUI7OzJGQVVwQywwQkFBMEI7a0JBWnRDLFNBQVM7aUNBQ00sSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLFlBQzdDLFNBQVMsYUFFUjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQzt5QkFDNUQ7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWZlcmVuY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZS5jbGFzcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY29udGFpbmVycy90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvZGlyZWN0aXZlcy9rYy1jbGFzcy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQUNDT1VOVF9DTEFTU0VTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvY2xhc3Nlcy50b2tlbic7XG5pbXBvcnQgeyBBQ0NPVU5UX0kxOE4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9pMThuLnRva2VuJztcbmltcG9ydCB7IEtDX0FDQ09VTlRfQ09OVEVYVCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2tjLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgVVNFX0RFRkFVTFRfQ1NTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3Rva2Vucy91c2UtZGVmYXVsdC1jc3MudG9rZW4nO1xuaW1wb3J0IHsgdHlwZSBDbGFzc0tleSB9IGZyb20gJ2tleWNsb2FraWZ5L2FjY291bnQnO1xuaW1wb3J0IHsgdHlwZSBJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyB0eXBlIEtjQ29udGV4dCB9IGZyb20gJy4uLy4uL0tjQ29udGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0tjQ2xhc3NEaXJlY3RpdmUsIFRlbXBsYXRlQ29tcG9uZW50LCBOZ0NsYXNzXSxcbiAgICBzZWxlY3RvcjogJ2tjLXJvb3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnZmVkZXJhdGVkSWRlbnRpdHkuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDb21wb25lbnRSZWZlcmVuY2UsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGZWRlcmF0ZWRJZGVudGl0eUNvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRmVkZXJhdGVkSWRlbnRpdHlDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRSZWZlcmVuY2Uge1xuICAgIGkxOG4gPSBpbmplY3Q8STE4bj4oQUNDT1VOVF9JMThOKTtcbiAgICBrY0NvbnRleHQgPSBpbmplY3Q8RXh0cmFjdDxLY0NvbnRleHQsIHsgcGFnZUlkOiAnZmVkZXJhdGVkSWRlbnRpdHkuZnRsJyB9Pj4oS0NfQUNDT1VOVF9DT05URVhUKTtcbiAgICBvdmVycmlkZSBkb1VzZURlZmF1bHRDc3MgPSBpbmplY3Q8Ym9vbGVhbj4oVVNFX0RFRkFVTFRfQ1NTKTtcbiAgICBvdmVycmlkZSBjbGFzc2VzID0gaW5qZWN0PFBhcnRpYWw8UmVjb3JkPENsYXNzS2V5LCBzdHJpbmc+Pj4oQUNDT1VOVF9DTEFTU0VTKTtcbn1cbiIsIkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgZmVkZXJhdGVkSWRlbnRpdHkgPSBrY0NvbnRleHQuZmVkZXJhdGVkSWRlbnRpdHk7XG5AbGV0IHN0YXRlQ2hlY2tlciA9IGtjQ29udGV4dC5zdGF0ZUNoZWNrZXI7XG5cbjxrYy1hY2NvdW50LXRlbXBsYXRlIFthY3RpdmVdPVwiJ3NvY2lhbCdcIj5cbiAgICA8bmctY29udGFpbmVyIGNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWxheW91dCBzb2NpYWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMj57eyBpMThuLm1zZ1N0cignZmVkZXJhdGVkSWRlbnRpdGllc0h0bWxUaXRsZScpIH19PC9oMj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBpZD1cImZlZGVyYXRlZC1pZGVudGl0aWVzXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaWRlbnRpdHkgb2YgZmVkZXJhdGVkSWRlbnRpdHkuaWRlbnRpdGllczsgdHJhY2sgaWRlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYXJnaW4tYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgY29sLW1kLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCJpZGVudGl0eS5wcm92aWRlcklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlkZW50aXR5LmRpc3BsYXlOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlkZW50aXR5LnVzZXJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlkZW50aXR5LmNvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGZlZGVyYXRlZElkZW50aXR5LnJlbW92ZUxpbmtQb3NzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cInVybC5zb2NpYWxVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZD1cInBvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGF0ZUNoZWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJyZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicHJvdmlkZXJJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpZGVudGl0eS5wcm92aWRlcklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidyZW1vdmUtbGluay0nICsgaWRlbnRpdHkucHJvdmlkZXJJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdkb1JlbW92ZScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwidXJsLnNvY2lhbFVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9XCJwb3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1pbmxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3RhdGVDaGVja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic3RhdGVDaGVja2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImFkZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInByb3ZpZGVySWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpZGVudGl0eS5wcm92aWRlcklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidhZGQtbGluay0nICsgaWRlbnRpdHkucHJvdmlkZXJJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdkb0FkZCcpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2tjLWFjY291bnQtdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
2
+ import { type ClassKey } from 'keycloakify/account';
3
+ import { type I18n } from '../../i18n';
4
+ import { type KcContext } from '../../KcContext';
5
+ import * as i0 from "@angular/core";
6
+ export declare class LogComponent extends ComponentReference {
7
+ i18n: I18n;
8
+ kcContext: KcContext.Log;
9
+ doUseDefaultCss: boolean;
10
+ classes: Partial<Record<ClassKey, string>>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<LogComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<LogComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,36 @@
1
+ import { DatePipe, NgClass } from '@angular/common';
2
+ import { Component, forwardRef, inject } from '@angular/core';
3
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
4
+ import { TemplateComponent } from '../../../account/containers/template.component';
5
+ import { KcClassDirective } from '../../../account/directives/kc-class.directive';
6
+ import { ACCOUNT_CLASSES } from '../../../account/tokens/classes.token';
7
+ import { ACCOUNT_I18N } from '../../../account/tokens/i18n.token';
8
+ import { KC_ACCOUNT_CONTEXT } from '../../../account/tokens/kc-context.token';
9
+ import { USE_DEFAULT_CSS } from '../../../lib/tokens/use-default-css.token';
10
+ import * as i0 from "@angular/core";
11
+ export class LogComponent extends ComponentReference {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.i18n = inject(ACCOUNT_I18N);
15
+ this.kcContext = inject(KC_ACCOUNT_CONTEXT);
16
+ this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
17
+ this.classes = inject(ACCOUNT_CLASSES);
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LogComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: LogComponent, isStandalone: true, selector: "kc-root", providers: [
21
+ {
22
+ provide: ComponentReference,
23
+ useExisting: forwardRef(() => LogComponent)
24
+ }
25
+ ], usesInheritance: true, ngImport: i0, template: "@let log = kcContext.log;\n\n<kc-account-template [active]=\"'log'\">\n <ng-container content>\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('accountLogHtmlTitle') }}</h2>\n </div>\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <td>{{ i18n.msgStr('date') }}</td>\n <td>{{ i18n.msgStr('event') }}</td>\n <td>{{ i18n.msgStr('ip') }}</td>\n <td>{{ i18n.msgStr('client') }}</td>\n <td>{{ i18n.msgStr('details') }}</td>\n </tr>\n </thead>\n\n <tbody>\n @for (event of log.events; track event) {\n <tr>\n <td>{{ event.date ? (event.date | date) : '' }}</td>\n <td>{{ event.event }}</td>\n <td>{{ event.ipAddress }}</td>\n <td>{{ event.client || '' }}</td>\n <td>\n @for (detail of event.details; track detail; let last = $last) {\n <span>\n {{ detail.key }} = {{ detail.value }}\n @if (!last) {\n ,&nbsp;\n }\n </span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </ng-container>\n</kc-account-template>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: TemplateComponent, selector: "kc-account-template", inputs: ["active"] }, { kind: "pipe", type: DatePipe, name: "date" }] }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: LogComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass, DatePipe], selector: 'kc-root', providers: [
30
+ {
31
+ provide: ComponentReference,
32
+ useExisting: forwardRef(() => LogComponent)
33
+ }
34
+ ], template: "@let log = kcContext.log;\n\n<kc-account-template [active]=\"'log'\">\n <ng-container content>\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('accountLogHtmlTitle') }}</h2>\n </div>\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <td>{{ i18n.msgStr('date') }}</td>\n <td>{{ i18n.msgStr('event') }}</td>\n <td>{{ i18n.msgStr('ip') }}</td>\n <td>{{ i18n.msgStr('client') }}</td>\n <td>{{ i18n.msgStr('details') }}</td>\n </tr>\n </thead>\n\n <tbody>\n @for (event of log.events; track event) {\n <tr>\n <td>{{ event.date ? (event.date | date) : '' }}</td>\n <td>{{ event.event }}</td>\n <td>{{ event.ipAddress }}</td>\n <td>{{ event.client || '' }}</td>\n <td>\n @for (detail of event.details; track detail; let last = $last) {\n <span>\n {{ detail.key }} = {{ detail.value }}\n @if (!last) {\n ,&nbsp;\n }\n </span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </ng-container>\n</kc-account-template>\n" }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tleWNsb2FraWZ5LWFuZ3VsYXIvc3JjL2FjY291bnQvcGFnZXMvbG9nL2xvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9ha2lmeS1hbmd1bGFyL3NyYy9hY2NvdW50L3BhZ2VzL2xvZy9sb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBaUJ4RixNQUFNLE9BQU8sWUFBYSxTQUFRLGtCQUFrQjtJQVpwRDs7UUFhSSxTQUFJLEdBQUcsTUFBTSxDQUFPLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQTRDLGtCQUFrQixDQUFDLENBQUM7UUFDekUsb0JBQWUsR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBb0MsZUFBZSxDQUFDLENBQUM7S0FDakY7OEdBTFksWUFBWTtrR0FBWixZQUFZLHNEQVBWO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7YUFDOUM7U0FDSixpREN2QkwsNnhEQTRDQSw0Q0Q3QmMsZ0JBQWdCLCtGQUFFLGlCQUFpQiwrRUFBVyxRQUFROzsyRkFVdkQsWUFBWTtrQkFaeEIsU0FBUztpQ0FDTSxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLFlBQ3ZELFNBQVMsYUFFUjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUM7eUJBQzlDO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFJlZmVyZW5jZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY2xhc3Nlcy9jb21wb25lbnQtcmVmZXJlbmNlLmNsYXNzJztcbmltcG9ydCB7IFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9jb250YWluZXJzL3RlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLY0NsYXNzRGlyZWN0aXZlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9kaXJlY3RpdmVzL2tjLWNsYXNzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBQ0NPVU5UX0NMQVNTRVMgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9jbGFzc2VzLnRva2VuJztcbmltcG9ydCB7IEFDQ09VTlRfSTE4TiB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2kxOG4udG9rZW4nO1xuaW1wb3J0IHsgS0NfQUNDT1VOVF9DT05URVhUIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMva2MtY29udGV4dC50b2tlbic7XG5pbXBvcnQgeyBVU0VfREVGQVVMVF9DU1MgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvdG9rZW5zL3VzZS1kZWZhdWx0LWNzcy50b2tlbic7XG5pbXBvcnQgeyB0eXBlIENsYXNzS2V5IH0gZnJvbSAna2V5Y2xvYWtpZnkvYWNjb3VudCc7XG5pbXBvcnQgeyB0eXBlIEkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IHR5cGUgS2NDb250ZXh0IH0gZnJvbSAnLi4vLi4vS2NDb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS2NDbGFzc0RpcmVjdGl2ZSwgVGVtcGxhdGVDb21wb25lbnQsIE5nQ2xhc3MsIERhdGVQaXBlXSxcbiAgICBzZWxlY3RvcjogJ2tjLXJvb3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ29tcG9uZW50UmVmZXJlbmNlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTG9nQ29tcG9uZW50KVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBMb2dDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRSZWZlcmVuY2Uge1xuICAgIGkxOG4gPSBpbmplY3Q8STE4bj4oQUNDT1VOVF9JMThOKTtcbiAgICBrY0NvbnRleHQgPSBpbmplY3Q8RXh0cmFjdDxLY0NvbnRleHQsIHsgcGFnZUlkOiAnbG9nLmZ0bCcgfT4+KEtDX0FDQ09VTlRfQ09OVEVYVCk7XG4gICAgb3ZlcnJpZGUgZG9Vc2VEZWZhdWx0Q3NzID0gaW5qZWN0PGJvb2xlYW4+KFVTRV9ERUZBVUxUX0NTUyk7XG4gICAgb3ZlcnJpZGUgY2xhc3NlcyA9IGluamVjdDxQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4+KEFDQ09VTlRfQ0xBU1NFUyk7XG59XG4iLCJAbGV0IGxvZyA9IGtjQ29udGV4dC5sb2c7XG5cbjxrYy1hY2NvdW50LXRlbXBsYXRlIFthY3RpdmVdPVwiJ2xvZydcIj5cbiAgICA8bmctY29udGFpbmVyIGNvbnRlbnQ+XG4gICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjQ29udGVudFdyYXBwZXJDbGFzcydcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgICAgICA8aDI+e3sgaTE4bi5tc2dTdHIoJ2FjY291bnRMb2dIdG1sVGl0bGUnKSB9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGkxOG4ubXNnU3RyKCdkYXRlJykgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGkxOG4ubXNnU3RyKCdldmVudCcpIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpMThuLm1zZ1N0cignaXAnKSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgaTE4bi5tc2dTdHIoJ2NsaWVudCcpIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpMThuLm1zZ1N0cignZGV0YWlscycpIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChldmVudCBvZiBsb2cuZXZlbnRzOyB0cmFjayBldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBldmVudC5kYXRlID8gKGV2ZW50LmRhdGUgfCBkYXRlKSA6ICcnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgZXZlbnQuZXZlbnQgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBldmVudC5pcEFkZHJlc3MgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBldmVudC5jbGllbnQgfHwgJycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZGV0YWlsIG9mIGV2ZW50LmRldGFpbHM7IHRyYWNrIGRldGFpbDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGV0YWlsLmtleSB9fSA9IHt7IGRldGFpbC52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWxhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9rYy1hY2NvdW50LXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,28 @@
1
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
2
+ import { type ClassKey } from 'keycloakify/account';
3
+ import { type I18n } from '../../i18n';
4
+ import { type KcContext } from '../../KcContext';
5
+ import * as i0 from "@angular/core";
6
+ export declare class PasswordComponent extends ComponentReference {
7
+ i18n: I18n;
8
+ kcContext: KcContext.Password;
9
+ doUseDefaultCss: boolean;
10
+ classes: Partial<Record<ClassKey, string>>;
11
+ additionalClasses: Partial<Record<ClassKey, string>>;
12
+ currentPassword: import("@angular/core").WritableSignal<string>;
13
+ newPassword: import("@angular/core").WritableSignal<string>;
14
+ newPasswordConfirm: import("@angular/core").WritableSignal<string>;
15
+ newPasswordError: import("@angular/core").WritableSignal<string>;
16
+ newPasswordConfirmError: import("@angular/core").WritableSignal<string>;
17
+ hasNewPasswordBlurred: import("@angular/core").WritableSignal<boolean>;
18
+ hasNewPasswordConfirmBlurred: import("@angular/core").WritableSignal<boolean>;
19
+ constructor();
20
+ checkNewPassword(newPassword: string): void;
21
+ checkNewPasswordConfirm(newPasswordConfirm: string): void;
22
+ onNewPasswordChange(value: string): void;
23
+ onNewPasswordBlur(): void;
24
+ onNewPasswordConfirmChange(value: string): void;
25
+ onNewPasswordConfirmBlur(): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<PasswordComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<PasswordComponent, "kc-root", never, {}, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,107 @@
1
+ import { NgClass } from '@angular/common';
2
+ import { Component, forwardRef, inject, signal } from '@angular/core';
3
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
4
+ import { TemplateComponent } from '../../../account/containers/template.component';
5
+ import { KcClassDirective } from '../../../account/directives/kc-class.directive';
6
+ import { ACCOUNT_CLASSES } from '../../../account/tokens/classes.token';
7
+ import { ACCOUNT_I18N } from '../../../account/tokens/i18n.token';
8
+ import { KC_ACCOUNT_CONTEXT } from '../../../account/tokens/kc-context.token';
9
+ import { USE_DEFAULT_CSS } from '../../../lib/tokens/use-default-css.token';
10
+ import * as i0 from "@angular/core";
11
+ export class PasswordComponent extends ComponentReference {
12
+ constructor() {
13
+ super();
14
+ this.i18n = inject(ACCOUNT_I18N);
15
+ this.kcContext = inject(KC_ACCOUNT_CONTEXT);
16
+ this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
17
+ this.classes = inject(ACCOUNT_CLASSES);
18
+ this.additionalClasses = {
19
+ kcBodyClass: `${this.classes?.kcBodyClass} password`
20
+ };
21
+ this.currentPassword = signal('');
22
+ this.newPassword = signal('');
23
+ this.newPasswordConfirm = signal('');
24
+ this.newPasswordError = signal('');
25
+ this.newPasswordConfirmError = signal('');
26
+ this.hasNewPasswordBlurred = signal(false);
27
+ this.hasNewPasswordConfirmBlurred = signal(false);
28
+ // @ts-ignore
29
+ window.kcContext = {
30
+ ...this.kcContext,
31
+ message: (() => {
32
+ if (this.newPasswordError() !== '') {
33
+ return {
34
+ type: 'error',
35
+ summary: this.newPasswordError()
36
+ };
37
+ }
38
+ if (this.newPasswordConfirmError() !== '') {
39
+ return {
40
+ type: 'error',
41
+ summary: this.newPasswordConfirmError()
42
+ };
43
+ }
44
+ return this.kcContext.message;
45
+ })()
46
+ };
47
+ }
48
+ checkNewPassword(newPassword) {
49
+ if (!this.kcContext.password.passwordSet)
50
+ return;
51
+ if (newPassword === this.currentPassword()) {
52
+ this.newPasswordError.set('newPasswordSameAsOld');
53
+ }
54
+ else {
55
+ this.newPasswordError.set('');
56
+ }
57
+ }
58
+ checkNewPasswordConfirm(newPasswordConfirm) {
59
+ if (newPasswordConfirm === '')
60
+ return;
61
+ if (newPasswordConfirm !== this.newPassword()) {
62
+ this.newPasswordConfirmError.set('passwordConfirmNotMatch');
63
+ }
64
+ else {
65
+ this.newPasswordConfirmError.set('');
66
+ }
67
+ }
68
+ onNewPasswordChange(value) {
69
+ const newPassword = value;
70
+ this.newPassword.set(newPassword);
71
+ if (this.hasNewPasswordBlurred()) {
72
+ this.checkNewPassword(newPassword);
73
+ }
74
+ }
75
+ onNewPasswordBlur() {
76
+ this.hasNewPasswordBlurred.set(true);
77
+ this.checkNewPassword(this.newPassword());
78
+ }
79
+ onNewPasswordConfirmChange(value) {
80
+ const newPasswordConfirm = value;
81
+ this.newPasswordConfirm.set(newPasswordConfirm);
82
+ if (this.hasNewPasswordConfirmBlurred()) {
83
+ this.checkNewPasswordConfirm(newPasswordConfirm);
84
+ }
85
+ }
86
+ onNewPasswordConfirmBlur() {
87
+ this.hasNewPasswordConfirmBlurred.set(true);
88
+ this.checkNewPasswordConfirm(this.newPasswordConfirm());
89
+ }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
91
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: PasswordComponent, isStandalone: true, selector: "kc-root", providers: [
92
+ {
93
+ provide: ComponentReference,
94
+ useExisting: forwardRef(() => PasswordComponent)
95
+ }
96
+ ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let password = kcContext.password;\n@let account = kcContext.account;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'password'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('changePasswordHtmlTitle') }}</h2>\n </div>\n <div class=\"col-md-2 subtitle\">\n <span class=\"subtitle\">{{ i18n.msgStr('allFieldsRequired') }}</span>\n </div>\n </div>\n\n <form\n [action]=\"url.passwordUrl\"\n class=\"form-horizontal\"\n method=\"post\"\n >\n <input\n type=\"text\"\n id=\"username\"\n name=\"username\"\n [value]=\"account.username ?? ''\"\n autoComplete=\"username\"\n readOnly\n [style.display]=\"'none'\"\n />\n\n @if (password.passwordSet) {\n <div class=\"form-group\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"password\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('password') }}\n </label>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"password\"\n name=\"password\"\n autoFocus\n autoComplete=\"current-password\"\n [value]=\"currentPassword()\"\n (change)=\"currentPassword.set($any($event.target).value)\"\n />\n </div>\n </div>\n }\n\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n\n <div class=\"form-group\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"password-new\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('passwordNew') }}\n </label>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"password-new\"\n name=\"password-new\"\n autoComplete=\"new-password\"\n [value]=\"newPassword()\"\n (change)=\"onNewPasswordChange($any($event.target).value)\"\n (blur)=\"onNewPasswordBlur()\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"password-confirm\"\n class=\"control-label two-lines\"\n >\n {{ i18n.msgStr('passwordConfirm') }}\n </label>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"password-confirm\"\n name=\"password-confirm\"\n autoComplete=\"new-password\"\n [value]=\"newPasswordConfirm()\"\n (change)=\"onNewPasswordConfirmChange($any($event.target).value)\"\n (blur)=\"onNewPasswordConfirmBlur()\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div\n id=\"kc-form-buttons\"\n class=\"col-md-offset-2 col-md-10 submit\"\n >\n <div>\n <button\n [disabled]=\"newPasswordError() !== '' || newPasswordConfirmError() !== ''\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n name=\"submitAction\"\n value=\"Save\"\n >\n {{ i18n.msgStr('doSave') }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </ng-container>\n</kc-account-template>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: TemplateComponent, selector: "kc-account-template", inputs: ["active"] }] }); }
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PasswordComponent, decorators: [{
99
+ type: Component,
100
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass], selector: 'kc-root', providers: [
101
+ {
102
+ provide: ComponentReference,
103
+ useExisting: forwardRef(() => PasswordComponent)
104
+ }
105
+ ], template: "@let url = kcContext.url;\n@let password = kcContext.password;\n@let account = kcContext.account;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'password'\">\n <ng-container content>\n <div class=\"row\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('changePasswordHtmlTitle') }}</h2>\n </div>\n <div class=\"col-md-2 subtitle\">\n <span class=\"subtitle\">{{ i18n.msgStr('allFieldsRequired') }}</span>\n </div>\n </div>\n\n <form\n [action]=\"url.passwordUrl\"\n class=\"form-horizontal\"\n method=\"post\"\n >\n <input\n type=\"text\"\n id=\"username\"\n name=\"username\"\n [value]=\"account.username ?? ''\"\n autoComplete=\"username\"\n readOnly\n [style.display]=\"'none'\"\n />\n\n @if (password.passwordSet) {\n <div class=\"form-group\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"password\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('password') }}\n </label>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"password\"\n name=\"password\"\n autoFocus\n autoComplete=\"current-password\"\n [value]=\"currentPassword()\"\n (change)=\"currentPassword.set($any($event.target).value)\"\n />\n </div>\n </div>\n }\n\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n\n <div class=\"form-group\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"password-new\"\n class=\"control-label\"\n >\n {{ i18n.msgStr('passwordNew') }}\n </label>\n </div>\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"password-new\"\n name=\"password-new\"\n autoComplete=\"new-password\"\n [value]=\"newPassword()\"\n (change)=\"onNewPasswordChange($any($event.target).value)\"\n (blur)=\"onNewPasswordBlur()\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div class=\"col-sm-2 col-md-2\">\n <label\n for=\"password-confirm\"\n class=\"control-label two-lines\"\n >\n {{ i18n.msgStr('passwordConfirm') }}\n </label>\n </div>\n\n <div class=\"col-sm-10 col-md-10\">\n <input\n type=\"password\"\n class=\"form-control\"\n id=\"password-confirm\"\n name=\"password-confirm\"\n autoComplete=\"new-password\"\n [value]=\"newPasswordConfirm()\"\n (change)=\"onNewPasswordConfirmChange($any($event.target).value)\"\n (blur)=\"onNewPasswordConfirmBlur()\"\n />\n </div>\n </div>\n\n <div class=\"form-group\">\n <div\n id=\"kc-form-buttons\"\n class=\"col-md-offset-2 col-md-10 submit\"\n >\n <div>\n <button\n [disabled]=\"newPasswordError() !== '' || newPasswordConfirmError() !== ''\"\n type=\"submit\"\n [kcClass]=\"['kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass']\"\n name=\"submitAction\"\n value=\"Save\"\n >\n {{ i18n.msgStr('doSave') }}\n </button>\n </div>\n </div>\n </div>\n </form>\n </ng-container>\n</kc-account-template>\n" }]
106
+ }], ctorParameters: () => [] });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2V5Y2xvYWtpZnktYW5ndWxhci9zcmMvYWNjb3VudC9wYWdlcy9wYXNzd29yZC9wYXNzd29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9ha2lmeS1hbmd1bGFyL3NyYy9hY2NvdW50L3BhZ2VzL3Bhc3N3b3JkL3Bhc3N3b3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOztBQWlCeEYsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGtCQUFrQjtJQWlCckQ7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQWpCWixTQUFJLEdBQUcsTUFBTSxDQUFPLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQWlELGtCQUFrQixDQUFDLENBQUM7UUFDOUUsb0JBQWUsR0FBRyxNQUFNLENBQVUsZUFBZSxDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBb0MsZUFBZSxDQUFDLENBQUM7UUFDckUsc0JBQWlCLEdBQXNDO1lBQzVELFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxXQUFXO1NBQ3ZELENBQUM7UUFFRixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6Qix1QkFBa0IsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLDRCQUF1QixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQywwQkFBcUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsaUNBQTRCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBSXpDLGFBQWE7UUFDYixNQUFNLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1gsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDakMsT0FBTzt3QkFDSCxJQUFJLEVBQUUsT0FBTzt3QkFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO3FCQUNuQyxDQUFDO2dCQUNOLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDeEMsT0FBTzt3QkFDSCxJQUFJLEVBQUUsT0FBTzt3QkFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFO3FCQUMxQyxDQUFDO2dCQUNOLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNsQyxDQUFDLENBQUMsRUFBRTtTQUNQLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBbUI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQ2pELElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxrQkFBMEI7UUFDOUMsSUFBSSxrQkFBa0IsS0FBSyxFQUFFO1lBQUUsT0FBTztRQUN0QyxJQUFJLGtCQUFrQixLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhO1FBQzdCLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztRQUUxQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELDBCQUEwQixDQUFDLEtBQWE7UUFDcEMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtRQUNwQixJQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7OEdBbkZRLGlCQUFpQjtrR0FBakIsaUJBQWlCLHNEQVBmO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQzthQUNuRDtTQUNKLGlEQ3ZCTCxpNEpBbUlBLDRDRHBIYyxnQkFBZ0IsK0ZBQUUsaUJBQWlCOzsyRkFVcEMsaUJBQWlCO2tCQVo3QixTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxZQUM3QyxTQUFTLGFBRVI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGtCQUFrQjs0QkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7eUJBQ25EO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWZlcmVuY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZS5jbGFzcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY29udGFpbmVycy90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvZGlyZWN0aXZlcy9rYy1jbGFzcy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQUNDT1VOVF9DTEFTU0VTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMvY2xhc3Nlcy50b2tlbic7XG5pbXBvcnQgeyBBQ0NPVU5UX0kxOE4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9pMThuLnRva2VuJztcbmltcG9ydCB7IEtDX0FDQ09VTlRfQ09OVEVYVCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2tjLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgVVNFX0RFRkFVTFRfQ1NTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3Rva2Vucy91c2UtZGVmYXVsdC1jc3MudG9rZW4nO1xuaW1wb3J0IHsgdHlwZSBDbGFzc0tleSB9IGZyb20gJ2tleWNsb2FraWZ5L2FjY291bnQnO1xuaW1wb3J0IHsgdHlwZSBJMThuIH0gZnJvbSAnLi4vLi4vaTE4bic7XG5pbXBvcnQgeyB0eXBlIEtjQ29udGV4dCB9IGZyb20gJy4uLy4uL0tjQ29udGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0tjQ2xhc3NEaXJlY3RpdmUsIFRlbXBsYXRlQ29tcG9uZW50LCBOZ0NsYXNzXSxcbiAgICBzZWxlY3RvcjogJ2tjLXJvb3QnLFxuICAgIHRlbXBsYXRlVXJsOiAncGFzc3dvcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDb21wb25lbnRSZWZlcmVuY2UsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQYXNzd29yZENvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRSZWZlcmVuY2Uge1xuICAgIGkxOG4gPSBpbmplY3Q8STE4bj4oQUNDT1VOVF9JMThOKTtcbiAgICBrY0NvbnRleHQgPSBpbmplY3Q8RXh0cmFjdDxLY0NvbnRleHQsIHsgcGFnZUlkOiAncGFzc3dvcmQuZnRsJyB9Pj4oS0NfQUNDT1VOVF9DT05URVhUKTtcbiAgICBvdmVycmlkZSBkb1VzZURlZmF1bHRDc3MgPSBpbmplY3Q8Ym9vbGVhbj4oVVNFX0RFRkFVTFRfQ1NTKTtcbiAgICBvdmVycmlkZSBjbGFzc2VzID0gaW5qZWN0PFBhcnRpYWw8UmVjb3JkPENsYXNzS2V5LCBzdHJpbmc+Pj4oQUNDT1VOVF9DTEFTU0VTKTtcbiAgICBvdmVycmlkZSBhZGRpdGlvbmFsQ2xhc3NlczogUGFydGlhbDxSZWNvcmQ8Q2xhc3NLZXksIHN0cmluZz4+ID0ge1xuICAgICAgICBrY0JvZHlDbGFzczogYCR7dGhpcy5jbGFzc2VzPy5rY0JvZHlDbGFzc30gcGFzc3dvcmRgXG4gICAgfTtcblxuICAgIGN1cnJlbnRQYXNzd29yZCA9IHNpZ25hbCgnJyk7XG4gICAgbmV3UGFzc3dvcmQgPSBzaWduYWwoJycpO1xuICAgIG5ld1Bhc3N3b3JkQ29uZmlybSA9IHNpZ25hbCgnJyk7XG4gICAgbmV3UGFzc3dvcmRFcnJvciA9IHNpZ25hbCgnJyk7XG4gICAgbmV3UGFzc3dvcmRDb25maXJtRXJyb3IgPSBzaWduYWwoJycpO1xuICAgIGhhc05ld1Bhc3N3b3JkQmx1cnJlZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgaGFzTmV3UGFzc3dvcmRDb25maXJtQmx1cnJlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB3aW5kb3cua2NDb250ZXh0ID0ge1xuICAgICAgICAgICAgLi4udGhpcy5rY0NvbnRleHQsXG4gICAgICAgICAgICBtZXNzYWdlOiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5ld1Bhc3N3b3JkRXJyb3IoKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLm5ld1Bhc3N3b3JkRXJyb3IoKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXdQYXNzd29yZENvbmZpcm1FcnJvcigpICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMubmV3UGFzc3dvcmRDb25maXJtRXJyb3IoKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5rY0NvbnRleHQubWVzc2FnZTtcbiAgICAgICAgICAgIH0pKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjaGVja05ld1Bhc3N3b3JkKG5ld1Bhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmtjQ29udGV4dC5wYXNzd29yZC5wYXNzd29yZFNldCkgcmV0dXJuO1xuICAgICAgICBpZiAobmV3UGFzc3dvcmQgPT09IHRoaXMuY3VycmVudFBhc3N3b3JkKCkpIHtcbiAgICAgICAgICAgIHRoaXMubmV3UGFzc3dvcmRFcnJvci5zZXQoJ25ld1Bhc3N3b3JkU2FtZUFzT2xkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5ld1Bhc3N3b3JkRXJyb3Iuc2V0KCcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja05ld1Bhc3N3b3JkQ29uZmlybShuZXdQYXNzd29yZENvbmZpcm06IHN0cmluZykge1xuICAgICAgICBpZiAobmV3UGFzc3dvcmRDb25maXJtID09PSAnJykgcmV0dXJuO1xuICAgICAgICBpZiAobmV3UGFzc3dvcmRDb25maXJtICE9PSB0aGlzLm5ld1Bhc3N3b3JkKCkpIHtcbiAgICAgICAgICAgIHRoaXMubmV3UGFzc3dvcmRDb25maXJtRXJyb3Iuc2V0KCdwYXNzd29yZENvbmZpcm1Ob3RNYXRjaCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZXdQYXNzd29yZENvbmZpcm1FcnJvci5zZXQoJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25OZXdQYXNzd29yZENoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5ld1Bhc3N3b3JkID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5uZXdQYXNzd29yZC5zZXQobmV3UGFzc3dvcmQpO1xuICAgICAgICBpZiAodGhpcy5oYXNOZXdQYXNzd29yZEJsdXJyZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja05ld1Bhc3N3b3JkKG5ld1Bhc3N3b3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTmV3UGFzc3dvcmRCbHVyKCkge1xuICAgICAgICB0aGlzLmhhc05ld1Bhc3N3b3JkQmx1cnJlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2hlY2tOZXdQYXNzd29yZCh0aGlzLm5ld1Bhc3N3b3JkKCkpO1xuICAgIH1cblxuICAgIG9uTmV3UGFzc3dvcmRDb25maXJtQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbmV3UGFzc3dvcmRDb25maXJtID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5uZXdQYXNzd29yZENvbmZpcm0uc2V0KG5ld1Bhc3N3b3JkQ29uZmlybSk7XG4gICAgICAgIGlmICh0aGlzLmhhc05ld1Bhc3N3b3JkQ29uZmlybUJsdXJyZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja05ld1Bhc3N3b3JkQ29uZmlybShuZXdQYXNzd29yZENvbmZpcm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25OZXdQYXNzd29yZENvbmZpcm1CbHVyKCkge1xuICAgICAgICB0aGlzLmhhc05ld1Bhc3N3b3JkQ29uZmlybUJsdXJyZWQuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmNoZWNrTmV3UGFzc3dvcmRDb25maXJtKHRoaXMubmV3UGFzc3dvcmRDb25maXJtKCkpO1xuICAgIH1cbn1cbiIsIkBsZXQgdXJsID0ga2NDb250ZXh0LnVybDtcbkBsZXQgcGFzc3dvcmQgPSBrY0NvbnRleHQucGFzc3dvcmQ7XG5AbGV0IGFjY291bnQgPSBrY0NvbnRleHQuYWNjb3VudDtcbkBsZXQgc3RhdGVDaGVja2VyID0ga2NDb250ZXh0LnN0YXRlQ2hlY2tlcjtcblxuPGtjLWFjY291bnQtdGVtcGxhdGUgW2FjdGl2ZV09XCIncGFzc3dvcmQnXCI+XG4gICAgPG5nLWNvbnRhaW5lciBjb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgPGgyPnt7IGkxOG4ubXNnU3RyKCdjaGFuZ2VQYXNzd29yZEh0bWxUaXRsZScpIH19PC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIHN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJ0aXRsZVwiPnt7IGkxOG4ubXNnU3RyKCdhbGxGaWVsZHNSZXF1aXJlZCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgICBbYWN0aW9uXT1cInVybC5wYXNzd29yZFVybFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiXG4gICAgICAgICAgICBtZXRob2Q9XCJwb3N0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGlkPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFjY291bnQudXNlcm5hbWUgPz8gJydcIlxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cInVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICByZWFkT25seVxuICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICBAaWYgKHBhc3N3b3JkLnBhc3N3b3JkU2V0KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigncGFzc3dvcmQnKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTAgY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cImN1cnJlbnQtcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50UGFzc3dvcmQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjdXJyZW50UGFzc3dvcmQuc2V0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBhc3N3b3JkLW5ld1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigncGFzc3dvcmROZXcnKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTAgY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicGFzc3dvcmQtbmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZC1uZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJuZXdQYXNzd29yZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25OZXdQYXNzd29yZENoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbk5ld1Bhc3N3b3JkQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiBjb2wtbWQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBhc3N3b3JkLWNvbmZpcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsIHR3by1saW5lc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdwYXNzd29yZENvbmZpcm0nKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMCBjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwYXNzd29yZC1jb25maXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZC1jb25maXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibmV3UGFzc3dvcmRDb25maXJtKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk5ld1Bhc3N3b3JkQ29uZmlybUNoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbk5ld1Bhc3N3b3JkQ29uZmlybUJsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGlkPVwia2MtZm9ybS1idXR0b25zXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtb2Zmc2V0LTIgY29sLW1kLTEwIHN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJuZXdQYXNzd29yZEVycm9yKCkgIT09ICcnIHx8IG5ld1Bhc3N3b3JkQ29uZmlybUVycm9yKCkgIT09ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCJbJ2tjQnV0dG9uQ2xhc3MnLCAna2NCdXR0b25QcmltYXJ5Q2xhc3MnLCAna2NCdXR0b25MYXJnZUNsYXNzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzdWJtaXRBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiU2F2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ2RvU2F2ZScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9rYy1hY2NvdW50LXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,13 @@
1
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
2
+ import { type ClassKey } from 'keycloakify/account';
3
+ import { type I18n } from '../../i18n';
4
+ import { type KcContext } from '../../KcContext';
5
+ import * as i0 from "@angular/core";
6
+ export declare class SessionsComponent extends ComponentReference {
7
+ i18n: I18n;
8
+ kcContext: KcContext.Sessions;
9
+ doUseDefaultCss: boolean;
10
+ classes: Partial<Record<ClassKey, string>>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<SessionsComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<SessionsComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,36 @@
1
+ import { NgClass } from '@angular/common';
2
+ import { Component, forwardRef, inject } from '@angular/core';
3
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
4
+ import { TemplateComponent } from '../../../account/containers/template.component';
5
+ import { KcClassDirective } from '../../../account/directives/kc-class.directive';
6
+ import { ACCOUNT_CLASSES } from '../../../account/tokens/classes.token';
7
+ import { ACCOUNT_I18N } from '../../../account/tokens/i18n.token';
8
+ import { KC_ACCOUNT_CONTEXT } from '../../../account/tokens/kc-context.token';
9
+ import { USE_DEFAULT_CSS } from '../../../lib/tokens/use-default-css.token';
10
+ import * as i0 from "@angular/core";
11
+ export class SessionsComponent extends ComponentReference {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.i18n = inject(ACCOUNT_I18N);
15
+ this.kcContext = inject(KC_ACCOUNT_CONTEXT);
16
+ this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
17
+ this.classes = inject(ACCOUNT_CLASSES);
18
+ }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: SessionsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: SessionsComponent, isStandalone: true, selector: "kc-root", providers: [
21
+ {
22
+ provide: ComponentReference,
23
+ useExisting: forwardRef(() => SessionsComponent)
24
+ }
25
+ ], usesInheritance: true, ngImport: i0, template: "@let url = kcContext.url;\n@let sessions = kcContext.sessions;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'sessions'\">\n <ng-container content>\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('sessionsHtmlTitle') }}</h2>\n </div>\n </div>\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ i18n.msgStr('ip') }}</th>\n <th>{{ i18n.msgStr('started') }}</th>\n <th>{{ i18n.msgStr('lastAccess') }}</th>\n <th>{{ i18n.msgStr('expires') }}</th>\n <th>{{ i18n.msgStr('clients') }}</th>\n </tr>\n </thead>\n\n <tbody role=\"rowgroup\">\n @for (session of sessions.sessions; track session) {\n <tr>\n <td>{{ session.ipAddress }}</td>\n <td>{{ session?.started }}</td>\n <td>{{ session?.lastAccess }}</td>\n <td>{{ session?.expires }}</td>\n <td>\n @for (client of session.clients; track client) {\n <div>\n {{ client }}\n <br />\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <form\n [action]=\"url.sessionsUrl\"\n method=\"post\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <button\n id=\"logout-all-sessions\"\n type=\"submit\"\n [kcClass]=\"['kcButtonDefaultClass', 'kcButtonClass']\"\n >\n {{ i18n.msgStr('doLogOutAllSessions') }}\n </button>\n </form>\n </ng-container>\n</kc-account-template>\n", dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: TemplateComponent, selector: "kc-account-template", inputs: ["active"] }] }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: SessionsComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ standalone: true, imports: [KcClassDirective, TemplateComponent, NgClass], selector: 'kc-root', providers: [
30
+ {
31
+ provide: ComponentReference,
32
+ useExisting: forwardRef(() => SessionsComponent)
33
+ }
34
+ ], template: "@let url = kcContext.url;\n@let sessions = kcContext.sessions;\n@let stateChecker = kcContext.stateChecker;\n\n<kc-account-template [active]=\"'sessions'\">\n <ng-container content>\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div class=\"col-md-10\">\n <h2>{{ i18n.msgStr('sessionsHtmlTitle') }}</h2>\n </div>\n </div>\n\n <table class=\"table table-striped table-bordered\">\n <thead>\n <tr>\n <th>{{ i18n.msgStr('ip') }}</th>\n <th>{{ i18n.msgStr('started') }}</th>\n <th>{{ i18n.msgStr('lastAccess') }}</th>\n <th>{{ i18n.msgStr('expires') }}</th>\n <th>{{ i18n.msgStr('clients') }}</th>\n </tr>\n </thead>\n\n <tbody role=\"rowgroup\">\n @for (session of sessions.sessions; track session) {\n <tr>\n <td>{{ session.ipAddress }}</td>\n <td>{{ session?.started }}</td>\n <td>{{ session?.lastAccess }}</td>\n <td>{{ session?.expires }}</td>\n <td>\n @for (client of session.clients; track client) {\n <div>\n {{ client }}\n <br />\n </div>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n\n <form\n [action]=\"url.sessionsUrl\"\n method=\"post\"\n >\n <input\n type=\"hidden\"\n id=\"stateChecker\"\n name=\"stateChecker\"\n [value]=\"stateChecker\"\n />\n <button\n id=\"logout-all-sessions\"\n type=\"submit\"\n [kcClass]=\"['kcButtonDefaultClass', 'kcButtonClass']\"\n >\n {{ i18n.msgStr('doLogOutAllSessions') }}\n </button>\n </form>\n </ng-container>\n</kc-account-template>\n" }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2V5Y2xvYWtpZnktYW5ndWxhci9zcmMvYWNjb3VudC9wYWdlcy9zZXNzaW9ucy9zZXNzaW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZXljbG9ha2lmeS1hbmd1bGFyL3NyYy9hY2NvdW50L3BhZ2VzL3Nlc3Npb25zL3Nlc3Npb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBaUJ4RixNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQWtCO0lBWnpEOztRQWFJLFNBQUksR0FBRyxNQUFNLENBQU8sWUFBWSxDQUFDLENBQUM7UUFDbEMsY0FBUyxHQUFHLE1BQU0sQ0FBaUQsa0JBQWtCLENBQUMsQ0FBQztRQUM5RSxvQkFBZSxHQUFHLE1BQU0sQ0FBVSxlQUFlLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsTUFBTSxDQUFvQyxlQUFlLENBQUMsQ0FBQztLQUNqRjs4R0FMWSxpQkFBaUI7a0dBQWpCLGlCQUFpQixzREFQZjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7YUFDbkQ7U0FDSixpREN2QkwsK3JFQStEQSw0Q0RoRGMsZ0JBQWdCLCtGQUFFLGlCQUFpQjs7MkZBVXBDLGlCQUFpQjtrQkFaN0IsU0FBUztpQ0FDTSxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsWUFDN0MsU0FBUyxhQUVSO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxrQkFBa0I7NEJBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDO3lCQUNuRDtxQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFJlZmVyZW5jZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvY2xhc3Nlcy9jb21wb25lbnQtcmVmZXJlbmNlLmNsYXNzJztcbmltcG9ydCB7IFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9jb250YWluZXJzL3RlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLY0NsYXNzRGlyZWN0aXZlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC9kaXJlY3RpdmVzL2tjLWNsYXNzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBQ0NPVU5UX0NMQVNTRVMgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9hY2NvdW50L3Rva2Vucy9jbGFzc2VzLnRva2VuJztcbmltcG9ydCB7IEFDQ09VTlRfSTE4TiB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2FjY291bnQvdG9rZW5zL2kxOG4udG9rZW4nO1xuaW1wb3J0IHsgS0NfQUNDT1VOVF9DT05URVhUIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvYWNjb3VudC90b2tlbnMva2MtY29udGV4dC50b2tlbic7XG5pbXBvcnQgeyBVU0VfREVGQVVMVF9DU1MgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvdG9rZW5zL3VzZS1kZWZhdWx0LWNzcy50b2tlbic7XG5pbXBvcnQgeyB0eXBlIENsYXNzS2V5IH0gZnJvbSAna2V5Y2xvYWtpZnkvYWNjb3VudCc7XG5pbXBvcnQgeyB0eXBlIEkxOG4gfSBmcm9tICcuLi8uLi9pMThuJztcbmltcG9ydCB7IHR5cGUgS2NDb250ZXh0IH0gZnJvbSAnLi4vLi4vS2NDb250ZXh0JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS2NDbGFzc0RpcmVjdGl2ZSwgVGVtcGxhdGVDb21wb25lbnQsIE5nQ2xhc3NdLFxuICAgIHNlbGVjdG9yOiAna2Mtcm9vdCcsXG4gICAgdGVtcGxhdGVVcmw6ICdzZXNzaW9ucy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlc3Npb25zQ29tcG9uZW50KVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZXNzaW9uc0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFJlZmVyZW5jZSB7XG4gICAgaTE4biA9IGluamVjdDxJMThuPihBQ0NPVU5UX0kxOE4pO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxFeHRyYWN0PEtjQ29udGV4dCwgeyBwYWdlSWQ6ICdzZXNzaW9ucy5mdGwnIH0+PihLQ19BQ0NPVU5UX0NPTlRFWFQpO1xuICAgIG92ZXJyaWRlIGRvVXNlRGVmYXVsdENzcyA9IGluamVjdDxib29sZWFuPihVU0VfREVGQVVMVF9DU1MpO1xuICAgIG92ZXJyaWRlIGNsYXNzZXMgPSBpbmplY3Q8UGFydGlhbDxSZWNvcmQ8Q2xhc3NLZXksIHN0cmluZz4+PihBQ0NPVU5UX0NMQVNTRVMpO1xufVxuIiwiQGxldCB1cmwgPSBrY0NvbnRleHQudXJsO1xuQGxldCBzZXNzaW9ucyA9IGtjQ29udGV4dC5zZXNzaW9ucztcbkBsZXQgc3RhdGVDaGVja2VyID0ga2NDb250ZXh0LnN0YXRlQ2hlY2tlcjtcblxuPGtjLWFjY291bnQtdGVtcGxhdGUgW2FjdGl2ZV09XCInc2Vzc2lvbnMnXCI+XG4gICAgPG5nLWNvbnRhaW5lciBjb250ZW50PlxuICAgICAgICA8ZGl2IFtrY0NsYXNzXT1cIidrY0NvbnRlbnRXcmFwcGVyQ2xhc3MnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgPGgyPnt7IGkxOG4ubXNnU3RyKCdzZXNzaW9uc0h0bWxUaXRsZScpIH19PC9oMj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgaTE4bi5tc2dTdHIoJ2lwJykgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgaTE4bi5tc2dTdHIoJ3N0YXJ0ZWQnKSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyBpMThuLm1zZ1N0cignbGFzdEFjY2VzcycpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7IGkxOG4ubXNnU3RyKCdleHBpcmVzJykgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgaTE4bi5tc2dTdHIoJ2NsaWVudHMnKSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgIDx0Ym9keSByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChzZXNzaW9uIG9mIHNlc3Npb25zLnNlc3Npb25zOyB0cmFjayBzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBzZXNzaW9uLmlwQWRkcmVzcyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgc2Vzc2lvbj8uc3RhcnRlZCB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgc2Vzc2lvbj8ubGFzdEFjY2VzcyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgc2Vzc2lvbj8uZXhwaXJlcyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY2xpZW50IG9mIHNlc3Npb24uY2xpZW50czsgdHJhY2sgY2xpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjbGllbnQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgPGZvcm1cbiAgICAgICAgICAgIFthY3Rpb25dPVwidXJsLnNlc3Npb25zVXJsXCJcbiAgICAgICAgICAgIG1ldGhvZD1cInBvc3RcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBpZD1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInN0YXRlQ2hlY2tlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwibG9nb3V0LWFsbC1zZXNzaW9uc1wiXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiWydrY0J1dHRvbkRlZmF1bHRDbGFzcycsICdrY0J1dHRvbkNsYXNzJ11cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdkb0xvZ091dEFsbFNlc3Npb25zJykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2tjLWFjY291bnQtdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { ComponentReference } from '../../../account/classes/component-reference.class';
2
+ import { type ClassKey } from 'keycloakify/account';
3
+ import { type I18n } from '../../i18n';
4
+ import { type KcContext } from '../../KcContext';
5
+ import * as i0 from "@angular/core";
6
+ export declare class TotpComponent extends ComponentReference {
7
+ i18n: I18n;
8
+ kcContext: KcContext.Totp;
9
+ doUseDefaultCss: boolean;
10
+ classes: Partial<Record<ClassKey, string>>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<TotpComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<TotpComponent, "kc-root", never, {}, {}, never, never, true, never>;
13
+ }