@keycloakify/keycloak-account-ui 26.0.0-rc.3 → 260007.0.0

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 (464) hide show
  1. package/KcAccountUiLoader.d.ts +2 -4
  2. package/KcAccountUiLoader.js +34 -41
  3. package/KcAccountUiLoader.js.map +1 -1
  4. package/README.md +1 -50
  5. package/index.js.map +1 -1
  6. package/{KcAccountUi.js → keycloak-theme/account/KcAccountUi.tsx} +15 -7
  7. package/keycloak-theme/account/KcContext.ts +8 -0
  8. package/keycloak-theme/account/KcPage.tsx +11 -0
  9. package/{src → keycloak-theme/account}/account-security/AccountRow.tsx +8 -4
  10. package/{src → keycloak-theme/account}/account-security/DeviceActivity.tsx +11 -7
  11. package/{src → keycloak-theme/account}/account-security/LinkedAccounts.tsx +12 -8
  12. package/{src → keycloak-theme/account}/account-security/LinkedAccountsToolbar.tsx +4 -0
  13. package/{src → keycloak-theme/account}/account-security/SigningIn.tsx +12 -8
  14. package/{src → keycloak-theme/account}/api/constants.ts +4 -0
  15. package/{src → keycloak-theme/account}/api/methods.ts +9 -5
  16. package/{src → keycloak-theme/account}/api/parse-links.ts +4 -0
  17. package/{src → keycloak-theme/account}/api/parse-response.ts +6 -2
  18. package/{src → keycloak-theme/account}/api/representations.ts +4 -0
  19. package/{src → keycloak-theme/account}/api/request.ts +7 -3
  20. package/{src → keycloak-theme/account}/api.ts +11 -7
  21. package/{src → keycloak-theme/account}/applications/Applications.tsx +12 -8
  22. package/{src/public → keycloak-theme/account/assets}/content.ts +14 -20
  23. package/keycloak-theme/account/assets/favicon.svg +63 -0
  24. package/{src → keycloak-theme/account}/components/datalist/EmptyRow.tsx +4 -0
  25. package/{src → keycloak-theme/account}/components/page/Page.tsx +4 -0
  26. package/{src → keycloak-theme/account}/content/ContentComponent.tsx +10 -6
  27. package/keycloak-theme/account/content/fetchContent.ts +13 -0
  28. package/{src → keycloak-theme/account}/environment.ts +5 -1
  29. package/{src → keycloak-theme/account}/groups/Groups.tsx +9 -5
  30. package/{src → keycloak-theme/account/i18n}/i18n.ts +7 -5
  31. package/keycloak-theme/account/i18n/index.ts +5 -0
  32. package/{messages → keycloak-theme/account/i18n}/messages_ar.properties +8 -0
  33. package/{messages → keycloak-theme/account/i18n}/messages_ca.properties +8 -0
  34. package/{messages → keycloak-theme/account/i18n}/messages_cs.properties +8 -0
  35. package/{messages → keycloak-theme/account/i18n}/messages_da.properties +8 -0
  36. package/{messages → keycloak-theme/account/i18n}/messages_de.properties +8 -0
  37. package/{messages → keycloak-theme/account/i18n}/messages_el.properties +8 -0
  38. package/{messages → keycloak-theme/account/i18n}/messages_en.properties +8 -0
  39. package/{messages → keycloak-theme/account/i18n}/messages_es.properties +8 -0
  40. package/{messages → keycloak-theme/account/i18n}/messages_fa.properties +8 -0
  41. package/{messages → keycloak-theme/account/i18n}/messages_fi.properties +8 -0
  42. package/{messages → keycloak-theme/account/i18n}/messages_fr.properties +8 -0
  43. package/{messages → keycloak-theme/account/i18n}/messages_hu.properties +8 -0
  44. package/{messages → keycloak-theme/account/i18n}/messages_it.properties +8 -0
  45. package/{messages → keycloak-theme/account/i18n}/messages_ja.properties +8 -0
  46. package/{messages → keycloak-theme/account/i18n}/messages_ka.properties +8 -0
  47. package/{messages → keycloak-theme/account/i18n}/messages_lt.properties +8 -0
  48. package/{messages → keycloak-theme/account/i18n}/messages_lv.properties +8 -0
  49. package/{messages → keycloak-theme/account/i18n}/messages_nl.properties +8 -0
  50. package/{messages → keycloak-theme/account/i18n}/messages_no.properties +8 -0
  51. package/{messages → keycloak-theme/account/i18n}/messages_pl.properties +8 -0
  52. package/{messages → keycloak-theme/account/i18n}/messages_pt.properties +8 -0
  53. package/{messages → keycloak-theme/account/i18n}/messages_pt_BR.properties +8 -0
  54. package/{messages → keycloak-theme/account/i18n}/messages_ru.properties +8 -0
  55. package/{messages → keycloak-theme/account/i18n}/messages_sk.properties +8 -0
  56. package/{messages → keycloak-theme/account/i18n}/messages_sv.properties +8 -0
  57. package/{messages → keycloak-theme/account/i18n}/messages_th.properties +8 -0
  58. package/{messages → keycloak-theme/account/i18n}/messages_tr.properties +8 -0
  59. package/{messages → keycloak-theme/account/i18n}/messages_uk.properties +8 -0
  60. package/{messages → keycloak-theme/account/i18n}/messages_zh_CN.properties +8 -0
  61. package/{messages → keycloak-theme/account/i18n}/messages_zh_TW.properties +8 -0
  62. package/{src → keycloak-theme/account}/i18next.d.ts +4 -0
  63. package/{src → keycloak-theme/account}/oid4vci/Oid4Vci.tsx +9 -5
  64. package/{src → keycloak-theme/account}/organizations/Organizations.tsx +9 -5
  65. package/{src → keycloak-theme/account}/personal-info/PersonalInfo.tsx +13 -10
  66. package/{src → keycloak-theme/account}/resources/EditTheResource.tsx +8 -4
  67. package/{src → keycloak-theme/account}/resources/PermissionRequest.tsx +8 -4
  68. package/{src → keycloak-theme/account}/resources/ResourceToolbar.tsx +4 -0
  69. package/{src → keycloak-theme/account}/resources/Resources.tsx +6 -2
  70. package/{src → keycloak-theme/account}/resources/ResourcesTab.tsx +16 -12
  71. package/{src → keycloak-theme/account}/resources/ShareTheResource.tsx +9 -5
  72. package/{src → keycloak-theme/account}/resources/SharedWith.tsx +5 -1
  73. package/{src → keycloak-theme/account}/root/ErrorPage.tsx +4 -0
  74. package/{src → keycloak-theme/account}/root/Header.tsx +11 -6
  75. package/{src → keycloak-theme/account}/root/PageNav.tsx +9 -5
  76. package/{src → keycloak-theme/account}/root/Root.tsx +8 -4
  77. package/{src → keycloak-theme/account}/routes.tsx +18 -14
  78. package/{src → keycloak-theme/account}/utils/formatDate.ts +6 -3
  79. package/{src → keycloak-theme/account}/utils/joinPath.ts +4 -0
  80. package/{src → keycloak-theme/account}/utils/useAccountAlerts.ts +6 -2
  81. package/{src → keycloak-theme/account}/utils/usePromise.ts +4 -0
  82. package/package.json +18 -525
  83. package/src/KcAccountUiLoader.tsx +391 -370
  84. package/src/zKcContextLike.ts +31 -74
  85. package/tsconfig.tsbuildinfo +1 -0
  86. package/zKcContextLike.js +7 -7
  87. package/zKcContextLike.js.map +1 -1
  88. package/KcAccountUi.d.ts +0 -3
  89. package/KcAccountUi.js.map +0 -1
  90. package/account-security/AccountRow.d.ts +0 -8
  91. package/account-security/AccountRow.js +0 -37
  92. package/account-security/AccountRow.js.map +0 -1
  93. package/account-security/DeviceActivity.d.ts +0 -2
  94. package/account-security/DeviceActivity.js +0 -71
  95. package/account-security/DeviceActivity.js.map +0 -1
  96. package/account-security/LinkedAccounts.d.ts +0 -2
  97. package/account-security/LinkedAccounts.js +0 -40
  98. package/account-security/LinkedAccounts.js.map +0 -1
  99. package/account-security/LinkedAccountsToolbar.d.ts +0 -12
  100. package/account-security/LinkedAccountsToolbar.js +0 -24
  101. package/account-security/LinkedAccountsToolbar.js.map +0 -1
  102. package/account-security/SigningIn.d.ts +0 -2
  103. package/account-security/SigningIn.js +0 -65
  104. package/account-security/SigningIn.js.map +0 -1
  105. package/api/constants.d.ts +0 -2
  106. package/api/constants.js +0 -3
  107. package/api/constants.js.map +0 -1
  108. package/api/methods.d.ts +0 -31
  109. package/api/methods.js +0 -80
  110. package/api/methods.js.map +0 -1
  111. package/api/parse-links.d.ts +0 -5
  112. package/api/parse-links.js +0 -23
  113. package/api/parse-links.js.map +0 -1
  114. package/api/parse-response.d.ts +0 -5
  115. package/api/parse-response.js +0 -36
  116. package/api/parse-response.js.map +0 -1
  117. package/api/representations.d.ts +0 -202
  118. package/api/representations.js +0 -3
  119. package/api/representations.js.map +0 -1
  120. package/api/request.d.ts +0 -12
  121. package/api/request.js +0 -33
  122. package/api/request.js.map +0 -1
  123. package/api.d.ts +0 -13
  124. package/api.js +0 -46
  125. package/api.js.map +0 -1
  126. package/applications/Applications.d.ts +0 -2
  127. package/applications/Applications.js +0 -53
  128. package/applications/Applications.js.map +0 -1
  129. package/components/datalist/EmptyRow.d.ts +0 -5
  130. package/components/datalist/EmptyRow.js +0 -20
  131. package/components/datalist/EmptyRow.js.map +0 -1
  132. package/components/page/Page.d.ts +0 -7
  133. package/components/page/Page.js +0 -6
  134. package/components/page/Page.js.map +0 -1
  135. package/content/ContentComponent.d.ts +0 -2
  136. package/content/ContentComponent.js +0 -36
  137. package/content/ContentComponent.js.map +0 -1
  138. package/content/fetchContent.d.ts +0 -3
  139. package/content/fetchContent.js +0 -6
  140. package/content/fetchContent.js.map +0 -1
  141. package/environment.d.ts +0 -26
  142. package/environment.js +0 -3
  143. package/environment.js.map +0 -1
  144. package/groups/Groups.d.ts +0 -2
  145. package/groups/Groups.js +0 -45
  146. package/groups/Groups.js.map +0 -1
  147. package/i18n.d.ts +0 -4
  148. package/i18n.js +0 -32
  149. package/i18n.js.map +0 -1
  150. package/oid4vci/Oid4Vci.d.ts +0 -2
  151. package/oid4vci/Oid4Vci.js +0 -54
  152. package/oid4vci/Oid4Vci.js.map +0 -1
  153. package/organizations/Organizations.d.ts +0 -2
  154. package/organizations/Organizations.js +0 -19
  155. package/organizations/Organizations.js.map +0 -1
  156. package/personal-info/PersonalInfo.d.ts +0 -2
  157. package/personal-info/PersonalInfo.js +0 -69
  158. package/personal-info/PersonalInfo.js.map +0 -1
  159. package/public/content.d.ts +0 -37
  160. package/public/content.js +0 -50
  161. package/public/content.js.map +0 -1
  162. package/resources/EditTheResource.d.ts +0 -8
  163. package/resources/EditTheResource.js +0 -37
  164. package/resources/EditTheResource.js.map +0 -1
  165. package/resources/PermissionRequest.d.ts +0 -7
  166. package/resources/PermissionRequest.js +0 -40
  167. package/resources/PermissionRequest.js.map +0 -1
  168. package/resources/ResourceToolbar.d.ts +0 -12
  169. package/resources/ResourceToolbar.js +0 -24
  170. package/resources/ResourceToolbar.js.map +0 -1
  171. package/resources/Resources.d.ts +0 -2
  172. package/resources/Resources.js +0 -13
  173. package/resources/Resources.js.map +0 -1
  174. package/resources/ResourcesTab.d.ts +0 -5
  175. package/resources/ResourcesTab.js +0 -104
  176. package/resources/ResourcesTab.js.map +0 -1
  177. package/resources/ShareTheResource.d.ts +0 -9
  178. package/resources/ShareTheResource.js +0 -71
  179. package/resources/ShareTheResource.js.map +0 -1
  180. package/resources/SharedWith.d.ts +0 -6
  181. package/resources/SharedWith.js +0 -8
  182. package/resources/SharedWith.js.map +0 -1
  183. package/root/ErrorPage.d.ts +0 -5
  184. package/root/ErrorPage.js +0 -29
  185. package/root/ErrorPage.js.map +0 -1
  186. package/root/Header.d.ts +0 -1
  187. package/root/Header.js +0 -31
  188. package/root/Header.js.map +0 -1
  189. package/root/PageNav.d.ts +0 -22
  190. package/root/PageNav.js +0 -47
  191. package/root/PageNav.js.map +0 -1
  192. package/root/Root.d.ts +0 -1
  193. package/root/Root.js +0 -12
  194. package/root/Root.js.map +0 -1
  195. package/routes.d.ts +0 -16
  196. package/routes.js +0 -75
  197. package/routes.js.map +0 -1
  198. package/src/KcAccountUi.tsx +0 -25
  199. package/src/content/fetchContent.ts +0 -13
  200. package/src/global.d.ts +0 -9
  201. package/src/public/logo.svg +0 -1
  202. package/src/root/header.module.css +0 -3
  203. package/src/ui-shared/alerts/AlertPanel.tsx +0 -43
  204. package/src/ui-shared/alerts/Alerts.tsx +0 -82
  205. package/src/ui-shared/buttons/FormSubmitButton.tsx +0 -47
  206. package/src/ui-shared/context/ErrorPage.tsx +0 -60
  207. package/src/ui-shared/context/HelpContext.tsx +0 -30
  208. package/src/ui-shared/context/KeycloakContext.tsx +0 -97
  209. package/src/ui-shared/context/environment.ts +0 -50
  210. package/src/ui-shared/continue-cancel/ContinueCancelModal.tsx +0 -75
  211. package/src/ui-shared/controls/FormErrorText.tsx +0 -23
  212. package/src/ui-shared/controls/FormLabel.tsx +0 -40
  213. package/src/ui-shared/controls/HelpItem.tsx +0 -43
  214. package/src/ui-shared/controls/KeycloakSpinner.tsx +0 -12
  215. package/src/ui-shared/controls/NumberControl.tsx +0 -93
  216. package/src/ui-shared/controls/OrganizationTable.tsx +0 -122
  217. package/src/ui-shared/controls/PasswordControl.tsx +0 -71
  218. package/src/ui-shared/controls/PasswordInput.tsx +0 -50
  219. package/src/ui-shared/controls/SwitchControl.tsx +0 -67
  220. package/src/ui-shared/controls/TextAreaControl.tsx +0 -60
  221. package/src/ui-shared/controls/TextControl.tsx +0 -75
  222. package/src/ui-shared/controls/keycloak-text-area/KeycloakTextArea.tsx +0 -23
  223. package/src/ui-shared/controls/select-control/SelectControl.tsx +0 -75
  224. package/src/ui-shared/controls/select-control/SingleSelectControl.tsx +0 -109
  225. package/src/ui-shared/controls/select-control/TypeaheadSelectControl.tsx +0 -285
  226. package/src/ui-shared/controls/table/KeycloakDataTable.tsx +0 -597
  227. package/src/ui-shared/controls/table/ListEmptyState.tsx +0 -86
  228. package/src/ui-shared/controls/table/PaginatingTableToolbar.tsx +0 -106
  229. package/src/ui-shared/controls/table/TableToolbar.tsx +0 -92
  230. package/src/ui-shared/icons/IconMapper.tsx +0 -63
  231. package/src/ui-shared/index.ts +0 -1
  232. package/src/ui-shared/main.ts +0 -96
  233. package/src/ui-shared/masthead/DefaultAvatar.tsx +0 -109
  234. package/src/ui-shared/masthead/KeycloakDropdown.tsx +0 -48
  235. package/src/ui-shared/masthead/Masthead.tsx +0 -161
  236. package/src/ui-shared/scroll-form/FormPanel.tsx +0 -29
  237. package/src/ui-shared/scroll-form/FormTitle.tsx +0 -28
  238. package/src/ui-shared/scroll-form/ScrollForm.tsx +0 -98
  239. package/src/ui-shared/scroll-form/ScrollPanel.tsx +0 -21
  240. package/src/ui-shared/scroll-form/form-title.module.css +0 -4
  241. package/src/ui-shared/scroll-form/scroll-form.module.css +0 -8
  242. package/src/ui-shared/select/KeycloakSelect.tsx +0 -49
  243. package/src/ui-shared/select/SingleSelect.tsx +0 -87
  244. package/src/ui-shared/select/TypeaheadSelect.tsx +0 -198
  245. package/src/ui-shared/user-profile/LocaleSelector.tsx +0 -51
  246. package/src/ui-shared/user-profile/MultiInputComponent.tsx +0 -146
  247. package/src/ui-shared/user-profile/OptionsComponent.tsx +0 -63
  248. package/src/ui-shared/user-profile/SelectComponent.tsx +0 -109
  249. package/src/ui-shared/user-profile/TextAreaComponent.tsx +0 -23
  250. package/src/ui-shared/user-profile/TextComponent.tsx +0 -32
  251. package/src/ui-shared/user-profile/UserProfileFields.tsx +0 -243
  252. package/src/ui-shared/user-profile/UserProfileGroup.tsx +0 -71
  253. package/src/ui-shared/user-profile/utils.ts +0 -170
  254. package/src/ui-shared/utils/ErrorBoundary.tsx +0 -77
  255. package/src/ui-shared/utils/createNamedContext.ts +0 -11
  256. package/src/ui-shared/utils/darkMode.ts +0 -19
  257. package/src/ui-shared/utils/errors.ts +0 -55
  258. package/src/ui-shared/utils/generateId.ts +0 -1
  259. package/src/ui-shared/utils/getRuleValue.ts +0 -17
  260. package/src/ui-shared/utils/isDefined.ts +0 -3
  261. package/src/ui-shared/utils/useFetch.ts +0 -44
  262. package/src/ui-shared/utils/useRequiredContext.ts +0 -24
  263. package/src/ui-shared/utils/useSetTimeout.ts +0 -40
  264. package/src/ui-shared/utils/useStorageItem.ts +0 -51
  265. package/src/ui-shared/utils/useStoredState.ts +0 -38
  266. package/ui-shared/alerts/AlertPanel.d.ts +0 -6
  267. package/ui-shared/alerts/AlertPanel.js +0 -6
  268. package/ui-shared/alerts/AlertPanel.js.map +0 -1
  269. package/ui-shared/alerts/Alerts.d.ts +0 -16
  270. package/ui-shared/alerts/Alerts.js +0 -37
  271. package/ui-shared/alerts/Alerts.js.map +0 -1
  272. package/ui-shared/buttons/FormSubmitButton.d.ts +0 -10
  273. package/ui-shared/buttons/FormSubmitButton.js +0 -26
  274. package/ui-shared/buttons/FormSubmitButton.js.map +0 -1
  275. package/ui-shared/context/ErrorPage.d.ts +0 -5
  276. package/ui-shared/context/ErrorPage.js +0 -24
  277. package/ui-shared/context/ErrorPage.js.map +0 -1
  278. package/ui-shared/context/HelpContext.d.ts +0 -9
  279. package/ui-shared/context/HelpContext.js +0 -14
  280. package/ui-shared/context/HelpContext.js.map +0 -1
  281. package/ui-shared/context/KeycloakContext.d.ts +0 -12
  282. package/ui-shared/context/KeycloakContext.js +0 -53
  283. package/ui-shared/context/KeycloakContext.js.map +0 -1
  284. package/ui-shared/context/environment.d.ts +0 -36
  285. package/ui-shared/context/environment.js +0 -27
  286. package/ui-shared/context/environment.js.map +0 -1
  287. package/ui-shared/continue-cancel/ContinueCancelModal.d.ts +0 -15
  288. package/ui-shared/continue-cancel/ContinueCancelModal.js +0 -27
  289. package/ui-shared/continue-cancel/ContinueCancelModal.js.map +0 -1
  290. package/ui-shared/controls/FormErrorText.d.ts +0 -5
  291. package/ui-shared/controls/FormErrorText.js +0 -19
  292. package/ui-shared/controls/FormErrorText.js.map +0 -1
  293. package/ui-shared/controls/FormLabel.d.ts +0 -13
  294. package/ui-shared/controls/FormLabel.js +0 -20
  295. package/ui-shared/controls/FormLabel.js.map +0 -1
  296. package/ui-shared/controls/HelpItem.d.ts +0 -9
  297. package/ui-shared/controls/HelpItem.js +0 -9
  298. package/ui-shared/controls/HelpItem.js.map +0 -1
  299. package/ui-shared/controls/KeycloakSpinner.d.ts +0 -1
  300. package/ui-shared/controls/KeycloakSpinner.js +0 -8
  301. package/ui-shared/controls/KeycloakSpinner.js.map +0 -1
  302. package/ui-shared/controls/NumberControl.d.ts +0 -13
  303. package/ui-shared/controls/NumberControl.js +0 -33
  304. package/ui-shared/controls/NumberControl.js.map +0 -1
  305. package/ui-shared/controls/OrganizationTable.d.ts +0 -16
  306. package/ui-shared/controls/OrganizationTable.js +0 -45
  307. package/ui-shared/controls/OrganizationTable.js.map +0 -1
  308. package/ui-shared/controls/PasswordControl.d.ts +0 -9
  309. package/ui-shared/controls/PasswordControl.js +0 -25
  310. package/ui-shared/controls/PasswordControl.js.map +0 -1
  311. package/ui-shared/controls/PasswordInput.d.ts +0 -7
  312. package/ui-shared/controls/PasswordInput.js +0 -25
  313. package/ui-shared/controls/PasswordInput.js.map +0 -1
  314. package/ui-shared/controls/SwitchControl.d.ts +0 -11
  315. package/ui-shared/controls/SwitchControl.js +0 -29
  316. package/ui-shared/controls/SwitchControl.js.map +0 -1
  317. package/ui-shared/controls/TextAreaControl.d.ts +0 -8
  318. package/ui-shared/controls/TextAreaControl.js +0 -12
  319. package/ui-shared/controls/TextAreaControl.js.map +0 -1
  320. package/ui-shared/controls/TextControl.d.ts +0 -11
  321. package/ui-shared/controls/TextControl.js +0 -24
  322. package/ui-shared/controls/TextControl.js.map +0 -1
  323. package/ui-shared/controls/keycloak-text-area/KeycloakTextArea.d.ts +0 -4
  324. package/ui-shared/controls/keycloak-text-area/KeycloakTextArea.js +0 -5
  325. package/ui-shared/controls/keycloak-text-area/KeycloakTextArea.js.map +0 -1
  326. package/ui-shared/controls/select-control/SelectControl.d.ts +0 -31
  327. package/ui-shared/controls/select-control/SelectControl.js +0 -28
  328. package/ui-shared/controls/select-control/SelectControl.js.map +0 -1
  329. package/ui-shared/controls/select-control/SingleSelectControl.d.ts +0 -3
  330. package/ui-shared/controls/select-control/SingleSelectControl.js +0 -43
  331. package/ui-shared/controls/select-control/SingleSelectControl.js.map +0 -1
  332. package/ui-shared/controls/select-control/TypeaheadSelectControl.d.ts +0 -3
  333. package/ui-shared/controls/select-control/TypeaheadSelectControl.js +0 -140
  334. package/ui-shared/controls/select-control/TypeaheadSelectControl.js.map +0 -1
  335. package/ui-shared/controls/table/KeycloakDataTable.d.ts +0 -64
  336. package/ui-shared/controls/table/KeycloakDataTable.js +0 -279
  337. package/ui-shared/controls/table/KeycloakDataTable.js.map +0 -1
  338. package/ui-shared/controls/table/ListEmptyState.d.ts +0 -20
  339. package/ui-shared/controls/table/ListEmptyState.js +0 -11
  340. package/ui-shared/controls/table/ListEmptyState.js.map +0 -1
  341. package/ui-shared/controls/table/PaginatingTableToolbar.d.ts +0 -21
  342. package/ui-shared/controls/table/PaginatingTableToolbar.js +0 -27
  343. package/ui-shared/controls/table/PaginatingTableToolbar.js.map +0 -1
  344. package/ui-shared/controls/table/TableToolbar.d.ts +0 -12
  345. package/ui-shared/controls/table/TableToolbar.js +0 -30
  346. package/ui-shared/controls/table/TableToolbar.js.map +0 -1
  347. package/ui-shared/icons/IconMapper.d.ts +0 -5
  348. package/ui-shared/icons/IconMapper.js +0 -40
  349. package/ui-shared/icons/IconMapper.js.map +0 -1
  350. package/ui-shared/index.d.ts +0 -1
  351. package/ui-shared/index.js +0 -2
  352. package/ui-shared/index.js.map +0 -1
  353. package/ui-shared/main.d.ts +0 -45
  354. package/ui-shared/main.js +0 -41
  355. package/ui-shared/main.js.map +0 -1
  356. package/ui-shared/masthead/DefaultAvatar.d.ts +0 -7
  357. package/ui-shared/masthead/DefaultAvatar.js +0 -26
  358. package/ui-shared/masthead/DefaultAvatar.js.map +0 -1
  359. package/ui-shared/masthead/KeycloakDropdown.d.ts +0 -10
  360. package/ui-shared/masthead/KeycloakDropdown.js +0 -23
  361. package/ui-shared/masthead/KeycloakDropdown.js.map +0 -1
  362. package/ui-shared/masthead/Masthead.d.ts +0 -19
  363. package/ui-shared/masthead/Masthead.js +0 -55
  364. package/ui-shared/masthead/Masthead.js.map +0 -1
  365. package/ui-shared/scroll-form/FormPanel.d.ts +0 -8
  366. package/ui-shared/scroll-form/FormPanel.js +0 -9
  367. package/ui-shared/scroll-form/FormPanel.js.map +0 -1
  368. package/ui-shared/scroll-form/FormTitle.d.ts +0 -8
  369. package/ui-shared/scroll-form/FormTitle.js +0 -19
  370. package/ui-shared/scroll-form/FormTitle.js.map +0 -1
  371. package/ui-shared/scroll-form/ScrollForm.d.ts +0 -15
  372. package/ui-shared/scroll-form/ScrollForm.js +0 -38
  373. package/ui-shared/scroll-form/ScrollForm.js.map +0 -1
  374. package/ui-shared/scroll-form/ScrollPanel.d.ts +0 -7
  375. package/ui-shared/scroll-form/ScrollPanel.js +0 -18
  376. package/ui-shared/scroll-form/ScrollPanel.js.map +0 -1
  377. package/ui-shared/scroll-form/form-title.module.css +0 -4
  378. package/ui-shared/scroll-form/scroll-form.module.css +0 -8
  379. package/ui-shared/select/KeycloakSelect.d.ts +0 -30
  380. package/ui-shared/select/KeycloakSelect.js +0 -31
  381. package/ui-shared/select/KeycloakSelect.js.map +0 -1
  382. package/ui-shared/select/SingleSelect.d.ts +0 -4
  383. package/ui-shared/select/SingleSelect.js +0 -46
  384. package/ui-shared/select/SingleSelect.js.map +0 -1
  385. package/ui-shared/select/TypeaheadSelect.d.ts +0 -2
  386. package/ui-shared/select/TypeaheadSelect.js +0 -96
  387. package/ui-shared/select/TypeaheadSelect.js.map +0 -1
  388. package/ui-shared/user-profile/LocaleSelector.d.ts +0 -7
  389. package/ui-shared/user-profile/LocaleSelector.js +0 -28
  390. package/ui-shared/user-profile/LocaleSelector.js.map +0 -1
  391. package/ui-shared/user-profile/MultiInputComponent.d.ts +0 -15
  392. package/ui-shared/user-profile/MultiInputComponent.js +0 -61
  393. package/ui-shared/user-profile/MultiInputComponent.js.map +0 -1
  394. package/ui-shared/user-profile/OptionsComponent.d.ts +0 -2
  395. package/ui-shared/user-profile/OptionsComponent.js +0 -29
  396. package/ui-shared/user-profile/OptionsComponent.js.map +0 -1
  397. package/ui-shared/user-profile/SelectComponent.d.ts +0 -2
  398. package/ui-shared/user-profile/SelectComponent.js +0 -56
  399. package/ui-shared/user-profile/SelectComponent.js.map +0 -1
  400. package/ui-shared/user-profile/TextAreaComponent.d.ts +0 -2
  401. package/ui-shared/user-profile/TextAreaComponent.js +0 -11
  402. package/ui-shared/user-profile/TextAreaComponent.js.map +0 -1
  403. package/ui-shared/user-profile/TextComponent.d.ts +0 -2
  404. package/ui-shared/user-profile/TextComponent.js +0 -14
  405. package/ui-shared/user-profile/TextComponent.js.map +0 -1
  406. package/ui-shared/user-profile/UserProfileFields.d.ts +0 -37
  407. package/ui-shared/user-profile/UserProfileFields.js +0 -94
  408. package/ui-shared/user-profile/UserProfileFields.js.map +0 -1
  409. package/ui-shared/user-profile/UserProfileGroup.d.ts +0 -12
  410. package/ui-shared/user-profile/UserProfileGroup.js +0 -15
  411. package/ui-shared/user-profile/UserProfileGroup.js.map +0 -1
  412. package/ui-shared/user-profile/utils.d.ts +0 -32
  413. package/ui-shared/user-profile/utils.js +0 -84
  414. package/ui-shared/user-profile/utils.js.map +0 -1
  415. package/ui-shared/utils/ErrorBoundary.d.ts +0 -26
  416. package/ui-shared/utils/ErrorBoundary.js +0 -29
  417. package/ui-shared/utils/ErrorBoundary.js.map +0 -1
  418. package/ui-shared/utils/createNamedContext.d.ts +0 -3
  419. package/ui-shared/utils/createNamedContext.js +0 -7
  420. package/ui-shared/utils/createNamedContext.js.map +0 -1
  421. package/ui-shared/utils/darkMode.d.ts +0 -1
  422. package/ui-shared/utils/darkMode.js +0 -16
  423. package/ui-shared/utils/darkMode.js.map +0 -1
  424. package/ui-shared/utils/errors.d.ts +0 -4
  425. package/ui-shared/utils/errors.js +0 -42
  426. package/ui-shared/utils/errors.js.map +0 -1
  427. package/ui-shared/utils/generateId.d.ts +0 -1
  428. package/ui-shared/utils/generateId.js +0 -2
  429. package/ui-shared/utils/generateId.js.map +0 -1
  430. package/ui-shared/utils/getRuleValue.d.ts +0 -2
  431. package/ui-shared/utils/getRuleValue.js +0 -12
  432. package/ui-shared/utils/getRuleValue.js.map +0 -1
  433. package/ui-shared/utils/isDefined.d.ts +0 -1
  434. package/ui-shared/utils/isDefined.js +0 -4
  435. package/ui-shared/utils/isDefined.js.map +0 -1
  436. package/ui-shared/utils/useFetch.d.ts +0 -17
  437. package/ui-shared/utils/useFetch.js +0 -38
  438. package/ui-shared/utils/useFetch.js.map +0 -1
  439. package/ui-shared/utils/useRequiredContext.d.ts +0 -9
  440. package/ui-shared/utils/useRequiredContext.js +0 -17
  441. package/ui-shared/utils/useRequiredContext.js.map +0 -1
  442. package/ui-shared/utils/useSetTimeout.d.ts +0 -1
  443. package/ui-shared/utils/useSetTimeout.js +0 -32
  444. package/ui-shared/utils/useSetTimeout.js.map +0 -1
  445. package/ui-shared/utils/useStorageItem.d.ts +0 -10
  446. package/ui-shared/utils/useStorageItem.js +0 -40
  447. package/ui-shared/utils/useStorageItem.js.map +0 -1
  448. package/ui-shared/utils/useStoredState.d.ts +0 -13
  449. package/ui-shared/utils/useStoredState.js +0 -21
  450. package/ui-shared/utils/useStoredState.js.map +0 -1
  451. package/utils/formatDate.d.ts +0 -4
  452. package/utils/formatDate.js +0 -12
  453. package/utils/formatDate.js.map +0 -1
  454. package/utils/joinPath.d.ts +0 -1
  455. package/utils/joinPath.js +0 -18
  456. package/utils/joinPath.js.map +0 -1
  457. package/utils/useAccountAlerts.d.ts +0 -4
  458. package/utils/useAccountAlerts.js +0 -19
  459. package/utils/useAccountAlerts.js.map +0 -1
  460. package/utils/usePromise.d.ts +0 -41
  461. package/utils/usePromise.js +0 -59
  462. package/utils/usePromise.js.map +0 -1
  463. /package/{public → keycloak-theme/account/assets}/logo.svg +0 -0
  464. /package/{root → keycloak-theme/account/root}/header.module.css +0 -0
@@ -1,443 +1,464 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  /* eslint-disable @typescript-eslint/no-namespace */
3
- import { Suspense, useMemo, type LazyExoticComponent } from "react";
4
- import { assert, is } from "tsafe/assert";
5
- import type { Environment } from "@keycloakify/keycloak-account-ui/environment";
6
- import type { MenuItem } from "@keycloakify/keycloak-account-ui/root/PageNav";
7
- import { joinPath } from "@keycloakify/keycloak-account-ui/utils/joinPath";
8
- import defaultContent from "@keycloakify/keycloak-account-ui/public/content";
9
- import defaultLogoSvgUrl from "@keycloakify/keycloak-account-ui/public/logo.svg";
3
+ import { Suspense, useMemo, type LazyExoticComponent, type ReactElement } from "react";
4
+ import { assert, is, type Equals } from "tsafe/assert";
10
5
  import { getI18n } from "react-i18next";
11
6
  //import { logValidationResult } from "./zKcContextLike";
12
7
 
8
+ import type { AccountEnvironment as Environment_target } from "@keycloak/keycloak-account-ui";
9
+
10
+ type Environment = {
11
+ serverBaseUrl: string;
12
+ realm: string;
13
+ clientId: string;
14
+ resourceUrl: string;
15
+ logo: string;
16
+ logoUrl: string;
17
+ baseUrl: string;
18
+ locale: string;
19
+ referrerName?: string;
20
+ referrerUrl?: string;
21
+ features: {
22
+ isRegistrationEmailAsUsername: boolean;
23
+ isEditUserNameAllowed: boolean;
24
+ isLinkedAccountsEnabled: boolean;
25
+ isMyResourcesEnabled: boolean;
26
+ deleteAccountAllowed: boolean;
27
+ updateEmailFeatureEnabled: boolean;
28
+ updateEmailActionEnabled: boolean;
29
+ isViewGroupsEnabled: boolean;
30
+ isViewOrganizationsEnabled: boolean;
31
+ isOid4VciEnabled: boolean;
32
+ };
33
+ };
34
+
35
+ assert<Equals<Environment, Environment_target>>;
36
+
13
37
  export type KcContextLike =
14
- | KcContextLike.Keycloak25AndUp
15
- | KcContextLike.Keycloak20To24
16
- | KcContextLike.Keycloak19;
38
+ | KcContextLike.Keycloak25AndUp
39
+ | KcContextLike.Keycloak20To24
40
+ | KcContextLike.Keycloak19;
17
41
 
18
42
  export namespace KcContextLike {
19
- export type Common = {
20
- realm: {
21
- name: string;
22
- registrationEmailAsUsername: boolean;
23
- editUsernameAllowed: boolean;
24
- isInternationalizationEnabled: boolean;
25
- identityFederationEnabled: boolean;
26
- userManagedAccessAllowed: boolean;
27
- };
28
- resourceUrl: string;
29
- baseUrl: {
30
- rawSchemeSpecificPart: string;
31
- scheme: string;
43
+ export type Common = {
44
+ realm: {
45
+ name: string;
46
+ registrationEmailAsUsername: boolean;
47
+ editUsernameAllowed: boolean;
48
+ isInternationalizationEnabled: boolean;
49
+ identityFederationEnabled: boolean;
50
+ userManagedAccessAllowed: boolean;
51
+ };
52
+ resourceUrl: string;
53
+ baseUrl: {
54
+ rawSchemeSpecificPart: string;
55
+ scheme: string;
56
+ };
57
+ locale: string;
58
+ isAuthorizationEnabled: boolean;
59
+ deleteAccountAllowed: boolean;
60
+ updateEmailFeatureEnabled: boolean;
61
+ updateEmailActionEnabled: boolean;
62
+ isViewOrganizationsEnabled?: boolean;
32
63
  };
33
- locale: string;
34
- isAuthorizationEnabled: boolean;
35
- deleteAccountAllowed: boolean;
36
- updateEmailFeatureEnabled: boolean;
37
- updateEmailActionEnabled: boolean;
38
- isViewOrganizationsEnabled?: boolean;
39
- };
40
-
41
- export type I18nApi = {
42
- msgJSON: string;
43
- supportedLocales?: Record<string, string>;
44
- };
45
-
46
- export type Keycloak25AndUp = Common & {
47
- serverBaseUrl: string;
48
- authUrl: string;
49
- clientId: string;
50
- authServerUrl: string;
51
- isOid4VciEnabled: boolean;
52
- isViewGroupsEnabled: boolean;
53
- };
54
-
55
- export type Keycloak20To24 = Common &
56
- I18nApi & {
57
- authUrl: {
58
- rawSchemeSpecificPart: string;
59
- scheme: string;
60
- };
61
- isViewGroupsEnabled: boolean;
64
+
65
+ export type I18nApi = {
66
+ msgJSON: string;
67
+ supportedLocales?: Record<string, string>;
62
68
  };
63
69
 
64
- export type Keycloak19 = Common &
65
- I18nApi & {
66
- authUrl: {
67
- rawSchemeSpecificPart: string;
68
- scheme: string;
69
- };
70
+ export type Keycloak25AndUp = Common & {
71
+ serverBaseUrl: string;
72
+ authUrl: string;
73
+ clientId: string;
74
+ authServerUrl: string;
75
+ isOid4VciEnabled: boolean;
76
+ isViewGroupsEnabled: boolean;
70
77
  };
78
+
79
+ export type Keycloak20To24 = Common &
80
+ I18nApi & {
81
+ authUrl: {
82
+ rawSchemeSpecificPart: string;
83
+ scheme: string;
84
+ };
85
+ isViewGroupsEnabled: boolean;
86
+ };
87
+
88
+ export type Keycloak19 = Common &
89
+ I18nApi & {
90
+ authUrl: {
91
+ rawSchemeSpecificPart: string;
92
+ scheme: string;
93
+ };
94
+ };
71
95
  }
72
96
 
73
- function getIsKeycloak25AndUp(
74
- kcContext: KcContextLike,
75
- ): kcContext is KcContextLike.Keycloak25AndUp {
76
- return "serverBaseUrl" in kcContext;
97
+ function getIsKeycloak25AndUp(kcContext: KcContextLike): kcContext is KcContextLike.Keycloak25AndUp {
98
+ return "serverBaseUrl" in kcContext;
77
99
  }
78
100
 
79
101
  type LazyExoticComponentLike = {
80
- _result: unknown;
102
+ _result: unknown;
81
103
  };
82
104
 
83
105
  export type KcAccountUiLoaderProps = {
84
- kcContext: KcContextLike;
85
- KcAccountUi: LazyExoticComponentLike;
86
- content?: MenuItem[];
87
- logoUrl?: string;
88
- loadingFallback?: JSX.Element;
106
+ kcContext: KcContextLike;
107
+ KcAccountUi: LazyExoticComponentLike;
108
+ loadingFallback?: ReactElement<any, any>;
89
109
  };
90
110
 
91
111
  export function KcAccountUiLoader(props: KcAccountUiLoaderProps) {
92
- const { KcAccountUi, loadingFallback, ...paramsOfInit } = props;
112
+ const { KcAccountUi, loadingFallback, ...paramsOfInit } = props;
93
113
 
94
- assert(is<LazyExoticComponent<() => JSX.Element | null>>(KcAccountUi));
114
+ assert(is<LazyExoticComponent<() => ReactElement<any, any> | null>>(KcAccountUi));
95
115
 
96
- useMemo(() => init(paramsOfInit), []);
116
+ useMemo(() => init(paramsOfInit), []);
97
117
 
98
- return (
99
- <Suspense fallback={loadingFallback}>
100
- {(() => {
101
- const node = <KcAccountUi />;
118
+ return (
119
+ <Suspense fallback={loadingFallback}>
120
+ {(() => {
121
+ const node = <KcAccountUi />;
102
122
 
103
- if (node === null) {
104
- return loadingFallback;
105
- }
123
+ if (node === null) {
124
+ return loadingFallback;
125
+ }
106
126
 
107
- return node;
108
- })()}
109
- </Suspense>
110
- );
127
+ return node;
128
+ })()}
129
+ </Suspense>
130
+ );
111
131
  }
112
132
 
113
133
  let previousRunParamsFingerprint: string | undefined = undefined;
114
134
 
115
- function init(
116
- params: Pick<KcAccountUiLoaderProps, "kcContext" | "content" | "logoUrl">,
117
- ) {
118
- exit_condition: {
119
- const paramsFingerprint = JSON.stringify(params);
135
+ function init(params: { kcContext: KcContextLike }) {
136
+ exit_condition: {
137
+ const paramsFingerprint = JSON.stringify(params);
120
138
 
121
- if (previousRunParamsFingerprint === undefined) {
122
- previousRunParamsFingerprint = paramsFingerprint;
123
- break exit_condition;
124
- }
125
-
126
- if (paramsFingerprint !== previousRunParamsFingerprint) {
127
- window.location.reload();
128
- return;
129
- }
130
-
131
- return;
132
- }
133
-
134
- const { content = defaultContent, kcContext } = params;
135
-
136
- //logValidationResult(kcContext);
137
-
138
- const logoUrl = params.logoUrl ?? defaultLogoSvgUrl;
139
-
140
- const resourceUrl = kcContext.resourceUrl;
141
-
142
- const serverBaseUrl = (() => {
143
- if ("serverBaseUrl" in kcContext) {
144
- return kcContext.serverBaseUrl;
145
- }
146
-
147
- const { authUrl } = kcContext;
148
-
149
- if (typeof authUrl === "string") {
150
- return authUrl;
151
- }
152
-
153
- return `${authUrl.scheme}:${authUrl.rawSchemeSpecificPart.replace(/\$/, "")}`;
154
- })();
155
-
156
- const authUrl = (() => {
157
- const { authUrl } = kcContext;
158
-
159
- if (typeof authUrl === "string") {
160
- return authUrl;
161
- }
139
+ if (previousRunParamsFingerprint === undefined) {
140
+ previousRunParamsFingerprint = paramsFingerprint;
141
+ break exit_condition;
142
+ }
162
143
 
163
- return `${authUrl.scheme}:${authUrl.rawSchemeSpecificPart}`;
164
- })();
144
+ if (paramsFingerprint !== previousRunParamsFingerprint) {
145
+ window.location.reload();
146
+ return;
147
+ }
165
148
 
166
- const clientId = (() => {
167
- if ("clientId" in kcContext) {
168
- return kcContext.clientId;
149
+ return;
169
150
  }
170
151
 
171
- return "account-console";
172
- })();
152
+ const { kcContext } = params;
173
153
 
174
- const authServerUrl = (() => {
175
- if ("authServerUrl" in kcContext) {
176
- return kcContext.authServerUrl;
177
- }
154
+ //logValidationResult(kcContext);
178
155
 
179
- return authUrl;
180
- })();
181
-
182
- const referrerUrl = readQueryParamOrRestoreFromSessionStorage({
183
- name: "referrer_uri",
184
- });
185
-
186
- const environment = {
187
- serverBaseUrl,
188
- authUrl,
189
- authServerUrl,
190
- realm: kcContext.realm.name,
191
- clientId,
192
- resourceUrl,
193
- logo: logoUrl,
194
- logoUrl:
195
- referrerUrl === undefined ? "/" : referrerUrl.replace("_hash_", "#"),
196
- baseUrl: `${kcContext.baseUrl.scheme}:${kcContext.baseUrl.rawSchemeSpecificPart}`,
197
- locale: kcContext.locale,
198
- referrerName:
199
- readQueryParamOrRestoreFromSessionStorage({ name: "referrer" }) ?? "",
200
- referrerUrl: referrerUrl ?? "",
201
- features: {
202
- isRegistrationEmailAsUsername:
203
- kcContext.realm.registrationEmailAsUsername,
204
- isEditUserNameAllowed: kcContext.realm.editUsernameAllowed,
205
- isInternationalizationEnabled:
206
- kcContext.realm.isInternationalizationEnabled,
207
- isLinkedAccountsEnabled: kcContext.realm.identityFederationEnabled,
208
- isMyResourcesEnabled:
209
- kcContext.realm.userManagedAccessAllowed &&
210
- kcContext.isAuthorizationEnabled,
211
- deleteAccountAllowed: kcContext.deleteAccountAllowed,
212
- updateEmailFeatureEnabled: kcContext.updateEmailFeatureEnabled,
213
- updateEmailActionEnabled: kcContext.updateEmailActionEnabled,
214
- isViewGroupsEnabled:
215
- "isViewGroupsEnabled" in kcContext
216
- ? kcContext.isViewGroupsEnabled
217
- : false,
218
- isOid4VciEnabled: getIsKeycloak25AndUp(kcContext)
219
- ? kcContext.isOid4VciEnabled
220
- : false,
221
- isViewOrganizationsEnabled: kcContext.isViewOrganizationsEnabled ?? false,
222
- },
223
- };
224
-
225
- {
226
- assert<typeof environment extends Environment ? true : false>();
227
-
228
- const script = document.createElement("script");
229
- script.id = "environment";
230
- script.type = "application/json";
231
- script.textContent = JSON.stringify(environment, null, 1);
232
-
233
- document.body.appendChild(script);
234
- }
235
-
236
- {
237
- const realFetch = window.fetch;
238
-
239
- const buildJsonResponse = (json: unknown): Response => {
240
- const response = {
241
- headers: new Headers({ "Content-Type": "application/json" }),
242
- ok: true,
243
- json: () => Promise.resolve(json),
244
- text: () => Promise.resolve(JSON.stringify(json)),
245
- status: 200,
246
- } as Response;
247
-
248
- /*
249
- return new Proxy(response, {
250
- get(target, prop, receiver) {
251
- console.log(`GET ${String(prop)}`);
252
- return Reflect.get(target, prop, receiver);
253
- },
254
- });
255
- */
256
- return response;
257
- };
156
+ const resourceUrl = kcContext.resourceUrl;
258
157
 
259
- let isLanguageChangeEventListened = false;
260
- let wasLocaleAttributeManuallyAdded = false;
261
-
262
- window.fetch = async function fetch(...args) {
263
- const [url, fetchOptions] = args;
264
-
265
- polyfill_i18n_api: {
266
- if (getIsKeycloak25AndUp(kcContext)) {
267
- break polyfill_i18n_api;
158
+ const serverBaseUrl = (() => {
159
+ if ("serverBaseUrl" in kcContext) {
160
+ return kcContext.serverBaseUrl;
268
161
  }
269
- //assert(is<KcContextLike.Keycloak20To24>(kcContext));
270
162
 
271
- const langs =
272
- kcContext.supportedLocales === undefined
273
- ? ["en"]
274
- : Object.keys(kcContext.supportedLocales);
163
+ const { authUrl } = kcContext;
275
164
 
276
- if (`${url}`.endsWith("/supportedLocales")) {
277
- return buildJsonResponse(langs);
165
+ if (typeof authUrl === "string") {
166
+ return authUrl;
278
167
  }
279
168
 
280
- for (const lang of langs) {
281
- if (!`${url}`.endsWith(`/${lang}`)) {
282
- continue;
283
- }
284
-
285
- const data = Object.entries(
286
- JSON.parse(kcContext.msgJSON) as Record<string, string>,
287
- ).map(([key, value]) => {
288
- try {
289
- value = decodeURIComponent(escape(value));
290
- } catch {
291
- // ignore
292
- }
169
+ return `${authUrl.scheme}:${authUrl.rawSchemeSpecificPart.replace(/\$/, "")}`;
170
+ })();
293
171
 
294
- return { key, value };
295
- });
172
+ const authUrl = (() => {
173
+ const { authUrl } = kcContext;
296
174
 
297
- track_language_change: {
298
- if (isLanguageChangeEventListened) {
299
- break track_language_change;
300
- }
301
- isLanguageChangeEventListened = true;
302
-
303
- getI18n().on("languageChanged", (lang) => {
304
- if (lang !== kcContext.locale) {
305
- window.location.reload();
306
- }
307
- });
308
- }
309
-
310
- return buildJsonResponse(data);
175
+ if (typeof authUrl === "string") {
176
+ return authUrl;
311
177
  }
312
178
 
313
- const urlObj = new URL(
314
- (() => {
315
- const urlStr = `${url}`;
316
-
317
- return urlStr.startsWith("/")
318
- ? `${window.location.origin}${urlStr}`
319
- : urlStr;
320
- })(),
321
- );
179
+ return `${authUrl.scheme}:${authUrl.rawSchemeSpecificPart}`;
180
+ })();
322
181
 
323
- add_locale_attribute: {
324
- if (!environment.features.isInternationalizationEnabled) {
325
- break add_locale_attribute;
326
- }
327
-
328
- if ((fetchOptions?.method?.toLocaleLowerCase() ?? "get") !== "get") {
329
- break add_locale_attribute;
330
- }
331
-
332
- if (!urlObj.pathname.replace(/\/$/, "").endsWith("/account")) {
333
- break add_locale_attribute;
334
- }
335
-
336
- if (urlObj.searchParams.get("userProfileMetadata") !== "true") {
337
- break add_locale_attribute;
338
- }
182
+ const clientId = (() => {
183
+ if ("clientId" in kcContext) {
184
+ return kcContext.clientId;
185
+ }
339
186
 
340
- const response = await realFetch(...args);
187
+ return "account-console";
188
+ })();
341
189
 
342
- if (!response.ok) {
343
- return response;
344
- }
345
-
346
- const data = await response.json();
347
-
348
- data.attributes ??= {};
349
-
350
- data.attributes.locale = [kcContext.locale];
351
-
352
- data.userProfileMetadata ??= {};
353
- data.userProfileMetadata.attributes ??= [];
354
-
355
- if (
356
- !data.userProfileMetadata.attributes.find(
357
- (attribute: any) => attribute.name === "locale",
358
- )
359
- ) {
360
- wasLocaleAttributeManuallyAdded = true;
361
- data.userProfileMetadata.attributes.unshift({
362
- name: "locale",
363
- displayName: "locale",
364
- required: false,
365
- readOnly: false,
366
- validators: {},
367
- multivalued: false,
368
- });
369
- }
370
- return buildJsonResponse(data);
190
+ const authServerUrl = (() => {
191
+ if ("authServerUrl" in kcContext) {
192
+ return kcContext.authServerUrl;
371
193
  }
372
194
 
373
- remove_locale_attribute_from_req: {
374
- if (!wasLocaleAttributeManuallyAdded) {
375
- break remove_locale_attribute_from_req;
376
- }
377
-
378
- if ((fetchOptions?.method?.toLocaleLowerCase() ?? "get") !== "post") {
379
- break remove_locale_attribute_from_req;
380
- }
195
+ return authUrl;
196
+ })();
197
+
198
+ const referrerUrl = readQueryParamOrRestoreFromSessionStorage({
199
+ name: "referrer_uri"
200
+ });
201
+
202
+ const environment = {
203
+ serverBaseUrl,
204
+ authUrl,
205
+ authServerUrl,
206
+ realm: kcContext.realm.name,
207
+ clientId,
208
+ resourceUrl,
209
+ logo: "",
210
+ logoUrl: referrerUrl === undefined ? "/" : referrerUrl.replace("_hash_", "#"),
211
+ baseUrl: `${kcContext.baseUrl.scheme}:${kcContext.baseUrl.rawSchemeSpecificPart}`,
212
+ locale: kcContext.locale,
213
+ referrerName: readQueryParamOrRestoreFromSessionStorage({ name: "referrer" }) ?? "",
214
+ referrerUrl: referrerUrl ?? "",
215
+ features: {
216
+ isRegistrationEmailAsUsername: kcContext.realm.registrationEmailAsUsername,
217
+ isEditUserNameAllowed: kcContext.realm.editUsernameAllowed,
218
+ isInternationalizationEnabled: kcContext.realm.isInternationalizationEnabled,
219
+ isLinkedAccountsEnabled: kcContext.realm.identityFederationEnabled,
220
+ isMyResourcesEnabled:
221
+ kcContext.realm.userManagedAccessAllowed && kcContext.isAuthorizationEnabled,
222
+ deleteAccountAllowed: kcContext.deleteAccountAllowed,
223
+ updateEmailFeatureEnabled: kcContext.updateEmailFeatureEnabled,
224
+ updateEmailActionEnabled: kcContext.updateEmailActionEnabled,
225
+ isViewGroupsEnabled:
226
+ "isViewGroupsEnabled" in kcContext ? kcContext.isViewGroupsEnabled : false,
227
+ isOid4VciEnabled: getIsKeycloak25AndUp(kcContext) ? kcContext.isOid4VciEnabled : false,
228
+ isViewOrganizationsEnabled: kcContext.isViewOrganizationsEnabled ?? false
229
+ }
230
+ };
381
231
 
382
- if (!urlObj.pathname.replace(/\/$/, "").endsWith("/account")) {
383
- break remove_locale_attribute_from_req;
384
- }
232
+ assert<typeof environment extends Environment ? true : false>;
385
233
 
386
- if (fetchOptions?.body === undefined) {
387
- break remove_locale_attribute_from_req;
388
- }
234
+ {
235
+ const undefinedKeys = Object.entries(environment)
236
+ .filter(([key]) => key !== "features")
237
+ .filter(([, value]) => value === undefined)
238
+ .map(([key]) => key);
389
239
 
390
- let reqPayload: any;
240
+ if (undefinedKeys.length > 0) {
241
+ console.error("Need KcContext polyfill for ", undefinedKeys.join(", "));
242
+ }
243
+ }
391
244
 
392
- try {
393
- reqPayload = JSON.parse(fetchOptions.body as string);
394
- } catch {
395
- break remove_locale_attribute_from_req;
396
- }
245
+ {
246
+ const undefinedKeys = Object.entries(environment.features)
247
+ .filter(([, value]) => value === undefined)
248
+ .map(([key]) => key);
397
249
 
398
- if (reqPayload.userProfileMetadata === undefined) {
399
- break remove_locale_attribute_from_req;
400
- }
250
+ if (undefinedKeys.length > 0) {
251
+ console.error("Need KcContext polyfill for features", undefinedKeys.join(", "));
252
+ }
253
+ }
401
254
 
402
- reqPayload.userProfileMetadata.attributes =
403
- reqPayload.userProfileMetadata.attributes.filter(
404
- (attr: any) => attr.name !== "locale",
405
- );
255
+ {
256
+ const script = document.createElement("script");
257
+ script.id = "environment";
258
+ script.type = "application/json";
259
+ script.textContent = JSON.stringify(environment, null, 1);
406
260
 
407
- fetchOptions.body = JSON.stringify(reqPayload);
261
+ document.body.appendChild(script);
262
+ }
408
263
 
409
- args[1] = fetchOptions;
264
+ {
265
+ const realFetch = window.fetch;
266
+
267
+ const buildJsonResponse = (json: unknown): Response => {
268
+ const response = {
269
+ headers: new Headers({ "Content-Type": "application/json" }),
270
+ ok: true,
271
+ json: () => Promise.resolve(json),
272
+ text: () => Promise.resolve(JSON.stringify(json)),
273
+ status: 200
274
+ } as Response;
275
+
276
+ /*
277
+ return new Proxy(response, {
278
+ get(target, prop, receiver) {
279
+ console.log(`GET ${String(prop)}`);
280
+ return Reflect.get(target, prop, receiver);
281
+ },
282
+ });
283
+ */
410
284
 
411
- return realFetch(...args);
412
- }
413
- }
285
+ return response;
286
+ };
287
+
288
+ let isLanguageChangeEventListened = false;
289
+ let wasLocaleAttributeManuallyAdded = false;
290
+
291
+ window.fetch = async function fetch(...args) {
292
+ const [url, fetchOptions] = args;
293
+
294
+ polyfill_i18n_api: {
295
+ if (getIsKeycloak25AndUp(kcContext)) {
296
+ break polyfill_i18n_api;
297
+ }
298
+ //assert(is<KcContextLike.Keycloak20To24>(kcContext));
299
+
300
+ const langs =
301
+ kcContext.supportedLocales === undefined
302
+ ? ["en"]
303
+ : Object.keys(kcContext.supportedLocales);
304
+
305
+ if (`${url}`.endsWith("/supportedLocales")) {
306
+ return buildJsonResponse(langs);
307
+ }
308
+
309
+ for (const lang of langs) {
310
+ if (!`${url}`.endsWith(`/${lang}`)) {
311
+ continue;
312
+ }
313
+
314
+ const data = Object.entries(
315
+ JSON.parse(kcContext.msgJSON) as Record<string, string>
316
+ ).map(([key, value]) => {
317
+ try {
318
+ value = decodeURIComponent(escape(value));
319
+ } catch {
320
+ // ignore
321
+ }
322
+
323
+ return { key, value };
324
+ });
325
+
326
+ track_language_change: {
327
+ if (isLanguageChangeEventListened) {
328
+ break track_language_change;
329
+ }
330
+ isLanguageChangeEventListened = true;
331
+
332
+ getI18n().on("languageChanged", lang => {
333
+ if (lang !== kcContext.locale) {
334
+ window.location.reload();
335
+ }
336
+ });
337
+ }
338
+
339
+ return buildJsonResponse(data);
340
+ }
341
+
342
+ const urlObj = new URL(
343
+ (() => {
344
+ const urlStr = `${url}`;
345
+
346
+ return urlStr.startsWith("/") ? `${window.location.origin}${urlStr}` : urlStr;
347
+ })()
348
+ );
349
+
350
+ add_locale_attribute: {
351
+ if (!environment.features.isInternationalizationEnabled) {
352
+ break add_locale_attribute;
353
+ }
354
+
355
+ if ((fetchOptions?.method?.toLocaleLowerCase() ?? "get") !== "get") {
356
+ break add_locale_attribute;
357
+ }
358
+
359
+ if (!urlObj.pathname.replace(/\/$/, "").endsWith("/account")) {
360
+ break add_locale_attribute;
361
+ }
362
+
363
+ if (urlObj.searchParams.get("userProfileMetadata") !== "true") {
364
+ break add_locale_attribute;
365
+ }
366
+
367
+ const response = await realFetch(...args);
368
+
369
+ if (!response.ok) {
370
+ return response;
371
+ }
372
+
373
+ const data = await response.json();
374
+
375
+ data.attributes ??= {};
376
+
377
+ data.attributes.locale = [kcContext.locale];
378
+
379
+ data.userProfileMetadata ??= {};
380
+ data.userProfileMetadata.attributes ??= [];
381
+
382
+ if (
383
+ !data.userProfileMetadata.attributes.find(
384
+ (attribute: any) => attribute.name === "locale"
385
+ )
386
+ ) {
387
+ wasLocaleAttributeManuallyAdded = true;
388
+ data.userProfileMetadata.attributes.unshift({
389
+ name: "locale",
390
+ displayName: "locale",
391
+ required: false,
392
+ readOnly: false,
393
+ validators: {},
394
+ multivalued: false
395
+ });
396
+ }
397
+ return buildJsonResponse(data);
398
+ }
399
+
400
+ remove_locale_attribute_from_req: {
401
+ if (!wasLocaleAttributeManuallyAdded) {
402
+ break remove_locale_attribute_from_req;
403
+ }
404
+
405
+ if ((fetchOptions?.method?.toLocaleLowerCase() ?? "get") !== "post") {
406
+ break remove_locale_attribute_from_req;
407
+ }
408
+
409
+ if (!urlObj.pathname.replace(/\/$/, "").endsWith("/account")) {
410
+ break remove_locale_attribute_from_req;
411
+ }
412
+
413
+ if (fetchOptions?.body === undefined) {
414
+ break remove_locale_attribute_from_req;
415
+ }
416
+
417
+ let reqPayload: any;
418
+
419
+ try {
420
+ reqPayload = JSON.parse(fetchOptions.body as string);
421
+ } catch {
422
+ break remove_locale_attribute_from_req;
423
+ }
424
+
425
+ if (reqPayload.userProfileMetadata === undefined) {
426
+ break remove_locale_attribute_from_req;
427
+ }
428
+
429
+ reqPayload.userProfileMetadata.attributes =
430
+ reqPayload.userProfileMetadata.attributes.filter(
431
+ (attr: any) => attr.name !== "locale"
432
+ );
433
+
434
+ fetchOptions.body = JSON.stringify(reqPayload);
435
+
436
+ args[1] = fetchOptions;
414
437
 
415
- if (url === joinPath(environment.resourceUrl, "/content.json")) {
416
- return buildJsonResponse(content);
417
- }
438
+ return realFetch(...args);
439
+ }
440
+ }
418
441
 
419
- return realFetch(...args);
420
- };
421
- }
442
+ return realFetch(...args);
443
+ };
444
+ }
422
445
  }
423
446
 
424
- function readQueryParamOrRestoreFromSessionStorage(params: {
425
- name: string;
426
- }): string | undefined {
427
- const { name } = params;
447
+ function readQueryParamOrRestoreFromSessionStorage(params: { name: string }): string | undefined {
448
+ const { name } = params;
428
449
 
429
- const url = new URL(window.location.href);
450
+ const url = new URL(window.location.href);
430
451
 
431
- const value = url.searchParams.get(name);
452
+ const value = url.searchParams.get(name);
432
453
 
433
- const PREFIX = "keycloakify:";
454
+ const PREFIX = "keycloakify:";
434
455
 
435
- if (value !== null) {
436
- sessionStorage.setItem(`${PREFIX}${name}`, value);
437
- url.searchParams.delete(name);
438
- window.history.replaceState({}, "", url.toString());
439
- return value;
440
- }
456
+ if (value !== null) {
457
+ sessionStorage.setItem(`${PREFIX}${name}`, value);
458
+ url.searchParams.delete(name);
459
+ window.history.replaceState({}, "", url.toString());
460
+ return value;
461
+ }
441
462
 
442
- return sessionStorage.getItem(`${PREFIX}${name}`) ?? undefined;
463
+ return sessionStorage.getItem(`${PREFIX}${name}`) ?? undefined;
443
464
  }