hazo_auth 1.2.0 → 1.4.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 (495) hide show
  1. package/README.md +383 -774
  2. package/dist/components/index.d.ts +3 -0
  3. package/dist/components/index.d.ts.map +1 -0
  4. package/dist/components/index.js +5 -0
  5. package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts +23 -0
  6. package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts.map +1 -0
  7. package/dist/components/layouts/email_verification/config/email_verification_field_config.js +44 -0
  8. package/dist/components/layouts/email_verification/hooks/use_email_verification.d.ts +31 -0
  9. package/dist/components/layouts/email_verification/hooks/use_email_verification.d.ts.map +1 -0
  10. package/dist/components/layouts/email_verification/hooks/use_email_verification.js +222 -0
  11. package/dist/components/layouts/email_verification/index.d.ts +23 -0
  12. package/dist/components/layouts/email_verification/index.d.ts.map +1 -0
  13. package/dist/components/layouts/email_verification/index.js +61 -0
  14. package/dist/components/layouts/forgot_password/config/forgot_password_field_config.d.ts +10 -0
  15. package/dist/components/layouts/forgot_password/config/forgot_password_field_config.d.ts.map +1 -0
  16. package/dist/components/layouts/forgot_password/config/forgot_password_field_config.js +33 -0
  17. package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.d.ts +22 -0
  18. package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.d.ts.map +1 -0
  19. package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.js +127 -0
  20. package/dist/components/layouts/forgot_password/index.d.ts +18 -0
  21. package/dist/components/layouts/forgot_password/index.d.ts.map +1 -0
  22. package/dist/components/layouts/forgot_password/index.js +43 -0
  23. package/dist/components/layouts/index.d.ts +16 -0
  24. package/dist/components/layouts/index.d.ts.map +1 -0
  25. package/dist/components/layouts/index.js +11 -0
  26. package/dist/components/layouts/login/config/login_field_config.d.ts +11 -0
  27. package/dist/components/layouts/login/config/login_field_config.d.ts.map +1 -0
  28. package/dist/components/layouts/login/config/login_field_config.js +42 -0
  29. package/dist/components/layouts/login/hooks/use_login_form.d.ts +34 -0
  30. package/dist/components/layouts/login/hooks/use_login_form.d.ts.map +1 -0
  31. package/dist/components/layouts/login/hooks/use_login_form.js +196 -0
  32. package/dist/components/layouts/login/index.d.ts +31 -0
  33. package/dist/components/layouts/login/index.d.ts.map +1 -0
  34. package/dist/components/layouts/login/index.js +58 -0
  35. package/dist/components/layouts/my_settings/components/editable_field.d.ts +19 -0
  36. package/dist/components/layouts/my_settings/components/editable_field.d.ts.map +1 -0
  37. package/dist/components/layouts/my_settings/components/editable_field.js +73 -0
  38. package/dist/components/layouts/my_settings/components/password_change_dialog.d.ts +28 -0
  39. package/dist/components/layouts/my_settings/components/password_change_dialog.d.ts.map +1 -0
  40. package/dist/components/layouts/my_settings/components/password_change_dialog.js +138 -0
  41. package/dist/components/layouts/my_settings/components/profile_picture_dialog.d.ts +42 -0
  42. package/dist/components/layouts/my_settings/components/profile_picture_dialog.d.ts.map +1 -0
  43. package/dist/components/layouts/my_settings/components/profile_picture_dialog.js +198 -0
  44. package/dist/components/layouts/my_settings/components/profile_picture_display.d.ts +16 -0
  45. package/dist/components/layouts/my_settings/components/profile_picture_display.d.ts.map +1 -0
  46. package/dist/components/layouts/my_settings/components/profile_picture_display.js +33 -0
  47. package/dist/components/layouts/my_settings/components/profile_picture_gravatar_tab.d.ts +17 -0
  48. package/dist/components/layouts/my_settings/components/profile_picture_gravatar_tab.d.ts.map +1 -0
  49. package/dist/components/layouts/my_settings/components/profile_picture_gravatar_tab.js +48 -0
  50. package/dist/components/layouts/my_settings/components/profile_picture_library_tab.d.ts +21 -0
  51. package/dist/components/layouts/my_settings/components/profile_picture_library_tab.d.ts.map +1 -0
  52. package/dist/components/layouts/my_settings/components/profile_picture_library_tab.js +144 -0
  53. package/dist/components/layouts/my_settings/components/profile_picture_upload_tab.d.ts +23 -0
  54. package/dist/components/layouts/my_settings/components/profile_picture_upload_tab.d.ts.map +1 -0
  55. package/dist/components/layouts/my_settings/components/profile_picture_upload_tab.js +169 -0
  56. package/dist/components/layouts/my_settings/config/my_settings_field_config.d.ts +19 -0
  57. package/dist/components/layouts/my_settings/config/my_settings_field_config.d.ts.map +1 -0
  58. package/dist/components/layouts/my_settings/config/my_settings_field_config.js +26 -0
  59. package/dist/components/layouts/my_settings/hooks/use_my_settings.d.ts +46 -0
  60. package/dist/components/layouts/my_settings/hooks/use_my_settings.d.ts.map +1 -0
  61. package/dist/components/layouts/my_settings/hooks/use_my_settings.js +354 -0
  62. package/dist/components/layouts/my_settings/index.d.ts +64 -0
  63. package/dist/components/layouts/my_settings/index.d.ts.map +1 -0
  64. package/dist/components/layouts/my_settings/index.js +65 -0
  65. package/dist/components/layouts/register/config/register_field_config.d.ts +14 -0
  66. package/dist/components/layouts/register/config/register_field_config.d.ts.map +1 -0
  67. package/dist/components/layouts/register/config/register_field_config.js +69 -0
  68. package/dist/components/layouts/register/hooks/use_register_form.d.ts +30 -0
  69. package/dist/components/layouts/register/hooks/use_register_form.d.ts.map +1 -0
  70. package/dist/components/layouts/register/hooks/use_register_form.js +184 -0
  71. package/dist/components/layouts/register/index.d.ts +23 -0
  72. package/dist/components/layouts/register/index.d.ts.map +1 -0
  73. package/dist/components/layouts/register/index.js +58 -0
  74. package/dist/components/layouts/reset_password/config/reset_password_field_config.d.ts +13 -0
  75. package/dist/components/layouts/reset_password/config/reset_password_field_config.d.ts.map +1 -0
  76. package/dist/components/layouts/reset_password/config/reset_password_field_config.js +53 -0
  77. package/dist/components/layouts/reset_password/hooks/use_reset_password_form.d.ts +28 -0
  78. package/dist/components/layouts/reset_password/hooks/use_reset_password_form.d.ts.map +1 -0
  79. package/dist/components/layouts/reset_password/hooks/use_reset_password_form.js +201 -0
  80. package/dist/components/layouts/reset_password/index.d.ts +23 -0
  81. package/dist/components/layouts/reset_password/index.d.ts.map +1 -0
  82. package/dist/components/layouts/reset_password/index.js +53 -0
  83. package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts +20 -0
  84. package/dist/components/layouts/shared/components/already_logged_in_guard.d.ts.map +1 -0
  85. package/dist/components/layouts/shared/components/already_logged_in_guard.js +32 -0
  86. package/dist/components/layouts/shared/components/auth_page_shell.d.ts +7 -0
  87. package/dist/components/layouts/shared/components/auth_page_shell.d.ts.map +1 -0
  88. package/dist/components/layouts/shared/components/auth_page_shell.js +12 -0
  89. package/dist/components/layouts/shared/components/field_error_message.d.ts +7 -0
  90. package/dist/components/layouts/shared/components/field_error_message.d.ts.map +1 -0
  91. package/dist/components/layouts/shared/components/field_error_message.js +6 -0
  92. package/dist/components/layouts/shared/components/form_action_buttons.d.ts +14 -0
  93. package/dist/components/layouts/shared/components/form_action_buttons.d.ts.map +1 -0
  94. package/dist/components/layouts/shared/components/form_action_buttons.js +15 -0
  95. package/dist/components/layouts/shared/components/form_field_wrapper.d.ts +11 -0
  96. package/dist/components/layouts/shared/components/form_field_wrapper.d.ts.map +1 -0
  97. package/dist/components/layouts/shared/components/form_field_wrapper.js +9 -0
  98. package/dist/components/layouts/shared/components/form_header.d.ts +10 -0
  99. package/dist/components/layouts/shared/components/form_header.d.ts.map +1 -0
  100. package/dist/components/layouts/shared/components/form_header.js +5 -0
  101. package/dist/components/layouts/shared/components/logout_button.d.ts +7 -0
  102. package/dist/components/layouts/shared/components/logout_button.d.ts.map +1 -0
  103. package/dist/components/layouts/shared/components/logout_button.js +44 -0
  104. package/dist/components/layouts/shared/components/password_field.d.ts +13 -0
  105. package/dist/components/layouts/shared/components/password_field.d.ts.map +1 -0
  106. package/dist/components/layouts/shared/components/password_field.js +13 -0
  107. package/dist/components/layouts/shared/components/profile_pic_menu.d.ts +22 -0
  108. package/dist/components/layouts/shared/components/profile_pic_menu.d.ts.map +1 -0
  109. package/dist/components/layouts/shared/components/profile_pic_menu.js +169 -0
  110. package/dist/components/layouts/shared/components/profile_pic_menu_wrapper.d.ts +12 -0
  111. package/dist/components/layouts/shared/components/profile_pic_menu_wrapper.d.ts.map +1 -0
  112. package/dist/components/layouts/shared/components/profile_pic_menu_wrapper.js +16 -0
  113. package/dist/components/layouts/shared/components/sidebar_layout_wrapper.d.ts +6 -0
  114. package/dist/components/layouts/shared/components/sidebar_layout_wrapper.d.ts.map +1 -0
  115. package/dist/components/layouts/shared/components/sidebar_layout_wrapper.js +15 -0
  116. package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts +11 -0
  117. package/dist/components/layouts/shared/components/standalone_layout_wrapper.d.ts.map +1 -0
  118. package/dist/components/layouts/shared/components/standalone_layout_wrapper.js +10 -0
  119. package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts +12 -0
  120. package/dist/components/layouts/shared/components/two_column_auth_layout.d.ts.map +1 -0
  121. package/dist/components/layouts/shared/components/two_column_auth_layout.js +8 -0
  122. package/dist/components/layouts/shared/components/unauthorized_guard.d.ts +14 -0
  123. package/dist/components/layouts/shared/components/unauthorized_guard.d.ts.map +1 -0
  124. package/dist/components/layouts/shared/components/unauthorized_guard.js +30 -0
  125. package/dist/components/layouts/shared/components/visual_panel.d.ts +9 -0
  126. package/dist/components/layouts/shared/components/visual_panel.d.ts.map +1 -0
  127. package/dist/components/layouts/shared/components/visual_panel.js +10 -0
  128. package/dist/components/layouts/shared/config/layout_customization.d.ts +38 -0
  129. package/dist/components/layouts/shared/config/layout_customization.d.ts.map +1 -0
  130. package/dist/components/layouts/shared/config/layout_customization.js +19 -0
  131. package/dist/components/layouts/shared/data/layout_data_client.d.ts +6 -0
  132. package/dist/components/layouts/shared/data/layout_data_client.d.ts.map +1 -0
  133. package/dist/components/layouts/shared/data/layout_data_client.js +9 -0
  134. package/dist/components/layouts/shared/hooks/use_auth_status.d.ts +20 -0
  135. package/dist/components/layouts/shared/hooks/use_auth_status.d.ts.map +1 -0
  136. package/dist/components/layouts/shared/hooks/use_auth_status.js +71 -0
  137. package/dist/components/layouts/shared/hooks/use_hazo_auth.d.ts +48 -0
  138. package/dist/components/layouts/shared/hooks/use_hazo_auth.d.ts.map +1 -0
  139. package/dist/components/layouts/shared/hooks/use_hazo_auth.js +90 -0
  140. package/dist/components/layouts/shared/index.d.ts +24 -0
  141. package/dist/components/layouts/shared/index.d.ts.map +1 -0
  142. package/dist/components/layouts/shared/index.js +27 -0
  143. package/dist/components/layouts/shared/utils/ip_address.d.ts +7 -0
  144. package/dist/components/layouts/shared/utils/ip_address.d.ts.map +1 -0
  145. package/dist/components/layouts/shared/utils/ip_address.js +34 -0
  146. package/dist/components/layouts/shared/utils/validation.d.ts +15 -0
  147. package/dist/components/layouts/shared/utils/validation.d.ts.map +1 -0
  148. package/dist/components/layouts/shared/utils/validation.js +45 -0
  149. package/dist/components/layouts/user_management/components/roles_matrix.d.ts +29 -0
  150. package/dist/components/layouts/user_management/components/roles_matrix.d.ts.map +1 -0
  151. package/dist/components/layouts/user_management/components/roles_matrix.js +287 -0
  152. package/dist/components/layouts/user_management/index.d.ts +13 -0
  153. package/dist/components/layouts/user_management/index.d.ts.map +1 -0
  154. package/dist/components/layouts/user_management/index.js +495 -0
  155. package/dist/components/ui/alert-dialog.d.ts +21 -0
  156. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  157. package/dist/components/ui/alert-dialog.js +62 -0
  158. package/dist/components/ui/avatar.d.ts +7 -0
  159. package/dist/components/ui/avatar.d.ts.map +1 -0
  160. package/dist/components/ui/avatar.js +32 -0
  161. package/dist/components/ui/button.d.ts +12 -0
  162. package/dist/components/ui/button.d.ts.map +1 -0
  163. package/dist/components/ui/button.js +45 -0
  164. package/dist/components/ui/checkbox.d.ts +5 -0
  165. package/dist/components/ui/checkbox.d.ts.map +1 -0
  166. package/dist/components/ui/checkbox.js +23 -0
  167. package/dist/components/ui/dialog.d.ts +20 -0
  168. package/dist/components/ui/dialog.d.ts.map +1 -0
  169. package/dist/components/ui/dialog.js +52 -0
  170. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  171. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  172. package/dist/components/ui/dropdown-menu.js +72 -0
  173. package/dist/components/ui/hazo_ui_tooltip.d.ts +26 -0
  174. package/dist/components/ui/hazo_ui_tooltip.d.ts.map +1 -0
  175. package/dist/components/ui/hazo_ui_tooltip.js +17 -0
  176. package/dist/components/ui/index.d.ts +20 -0
  177. package/dist/components/ui/index.d.ts.map +1 -0
  178. package/dist/components/ui/index.js +21 -0
  179. package/dist/components/ui/input.d.ts +4 -0
  180. package/dist/components/ui/input.d.ts.map +1 -0
  181. package/dist/components/ui/input.js +20 -0
  182. package/dist/components/ui/label.d.ts +6 -0
  183. package/dist/components/ui/label.d.ts.map +1 -0
  184. package/dist/components/ui/label.js +24 -0
  185. package/dist/components/ui/separator.d.ts +5 -0
  186. package/dist/components/ui/separator.d.ts.map +1 -0
  187. package/dist/components/ui/separator.js +22 -0
  188. package/dist/components/ui/sheet.d.ts +23 -0
  189. package/dist/components/ui/sheet.d.ts.map +1 -0
  190. package/dist/components/ui/sheet.js +66 -0
  191. package/dist/components/ui/sidebar.d.ts +66 -0
  192. package/dist/components/ui/sidebar.d.ts.map +1 -0
  193. package/dist/components/ui/sidebar.js +267 -0
  194. package/dist/components/ui/skeleton.d.ts +3 -0
  195. package/dist/components/ui/skeleton.d.ts.map +1 -0
  196. package/dist/components/ui/skeleton.js +18 -0
  197. package/dist/components/ui/sonner.d.ts +5 -0
  198. package/dist/components/ui/sonner.d.ts.map +1 -0
  199. package/dist/components/ui/sonner.js +28 -0
  200. package/dist/components/ui/switch.d.ts +5 -0
  201. package/dist/components/ui/switch.d.ts.map +1 -0
  202. package/dist/components/ui/switch.js +22 -0
  203. package/dist/components/ui/table.d.ts +11 -0
  204. package/dist/components/ui/table.d.ts.map +1 -0
  205. package/dist/components/ui/table.js +55 -0
  206. package/dist/components/ui/tabs.d.ts +8 -0
  207. package/dist/components/ui/tabs.d.ts.map +1 -0
  208. package/dist/components/ui/tabs.js +33 -0
  209. package/dist/components/ui/tooltip.d.ts +8 -0
  210. package/dist/components/ui/tooltip.d.ts.map +1 -0
  211. package/dist/components/ui/tooltip.js +25 -0
  212. package/dist/components/ui/vertical-tabs.d.ts +8 -0
  213. package/dist/components/ui/vertical-tabs.d.ts.map +1 -0
  214. package/dist/components/ui/vertical-tabs.js +37 -0
  215. package/dist/hooks/use-mobile.d.ts +2 -0
  216. package/dist/hooks/use-mobile.d.ts.map +1 -0
  217. package/dist/hooks/use-mobile.js +15 -0
  218. package/dist/index.d.ts +3 -0
  219. package/dist/index.d.ts.map +1 -0
  220. package/dist/index.js +5 -0
  221. package/dist/lib/already_logged_in_config.server.d.ts +14 -0
  222. package/dist/lib/already_logged_in_config.server.d.ts.map +1 -0
  223. package/dist/lib/already_logged_in_config.server.js +29 -0
  224. package/dist/lib/app_logger.d.ts +12 -0
  225. package/dist/lib/app_logger.d.ts.map +1 -0
  226. package/dist/lib/app_logger.js +14 -0
  227. package/dist/lib/auth/auth_cache.d.ts +83 -0
  228. package/dist/lib/auth/auth_cache.d.ts.map +1 -0
  229. package/dist/lib/auth/auth_cache.js +158 -0
  230. package/dist/lib/auth/auth_rate_limiter.d.ts +39 -0
  231. package/dist/lib/auth/auth_rate_limiter.d.ts.map +1 -0
  232. package/dist/lib/auth/auth_rate_limiter.js +95 -0
  233. package/dist/lib/auth/auth_types.d.ts +53 -0
  234. package/dist/lib/auth/auth_types.d.ts.map +1 -0
  235. package/dist/lib/auth/auth_types.js +16 -0
  236. package/dist/lib/auth/auth_utils.server.d.ts +47 -0
  237. package/dist/lib/auth/auth_utils.server.d.ts.map +1 -0
  238. package/dist/lib/auth/auth_utils.server.js +150 -0
  239. package/dist/lib/auth/hazo_get_auth.server.d.ts +12 -0
  240. package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -0
  241. package/dist/lib/auth/hazo_get_auth.server.js +256 -0
  242. package/dist/lib/auth/index.d.ts +9 -0
  243. package/dist/lib/auth/index.d.ts.map +1 -0
  244. package/dist/lib/auth/index.js +12 -0
  245. package/dist/lib/auth/server_auth.d.ts +26 -0
  246. package/dist/lib/auth/server_auth.d.ts.map +1 -0
  247. package/dist/lib/auth/server_auth.js +62 -0
  248. package/dist/lib/auth_utility_config.server.d.ts +20 -0
  249. package/dist/lib/auth_utility_config.server.d.ts.map +1 -0
  250. package/dist/lib/auth_utility_config.server.js +64 -0
  251. package/dist/lib/config/config_loader.server.d.ts +44 -0
  252. package/dist/lib/config/config_loader.server.d.ts.map +1 -0
  253. package/dist/lib/config/config_loader.server.js +122 -0
  254. package/dist/lib/email_verification_config.server.d.ts +14 -0
  255. package/dist/lib/email_verification_config.server.d.ts.map +1 -0
  256. package/dist/lib/email_verification_config.server.js +20 -0
  257. package/dist/lib/file_types_config.server.d.ts +11 -0
  258. package/dist/lib/file_types_config.server.d.ts.map +1 -0
  259. package/dist/lib/file_types_config.server.js +16 -0
  260. package/dist/lib/forgot_password_config.server.d.ts +14 -0
  261. package/dist/lib/forgot_password_config.server.d.ts.map +1 -0
  262. package/dist/lib/forgot_password_config.server.js +20 -0
  263. package/dist/lib/hazo_connect_instance.server.d.ts +17 -0
  264. package/dist/lib/hazo_connect_instance.server.d.ts.map +1 -0
  265. package/dist/lib/hazo_connect_instance.server.js +88 -0
  266. package/dist/lib/hazo_connect_setup.d.ts +2 -0
  267. package/dist/lib/hazo_connect_setup.d.ts.map +1 -0
  268. package/dist/lib/hazo_connect_setup.js +49 -0
  269. package/dist/lib/hazo_connect_setup.server.d.ts +20 -0
  270. package/dist/lib/hazo_connect_setup.server.d.ts.map +1 -0
  271. package/dist/lib/hazo_connect_setup.server.js +138 -0
  272. package/dist/lib/index.d.ts +28 -0
  273. package/dist/lib/index.d.ts.map +1 -0
  274. package/dist/lib/index.js +35 -0
  275. package/dist/lib/login_config.server.d.ts +20 -0
  276. package/dist/lib/login_config.server.d.ts.map +1 -0
  277. package/dist/lib/login_config.server.js +37 -0
  278. package/dist/lib/messages_config.server.d.ts +13 -0
  279. package/dist/lib/messages_config.server.d.ts.map +1 -0
  280. package/dist/lib/messages_config.server.js +18 -0
  281. package/dist/lib/migrations/apply_migration.d.ts +22 -0
  282. package/dist/lib/migrations/apply_migration.d.ts.map +1 -0
  283. package/dist/lib/migrations/apply_migration.js +78 -0
  284. package/dist/lib/my_settings_config.server.d.ts +65 -0
  285. package/dist/lib/my_settings_config.server.d.ts.map +1 -0
  286. package/dist/lib/my_settings_config.server.js +67 -0
  287. package/dist/lib/password_requirements_config.server.d.ts +15 -0
  288. package/dist/lib/password_requirements_config.server.d.ts.map +1 -0
  289. package/dist/lib/password_requirements_config.server.js +26 -0
  290. package/dist/lib/profile_pic_menu_config.server.d.ts +26 -0
  291. package/dist/lib/profile_pic_menu_config.server.d.ts.map +1 -0
  292. package/dist/lib/profile_pic_menu_config.server.js +95 -0
  293. package/dist/lib/profile_picture_config.server.d.ts +16 -0
  294. package/dist/lib/profile_picture_config.server.d.ts.map +1 -0
  295. package/dist/lib/profile_picture_config.server.js +40 -0
  296. package/dist/lib/register_config.server.d.ts +24 -0
  297. package/dist/lib/register_config.server.d.ts.map +1 -0
  298. package/dist/lib/register_config.server.js +39 -0
  299. package/dist/lib/reset_password_config.server.d.ts +25 -0
  300. package/dist/lib/reset_password_config.server.d.ts.map +1 -0
  301. package/dist/lib/reset_password_config.server.js +38 -0
  302. package/dist/lib/services/email_service.d.ts +44 -0
  303. package/dist/lib/services/email_service.d.ts.map +1 -0
  304. package/dist/lib/services/email_service.js +480 -0
  305. package/dist/lib/services/email_verification_service.d.ts +35 -0
  306. package/dist/lib/services/email_verification_service.d.ts.map +1 -0
  307. package/dist/lib/services/email_verification_service.js +208 -0
  308. package/dist/lib/services/index.d.ts +13 -0
  309. package/dist/lib/services/index.d.ts.map +1 -0
  310. package/dist/lib/services/index.js +14 -0
  311. package/dist/lib/services/login_service.d.ts +20 -0
  312. package/dist/lib/services/login_service.d.ts.map +1 -0
  313. package/dist/lib/services/login_service.js +94 -0
  314. package/dist/lib/services/password_change_service.d.ts +19 -0
  315. package/dist/lib/services/password_change_service.d.ts.map +1 -0
  316. package/dist/lib/services/password_change_service.js +118 -0
  317. package/dist/lib/services/password_reset_service.d.ts +52 -0
  318. package/dist/lib/services/password_reset_service.d.ts.map +1 -0
  319. package/dist/lib/services/password_reset_service.js +318 -0
  320. package/dist/lib/services/profile_picture_remove_service.d.ts +15 -0
  321. package/dist/lib/services/profile_picture_remove_service.d.ts.map +1 -0
  322. package/dist/lib/services/profile_picture_remove_service.js +94 -0
  323. package/dist/lib/services/profile_picture_service.d.ts +45 -0
  324. package/dist/lib/services/profile_picture_service.d.ts.map +1 -0
  325. package/dist/lib/services/profile_picture_service.js +183 -0
  326. package/dist/lib/services/profile_picture_source_mapper.d.ts +23 -0
  327. package/dist/lib/services/profile_picture_source_mapper.d.ts.map +1 -0
  328. package/dist/lib/services/profile_picture_source_mapper.js +45 -0
  329. package/dist/lib/services/registration_service.d.ts +20 -0
  330. package/dist/lib/services/registration_service.d.ts.map +1 -0
  331. package/dist/lib/services/registration_service.js +147 -0
  332. package/dist/lib/services/token_service.d.ts +20 -0
  333. package/dist/lib/services/token_service.d.ts.map +1 -0
  334. package/dist/lib/services/token_service.js +201 -0
  335. package/dist/lib/services/user_profiles_service.d.ts +31 -0
  336. package/dist/lib/services/user_profiles_service.d.ts.map +1 -0
  337. package/dist/lib/services/user_profiles_service.js +99 -0
  338. package/dist/lib/services/user_update_service.d.ts +23 -0
  339. package/dist/lib/services/user_update_service.d.ts.map +1 -0
  340. package/dist/lib/services/user_update_service.js +103 -0
  341. package/dist/lib/ui_shell_config.server.d.ts +16 -0
  342. package/dist/lib/ui_shell_config.server.d.ts.map +1 -0
  343. package/dist/lib/ui_shell_config.server.js +28 -0
  344. package/dist/lib/ui_sizes_config.server.d.ts +17 -0
  345. package/dist/lib/ui_sizes_config.server.d.ts.map +1 -0
  346. package/dist/lib/ui_sizes_config.server.js +22 -0
  347. package/dist/lib/user_fields_config.server.d.ts +13 -0
  348. package/dist/lib/user_fields_config.server.d.ts.map +1 -0
  349. package/dist/lib/user_fields_config.server.js +21 -0
  350. package/dist/lib/user_management_config.server.d.ts +10 -0
  351. package/dist/lib/user_management_config.server.d.ts.map +1 -0
  352. package/dist/lib/user_management_config.server.js +26 -0
  353. package/dist/lib/utils/api_route_helpers.d.ts +13 -0
  354. package/dist/lib/utils/api_route_helpers.d.ts.map +1 -0
  355. package/dist/lib/utils/api_route_helpers.js +58 -0
  356. package/dist/lib/utils/error_sanitizer.d.ts +16 -0
  357. package/dist/lib/utils/error_sanitizer.d.ts.map +1 -0
  358. package/dist/lib/utils/error_sanitizer.js +39 -0
  359. package/dist/lib/utils.d.ts +4 -0
  360. package/dist/lib/utils.d.ts.map +1 -0
  361. package/dist/lib/utils.js +9 -0
  362. package/dist/server/config/config_loader.d.ts +26 -0
  363. package/dist/server/config/config_loader.d.ts.map +1 -0
  364. package/dist/server/config/config_loader.js +329 -0
  365. package/dist/server/index.d.ts +2 -0
  366. package/dist/server/index.d.ts.map +1 -0
  367. package/dist/server/index.js +32 -0
  368. package/dist/server/logging/logger_service.d.ts +3 -0
  369. package/dist/server/logging/logger_service.d.ts.map +1 -0
  370. package/dist/server/logging/logger_service.js +37 -0
  371. package/dist/server/routes/root_router.d.ts +3 -0
  372. package/dist/server/routes/root_router.d.ts.map +1 -0
  373. package/dist/server/routes/root_router.js +14 -0
  374. package/dist/server/server.d.ts +3 -0
  375. package/dist/server/server.d.ts.map +1 -0
  376. package/dist/server/server.js +25 -0
  377. package/dist/server/types/app_types.d.ts +53 -0
  378. package/dist/server/types/app_types.d.ts.map +1 -0
  379. package/dist/server/types/app_types.js +1 -0
  380. package/migrations/003_add_url_on_logon_to_hazo_users.sql +8 -0
  381. package/next.config.mjs +12 -0
  382. package/package.json +39 -2
  383. package/scripts/init_users.ts +9 -9
  384. package/src/components/index.ts +7 -0
  385. package/src/components/layouts/email_verification/config/email_verification_field_config.ts +2 -2
  386. package/src/components/layouts/email_verification/hooks/use_email_verification.ts +3 -3
  387. package/src/components/layouts/email_verification/index.tsx +11 -11
  388. package/src/components/layouts/forgot_password/config/forgot_password_field_config.ts +2 -2
  389. package/src/components/layouts/forgot_password/hooks/use_forgot_password_form.ts +3 -3
  390. package/src/components/layouts/forgot_password/index.tsx +10 -10
  391. package/src/components/layouts/index.ts +26 -0
  392. package/src/components/layouts/login/config/login_field_config.ts +2 -2
  393. package/src/components/layouts/login/hooks/use_login_form.ts +5 -5
  394. package/src/components/layouts/login/index.tsx +11 -11
  395. package/src/components/layouts/my_settings/components/editable_field.tsx +3 -3
  396. package/src/components/layouts/my_settings/components/password_change_dialog.tsx +5 -5
  397. package/src/components/layouts/my_settings/components/profile_picture_dialog.tsx +7 -7
  398. package/src/components/layouts/my_settings/components/profile_picture_display.tsx +2 -2
  399. package/src/components/layouts/my_settings/components/profile_picture_gravatar_tab.tsx +3 -3
  400. package/src/components/layouts/my_settings/components/profile_picture_library_tab.tsx +5 -5
  401. package/src/components/layouts/my_settings/components/profile_picture_upload_tab.tsx +4 -4
  402. package/src/components/layouts/my_settings/config/my_settings_field_config.ts +2 -2
  403. package/src/components/layouts/my_settings/hooks/use_my_settings.ts +2 -2
  404. package/src/components/layouts/my_settings/index.tsx +10 -10
  405. package/src/components/layouts/register/config/register_field_config.ts +2 -2
  406. package/src/components/layouts/register/hooks/use_register_form.ts +4 -4
  407. package/src/components/layouts/register/index.tsx +11 -11
  408. package/src/components/layouts/reset_password/config/reset_password_field_config.ts +2 -2
  409. package/src/components/layouts/reset_password/hooks/use_reset_password_form.ts +4 -4
  410. package/src/components/layouts/reset_password/index.tsx +10 -10
  411. package/src/components/layouts/shared/components/already_logged_in_guard.tsx +4 -4
  412. package/src/components/layouts/shared/components/auth_page_shell.tsx +3 -3
  413. package/src/components/layouts/shared/components/form_action_buttons.tsx +2 -2
  414. package/src/components/layouts/shared/components/form_field_wrapper.tsx +2 -2
  415. package/src/components/layouts/shared/components/logout_button.tsx +2 -2
  416. package/src/components/layouts/shared/components/password_field.tsx +3 -3
  417. package/src/components/layouts/shared/components/profile_pic_menu.tsx +5 -5
  418. package/src/components/layouts/shared/components/profile_pic_menu_wrapper.tsx +2 -2
  419. package/src/components/layouts/shared/components/sidebar_layout_wrapper.tsx +3 -3
  420. package/src/components/layouts/shared/components/standalone_layout_wrapper.tsx +1 -1
  421. package/src/components/layouts/shared/components/two_column_auth_layout.tsx +1 -1
  422. package/src/components/layouts/shared/components/unauthorized_guard.tsx +2 -2
  423. package/src/components/layouts/shared/hooks/use_hazo_auth.ts +1 -1
  424. package/src/components/layouts/shared/index.ts +34 -0
  425. package/src/components/layouts/shared/utils/validation.ts +1 -1
  426. package/src/components/layouts/user_management/components/roles_matrix.tsx +7 -7
  427. package/src/components/layouts/user_management/index.tsx +11 -11
  428. package/src/components/ui/alert-dialog.tsx +2 -2
  429. package/src/components/ui/avatar.tsx +1 -1
  430. package/src/components/ui/button.tsx +1 -1
  431. package/src/components/ui/checkbox.tsx +1 -1
  432. package/src/components/ui/dialog.tsx +1 -1
  433. package/src/components/ui/dropdown-menu.tsx +1 -1
  434. package/src/components/ui/hazo_ui_tooltip.tsx +1 -1
  435. package/src/components/ui/index.ts +22 -0
  436. package/src/components/ui/input.tsx +1 -1
  437. package/src/components/ui/label.tsx +1 -1
  438. package/src/components/ui/separator.tsx +1 -1
  439. package/src/components/ui/sheet.tsx +1 -1
  440. package/src/components/ui/sidebar.tsx +8 -8
  441. package/src/components/ui/skeleton.tsx +1 -1
  442. package/src/components/ui/switch.tsx +1 -1
  443. package/src/components/ui/table.tsx +1 -1
  444. package/src/components/ui/tabs.tsx +1 -1
  445. package/src/components/ui/tooltip.tsx +1 -1
  446. package/src/components/ui/vertical-tabs.tsx +1 -1
  447. package/src/index.ts +7 -0
  448. package/src/lib/already_logged_in_config.server.ts +1 -1
  449. package/src/lib/app_logger.ts +1 -1
  450. package/src/lib/auth/auth_cache.ts +1 -1
  451. package/src/lib/auth/auth_utils.server.ts +2 -2
  452. package/src/lib/auth/hazo_get_auth.server.ts +8 -8
  453. package/src/lib/auth/index.ts +23 -0
  454. package/src/lib/auth/server_auth.ts +2 -2
  455. package/src/lib/auth_utility_config.server.ts +1 -1
  456. package/src/lib/config/config_loader.server.ts +1 -1
  457. package/src/lib/email_verification_config.server.ts +1 -1
  458. package/src/lib/file_types_config.server.ts +1 -1
  459. package/src/lib/forgot_password_config.server.ts +1 -1
  460. package/src/lib/hazo_connect_instance.server.ts +2 -2
  461. package/src/lib/hazo_connect_setup.server.ts +2 -2
  462. package/src/lib/index.ts +44 -0
  463. package/src/lib/login_config.server.ts +2 -2
  464. package/src/lib/messages_config.server.ts +1 -1
  465. package/src/lib/my_settings_config.server.ts +7 -7
  466. package/src/lib/password_requirements_config.server.ts +1 -1
  467. package/src/lib/profile_pic_menu_config.server.ts +1 -1
  468. package/src/lib/profile_picture_config.server.ts +2 -2
  469. package/src/lib/register_config.server.ts +4 -4
  470. package/src/lib/reset_password_config.server.ts +3 -3
  471. package/src/lib/services/email_service.ts +2 -2
  472. package/src/lib/services/email_verification_service.ts +3 -3
  473. package/src/lib/services/index.ts +15 -0
  474. package/src/lib/services/login_service.ts +3 -3
  475. package/src/lib/services/password_change_service.ts +3 -3
  476. package/src/lib/services/password_reset_service.ts +3 -3
  477. package/src/lib/services/profile_picture_remove_service.ts +3 -3
  478. package/src/lib/services/profile_picture_service.ts +5 -5
  479. package/src/lib/services/registration_service.ts +8 -8
  480. package/src/lib/services/token_service.ts +2 -2
  481. package/src/lib/services/user_profiles_service.ts +2 -2
  482. package/src/lib/services/user_update_service.ts +4 -4
  483. package/src/lib/ui_shell_config.server.ts +1 -1
  484. package/src/lib/ui_sizes_config.server.ts +1 -1
  485. package/src/lib/user_fields_config.server.ts +1 -1
  486. package/src/lib/user_management_config.server.ts +1 -2
  487. package/src/lib/utils/error_sanitizer.ts +1 -1
  488. package/src/routes/index.ts +34 -0
  489. package/src/server/config/config_loader.ts +2 -2
  490. package/src/server/index.ts +2 -2
  491. package/src/server/logging/logger_service.ts +1 -1
  492. package/src/server/server.ts +2 -2
  493. package/src/server/types/express.d.ts +1 -1
  494. package/tsconfig.build.json +39 -0
  495. package/tsconfig.json +5 -1
@@ -0,0 +1,15 @@
1
+ // file_description: shared sidebar layout wrapper for auth pages to ensure consistent navigation
2
+ // section: client_directive
3
+ "use client";
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ // section: imports
6
+ import Link from "next/link";
7
+ import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarProvider, SidebarTrigger, SidebarInset, } from "hazo_auth/components/ui/sidebar";
8
+ import { LogIn, UserPlus, BookOpen, ExternalLink, Database, KeyRound, MailCheck, Key, Settings, User } from "lucide-react";
9
+ import { use_auth_status } from "hazo_auth/components/layouts/shared/hooks/use_auth_status";
10
+ import { ProfilePicMenu } from "hazo_auth/components/layouts/shared/components/profile_pic_menu";
11
+ // section: component
12
+ export function SidebarLayoutWrapper({ children }) {
13
+ const authStatus = use_auth_status();
14
+ return (_jsx(SidebarProvider, { children: _jsxs("div", { className: "cls_sidebar_layout_wrapper flex min-h-screen w-full", children: [_jsxs(Sidebar, { children: [_jsx(SidebarHeader, { className: "cls_sidebar_layout_header", children: _jsx("div", { className: "cls_sidebar_layout_title flex items-center gap-2 px-2 py-4", children: _jsx("h1", { className: "cls_sidebar_layout_title_text text-lg font-semibold text-sidebar-foreground", children: "hazo auth" }) }) }), _jsxs(SidebarContent, { className: "cls_sidebar_layout_content", children: [_jsxs(SidebarGroup, { className: "cls_sidebar_layout_test_group", children: [_jsx(SidebarGroupLabel, { className: "cls_sidebar_layout_group_label", children: "Test components" }), _jsxs(SidebarMenu, { className: "cls_sidebar_layout_test_menu", children: [_jsx(SidebarMenuItem, { className: "cls_sidebar_layout_test_login_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_auth/login", className: "cls_sidebar_layout_test_login_link flex items-center gap-2", "aria-label": "Test login layout component", children: [_jsx(LogIn, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Test login" })] }) }) }), _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_test_register_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_auth/register", className: "cls_sidebar_layout_test_register_link flex items-center gap-2", "aria-label": "Test register layout component", children: [_jsx(UserPlus, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Test register" })] }) }) }), _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_test_forgot_password_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_auth/forgot_password", className: "cls_sidebar_layout_test_forgot_password_link flex items-center gap-2", "aria-label": "Test forgot password layout component", children: [_jsx(KeyRound, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Test forgot password" })] }) }) }), _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_test_reset_password_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_auth/reset_password", className: "cls_sidebar_layout_test_reset_password_link flex items-center gap-2", "aria-label": "Test reset password layout component", children: [_jsx(Key, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Test reset password" })] }) }) }), _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_test_email_verification_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_auth/verify_email", className: "cls_sidebar_layout_test_email_verification_link flex items-center gap-2", "aria-label": "Test email verification layout component", children: [_jsx(MailCheck, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Test email verification" })] }) }) }), _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_sqlite_admin_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_connect/sqlite_admin", className: "cls_sidebar_layout_sqlite_admin_link flex items-center gap-2", "aria-label": "Open SQLite admin UI to browse and edit database", children: [_jsx(Database, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "SQLite Admin" })] }) }) }), _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_user_management_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_auth/user_management", className: "cls_sidebar_layout_user_management_link flex items-center gap-2", "aria-label": "Open User Management to manage users, roles, and permissions", children: [_jsx(User, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "User Management" })] }) }) })] })] }), authStatus.authenticated && (_jsxs(SidebarGroup, { className: "cls_sidebar_layout_account_group", children: [_jsx(SidebarGroupLabel, { className: "cls_sidebar_layout_group_label", children: "Account" }), _jsx(SidebarMenu, { className: "cls_sidebar_layout_account_menu", children: _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_my_settings_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs(Link, { href: "/hazo_auth/my_settings", className: "cls_sidebar_layout_my_settings_link flex items-center gap-2", "aria-label": "Open my settings page", children: [_jsx(Settings, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "My Settings" })] }) }) }) })] })), _jsxs(SidebarGroup, { className: "cls_sidebar_layout_resources_group", children: [_jsx(SidebarGroupLabel, { className: "cls_sidebar_layout_group_label", children: "Resources" }), _jsxs(SidebarMenu, { className: "cls_sidebar_layout_resources_menu", children: [_jsx(SidebarMenuItem, { className: "cls_sidebar_layout_storybook_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs("a", { href: "http://localhost:6006", target: "_blank", rel: "noopener noreferrer", className: "cls_sidebar_layout_storybook_link flex items-center gap-2", "aria-label": "Open Storybook preview for reusable components", children: [_jsx(BookOpen, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Storybook" }), _jsx(ExternalLink, { className: "ml-auto h-3 w-3", "aria-hidden": "true" })] }) }) }), _jsx(SidebarMenuItem, { className: "cls_sidebar_layout_docs_item", children: _jsx(SidebarMenuButton, { asChild: true, children: _jsxs("a", { href: "https://ui.shadcn.com/docs", target: "_blank", rel: "noopener noreferrer", className: "cls_sidebar_layout_docs_link flex items-center gap-2", "aria-label": "Review shadcn documentation for styling guidance", children: [_jsx(BookOpen, { className: "h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: "Shadcn docs" }), _jsx(ExternalLink, { className: "ml-auto h-3 w-3", "aria-hidden": "true" })] }) }) })] })] })] })] }), _jsxs(SidebarInset, { className: "cls_sidebar_layout_inset", children: [_jsxs("header", { className: "cls_sidebar_layout_main_header flex h-16 shrink-0 items-center gap-2 border-b px-4", children: [_jsx(SidebarTrigger, { className: "cls_sidebar_layout_trigger" }), _jsx("div", { className: "cls_sidebar_layout_main_header_content flex flex-1 items-center gap-2", children: _jsx("h2", { className: "cls_sidebar_layout_main_title text-lg font-semibold text-foreground", children: "hazo reusable ui library workspace" }) }), _jsx(ProfilePicMenu, { className: "cls_sidebar_layout_auth_status", avatar_size: "sm" })] }), _jsx("main", { className: "cls_sidebar_layout_main_content flex flex-1 items-center justify-center p-6", children: children })] })] }) }));
15
+ }
@@ -0,0 +1,11 @@
1
+ export type StandaloneLayoutWrapperProps = {
2
+ children: React.ReactNode;
3
+ heading?: string;
4
+ description?: string;
5
+ wrapperClassName?: string;
6
+ contentClassName?: string;
7
+ showHeading?: boolean;
8
+ showDescription?: boolean;
9
+ };
10
+ export declare function StandaloneLayoutWrapper({ children, heading, description, wrapperClassName, contentClassName, showHeading, showDescription, }: StandaloneLayoutWrapperProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=standalone_layout_wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standalone_layout_wrapper.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/standalone_layout_wrapper.tsx"],"names":[],"mappings":"AAQA,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAGF,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,EACR,OAAqB,EACrB,WAA8E,EAC9E,gBAAgB,EAChB,gBAAgB,EAChB,WAAkB,EAClB,eAAsB,GACvB,EAAE,4BAA4B,2CAsB9B"}
@@ -0,0 +1,10 @@
1
+ // file_description: renders a simple full-width shell without the developer sidebar
2
+ // section: client_directive
3
+ "use client";
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ // section: imports
6
+ import { cn } from "hazo_auth/lib/utils";
7
+ // section: component
8
+ export function StandaloneLayoutWrapper({ children, heading = "hazo auth", description = "Drop-in authentication flows that inherit your existing theme.", wrapperClassName, contentClassName, showHeading = true, showDescription = true, }) {
9
+ return (_jsx("div", { className: cn("cls_standalone_layout_wrapper min-h-screen w-full bg-background", wrapperClassName), children: _jsxs("div", { className: cn("cls_standalone_layout_content mx-auto flex w-full max-w-5xl flex-col gap-8 p-6", contentClassName), children: [(showHeading || showDescription) && (_jsxs("div", { className: "cls_standalone_layout_header text-center", children: [showHeading && (_jsx("h1", { className: "cls_standalone_layout_title text-2xl font-semibold tracking-tight text-foreground", children: heading })), showDescription && (_jsx("p", { className: "cls_standalone_layout_description mt-2 text-sm text-muted-foreground", children: description }))] })), _jsx("div", { className: "cls_standalone_layout_body", children: children })] }) }));
10
+ }
@@ -0,0 +1,12 @@
1
+ type TwoColumnAuthLayoutProps = {
2
+ imageSrc: string;
3
+ imageAlt: string;
4
+ imageBackgroundColor?: string;
5
+ formContent: React.ReactNode;
6
+ className?: string;
7
+ visualPanelClassName?: string;
8
+ formContainerClassName?: string;
9
+ };
10
+ export declare function TwoColumnAuthLayout({ imageSrc, imageAlt, imageBackgroundColor, formContent, className, visualPanelClassName, formContainerClassName, }: TwoColumnAuthLayoutProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=two_column_auth_layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two_column_auth_layout.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/two_column_auth_layout.tsx"],"names":[],"mappings":"AAKA,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAGF,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,sBAAsB,GACvB,EAAE,wBAAwB,2CAkB1B"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // file_description: reusable two-column authentication layout shell that combines visual panel and form content
3
+ // section: imports
4
+ import { VisualPanel } from "hazo_auth/components/layouts/shared/components/visual_panel";
5
+ // section: component
6
+ export function TwoColumnAuthLayout({ imageSrc, imageAlt, imageBackgroundColor, formContent, className, visualPanelClassName, formContainerClassName, }) {
7
+ return (_jsxs("div", { className: `cls_two_column_auth_layout mx-auto grid w-full max-w-5xl grid-cols-1 overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm md:grid-cols-2 md:min-h-[520px] ${className !== null && className !== void 0 ? className : ""}`, children: [_jsx(VisualPanel, { imageSrc: imageSrc, imageAlt: imageAlt, backgroundColor: imageBackgroundColor, className: visualPanelClassName }), _jsx("div", { className: `cls_two_column_auth_layout_form_container flex flex-col gap-6 p-8 ${formContainerClassName !== null && formContainerClassName !== void 0 ? formContainerClassName : ""}`, children: formContent })] }));
8
+ }
@@ -0,0 +1,14 @@
1
+ export type UnauthorizedGuardProps = {
2
+ message?: string;
3
+ loginButtonLabel?: string;
4
+ loginPath?: string;
5
+ children: React.ReactNode;
6
+ };
7
+ /**
8
+ * Guard component that shows unauthorized message if user is not authenticated
9
+ * Otherwise renders children
10
+ * @param props - Component props including message and login button customization
11
+ * @returns Either the unauthorized UI or the children
12
+ */
13
+ export declare function UnauthorizedGuard({ message, loginButtonLabel, loginPath, children, }: UnauthorizedGuardProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=unauthorized_guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unauthorized_guard.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/unauthorized_guard.tsx"],"names":[],"mappings":"AAWA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAGF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAsD,EACtD,gBAAgC,EAChC,SAA8B,EAC9B,QAAQ,GACT,EAAE,sBAAsB,2CA8CxB"}
@@ -0,0 +1,30 @@
1
+ // file_description: reusable component to show unauthorized message when user is not authenticated
2
+ // section: client_directive
3
+ "use client";
4
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
5
+ // section: imports
6
+ import { use_auth_status } from "hazo_auth/components/layouts/shared/hooks/use_auth_status";
7
+ import { Button } from "hazo_auth/components/ui/button";
8
+ import { useRouter } from "next/navigation";
9
+ import { LogIn } from "lucide-react";
10
+ // section: component
11
+ /**
12
+ * Guard component that shows unauthorized message if user is not authenticated
13
+ * Otherwise renders children
14
+ * @param props - Component props including message and login button customization
15
+ * @returns Either the unauthorized UI or the children
16
+ */
17
+ export function UnauthorizedGuard({ message = "You must be logged in to access this page.", loginButtonLabel = "Go to login", loginPath = "/hazo_auth/login", children, }) {
18
+ const router = useRouter();
19
+ const authStatus = use_auth_status();
20
+ // Check if user should see unauthorized message
21
+ const shouldShowUnauthorized = !authStatus.authenticated && !authStatus.loading;
22
+ if (shouldShowUnauthorized) {
23
+ return (_jsx("div", { className: "cls_unauthorized_guard flex flex-col items-center justify-center min-h-screen p-8", children: _jsxs("div", { className: "cls_unauthorized_guard_content flex flex-col items-center gap-4 text-center max-w-md", children: [_jsx("div", { className: "cls_unauthorized_guard_icon flex items-center justify-center w-16 h-16 rounded-full bg-red-100", children: _jsx(LogIn, { className: "h-8 w-8 text-red-600", "aria-hidden": "true" }) }), _jsxs("div", { className: "cls_unauthorized_guard_text", children: [_jsx("h1", { className: "cls_unauthorized_guard_heading text-2xl font-semibold text-slate-900 mb-2", children: "Access Denied" }), _jsx("p", { className: "cls_unauthorized_guard_message text-slate-600", children: message })] }), _jsxs(Button, { onClick: () => router.push(loginPath), variant: "default", className: "cls_unauthorized_guard_login_button mt-4", "aria-label": loginButtonLabel, children: [_jsx(LogIn, { className: "h-4 w-4 mr-2", "aria-hidden": "true" }), loginButtonLabel] })] }) }));
24
+ }
25
+ // Show loading state while checking authentication
26
+ if (authStatus.loading) {
27
+ return (_jsx("div", { className: "cls_unauthorized_guard_loading flex items-center justify-center min-h-screen", children: _jsx("div", { className: "cls_unauthorized_guard_loading_text text-slate-600", children: "Loading..." }) }));
28
+ }
29
+ return _jsx(_Fragment, { children: children });
30
+ }
@@ -0,0 +1,9 @@
1
+ type VisualPanelProps = {
2
+ imageSrc: string;
3
+ imageAlt: string;
4
+ backgroundColor?: string;
5
+ className?: string;
6
+ };
7
+ export declare function VisualPanel({ imageSrc, imageAlt, backgroundColor, className, }: VisualPanelProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=visual_panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual_panel.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/components/visual_panel.tsx"],"names":[],"mappings":"AAQA,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,eAA2B,EAC3B,SAAS,GACV,EAAE,gBAAgB,2CAkBlB"}
@@ -0,0 +1,10 @@
1
+ // file_description: reusable visual panel component for displaying images in authentication layouts
2
+ // section: client_directive
3
+ "use client";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ // section: imports
6
+ import Image from "next/image";
7
+ // section: component
8
+ export function VisualPanel({ imageSrc, imageAlt, backgroundColor = "#f1f5f9", className, }) {
9
+ return (_jsx("div", { className: `cls_visual_panel relative hidden h-full w-full items-center justify-center md:flex ${className !== null && className !== void 0 ? className : ""}`, style: { backgroundColor }, children: _jsx("div", { className: "cls_visual_panel_image_wrapper relative h-full w-full", children: _jsx(Image, { src: imageSrc, alt: imageAlt, fill: true, sizes: "(min-width: 768px) 50vw, 100vw", className: "cls_visual_panel_image object-cover", priority: true }) }) }));
10
+ }
@@ -0,0 +1,38 @@
1
+ export type LayoutFieldId = string;
2
+ export type LayoutFieldDefinition = {
3
+ id: LayoutFieldId;
4
+ label: string;
5
+ type: "text" | "email" | "password";
6
+ autoComplete?: string;
7
+ placeholder: string;
8
+ ariaLabel: string;
9
+ };
10
+ export type LayoutFieldMap = Record<LayoutFieldId, LayoutFieldDefinition>;
11
+ export type LayoutFieldMapOverrides = Partial<Record<LayoutFieldId, Partial<LayoutFieldDefinition>>>;
12
+ export type LayoutLabelDefaults = {
13
+ heading: string;
14
+ subHeading: string;
15
+ submitButton: string;
16
+ cancelButton: string;
17
+ };
18
+ export type LayoutLabelOverrides = Partial<LayoutLabelDefaults>;
19
+ export type ButtonPaletteDefaults = {
20
+ submitBackground: string;
21
+ submitText: string;
22
+ cancelBorder: string;
23
+ cancelText: string;
24
+ };
25
+ export type ButtonPaletteOverrides = Partial<ButtonPaletteDefaults>;
26
+ export type PasswordRequirementOptions = {
27
+ minimum_length: number;
28
+ require_uppercase: boolean;
29
+ require_lowercase: boolean;
30
+ require_number: boolean;
31
+ require_special: boolean;
32
+ };
33
+ export type PasswordRequirementOverrides = Partial<PasswordRequirementOptions>;
34
+ export declare const resolveFieldDefinitions: (baseDefinitions: LayoutFieldMap, overrides?: LayoutFieldMapOverrides) => LayoutFieldMap;
35
+ export declare const resolveLabels: (defaults: LayoutLabelDefaults, overrides?: LayoutLabelOverrides) => LayoutLabelDefaults;
36
+ export declare const resolveButtonPalette: (defaults: ButtonPaletteDefaults, overrides?: ButtonPaletteOverrides) => ButtonPaletteDefaults;
37
+ export declare const resolvePasswordRequirements: (defaults: PasswordRequirementOptions, overrides?: PasswordRequirementOverrides) => PasswordRequirementOptions;
38
+ //# sourceMappingURL=layout_customization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout_customization.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/config/layout_customization.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAErG,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAEhE,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAG/E,eAAO,MAAM,uBAAuB,GAClC,iBAAiB,cAAc,EAC/B,YAAY,uBAAuB,KAClC,cAqBF,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,EAC7B,YAAY,oBAAoB,KAC/B,mBAGD,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,qBAAqB,EAC/B,YAAY,sBAAsB,KACjC,qBAGD,CAAC;AAEH,eAAO,MAAM,2BAA2B,GACtC,UAAU,0BAA0B,EACpC,YAAY,4BAA4B,KACvC,0BAGD,CAAC"}
@@ -0,0 +1,19 @@
1
+ // section: helpers
2
+ export const resolveFieldDefinitions = (baseDefinitions, overrides) => {
3
+ if (!overrides) {
4
+ return baseDefinitions;
5
+ }
6
+ const merged = Object.assign({}, baseDefinitions);
7
+ Object.entries(overrides).forEach(([fieldId, definitionOverride]) => {
8
+ var _a, _b;
9
+ if (!definitionOverride) {
10
+ return;
11
+ }
12
+ const existing = (_a = merged[fieldId]) !== null && _a !== void 0 ? _a : definitionOverride;
13
+ merged[fieldId] = Object.assign(Object.assign(Object.assign({}, existing), definitionOverride), { id: (_b = existing.id) !== null && _b !== void 0 ? _b : fieldId });
14
+ });
15
+ return merged;
16
+ };
17
+ export const resolveLabels = (defaults, overrides) => (Object.assign(Object.assign({}, defaults), (overrides !== null && overrides !== void 0 ? overrides : {})));
18
+ export const resolveButtonPalette = (defaults, overrides) => (Object.assign(Object.assign({}, defaults), (overrides !== null && overrides !== void 0 ? overrides : {})));
19
+ export const resolvePasswordRequirements = (defaults, overrides) => (Object.assign(Object.assign({}, defaults), (overrides !== null && overrides !== void 0 ? overrides : {})));
@@ -0,0 +1,6 @@
1
+ export type LayoutDataClient<TClient = unknown> = {
2
+ client: TClient;
3
+ healthCheck: () => Promise<void>;
4
+ };
5
+ export declare const createLayoutDataClient: <TClient>(hazoClient: TClient) => LayoutDataClient<TClient>;
6
+ //# sourceMappingURL=layout_data_client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout_data_client.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/data/layout_data_client.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,CAAC,OAAO,GAAG,OAAO,IAAI;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC,CAAC;AAGF,eAAO,MAAM,sBAAsB,GAAI,OAAO,EAC5C,YAAY,OAAO,KAClB,gBAAgB,CAAC,OAAO,CAOzB,CAAC"}
@@ -0,0 +1,9 @@
1
+ // section: factory
2
+ export const createLayoutDataClient = (hazoClient) => ({
3
+ client: hazoClient,
4
+ healthCheck: async () => {
5
+ if (hazoClient && typeof hazoClient.healthCheck === "function") {
6
+ await hazoClient.healthCheck();
7
+ }
8
+ },
9
+ });
@@ -0,0 +1,20 @@
1
+ export type AuthStatusData = {
2
+ authenticated: boolean;
3
+ user_id?: string;
4
+ email?: string;
5
+ name?: string;
6
+ email_verified?: boolean;
7
+ last_logon?: string;
8
+ profile_picture_url?: string;
9
+ profile_source?: "upload" | "library" | "gravatar" | "custom";
10
+ loading: boolean;
11
+ };
12
+ export type AuthStatus = AuthStatusData & {
13
+ refresh: () => Promise<void>;
14
+ };
15
+ /**
16
+ * Dispatches a custom event to notify all auth status hooks to refresh
17
+ */
18
+ export declare function trigger_auth_status_refresh(): void;
19
+ export declare function use_auth_status(): AuthStatus;
20
+ //# sourceMappingURL=use_auth_status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_auth_status.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/hooks/use_auth_status.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC9D,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAMF;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD;AAGD,wBAAgB,eAAe,IAAI,UAAU,CA+D5C"}
@@ -0,0 +1,71 @@
1
+ // file_description: hook to check authentication status and get current user info
2
+ // section: client_directive
3
+ "use client";
4
+ // section: imports
5
+ import { useState, useEffect, useCallback } from "react";
6
+ // section: constants
7
+ const AUTH_STATUS_CHANGE_EVENT = "hazo_auth_status_change";
8
+ // section: helpers
9
+ /**
10
+ * Dispatches a custom event to notify all auth status hooks to refresh
11
+ */
12
+ export function trigger_auth_status_refresh() {
13
+ if (typeof window !== "undefined") {
14
+ window.dispatchEvent(new CustomEvent(AUTH_STATUS_CHANGE_EVENT));
15
+ }
16
+ }
17
+ // section: hook
18
+ export function use_auth_status() {
19
+ const [authStatus, setAuthStatus] = useState({
20
+ authenticated: false,
21
+ loading: true,
22
+ });
23
+ const checkAuth = useCallback(async () => {
24
+ setAuthStatus((prev) => (Object.assign(Object.assign({}, prev), { loading: true })));
25
+ try {
26
+ const response = await fetch("/api/hazo_auth/me", {
27
+ method: "GET",
28
+ credentials: "include",
29
+ });
30
+ const data = await response.json();
31
+ if (data.authenticated) {
32
+ setAuthStatus({
33
+ authenticated: true,
34
+ user_id: data.user_id,
35
+ email: data.email,
36
+ name: data.name,
37
+ email_verified: data.email_verified,
38
+ last_logon: data.last_logon,
39
+ profile_picture_url: data.profile_picture_url,
40
+ profile_source: data.profile_source,
41
+ loading: false,
42
+ });
43
+ }
44
+ else {
45
+ setAuthStatus({
46
+ authenticated: false,
47
+ loading: false,
48
+ });
49
+ }
50
+ }
51
+ catch (error) {
52
+ setAuthStatus({
53
+ authenticated: false,
54
+ loading: false,
55
+ });
56
+ }
57
+ }, []);
58
+ useEffect(() => {
59
+ // Check auth status on mount
60
+ void checkAuth();
61
+ // Listen for auth status change events
62
+ const handleAuthChange = () => {
63
+ void checkAuth();
64
+ };
65
+ window.addEventListener(AUTH_STATUS_CHANGE_EVENT, handleAuthChange);
66
+ return () => {
67
+ window.removeEventListener(AUTH_STATUS_CHANGE_EVENT, handleAuthChange);
68
+ };
69
+ }, [checkAuth]);
70
+ return Object.assign(Object.assign({}, authStatus), { refresh: checkAuth });
71
+ }
@@ -0,0 +1,48 @@
1
+ import type { HazoAuthResult } from "hazo_auth/lib/auth/auth_types";
2
+ /**
3
+ * Options for use_hazo_auth hook
4
+ */
5
+ export type UseHazoAuthOptions = {
6
+ /**
7
+ * Array of required permissions to check
8
+ */
9
+ required_permissions?: string[];
10
+ /**
11
+ * If true, throws error when permissions are missing (default: false)
12
+ */
13
+ strict?: boolean;
14
+ /**
15
+ * Skip fetch (for conditional use)
16
+ */
17
+ skip?: boolean;
18
+ };
19
+ /**
20
+ * Result type for use_hazo_auth hook
21
+ */
22
+ export type UseHazoAuthResult = HazoAuthResult & {
23
+ /**
24
+ * Loading state
25
+ */
26
+ loading: boolean;
27
+ /**
28
+ * Error state
29
+ */
30
+ error: Error | null;
31
+ /**
32
+ * Manual refetch function
33
+ */
34
+ refetch: () => Promise<void>;
35
+ };
36
+ /**
37
+ * Triggers a refresh of hazo_auth status across all components
38
+ * Dispatches a custom event that all use_hazo_auth hooks listen to
39
+ */
40
+ export declare function trigger_hazo_auth_refresh(): void;
41
+ /**
42
+ * React hook for hazo_get_auth utility
43
+ * Fetches authentication status and permissions from /api/auth/get_auth
44
+ * @param options - Optional parameters for permission checking
45
+ * @returns UseHazoAuthResult with auth data, loading state, and refetch function
46
+ */
47
+ export declare function use_hazo_auth(options?: UseHazoAuthOptions): UseHazoAuthResult;
48
+ //# sourceMappingURL=use_hazo_auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use_hazo_auth.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/hooks/use_hazo_auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAIpE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAOF;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAMhD;AAID;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,iBAAiB,CAmFnB"}
@@ -0,0 +1,90 @@
1
+ // file_description: React hook for hazo_get_auth utility (client-side)
2
+ // section: client_directive
3
+ "use client";
4
+ // section: imports
5
+ import { useState, useEffect, useCallback } from "react";
6
+ // section: constants
7
+ const AUTH_STATUS_CHANGE_EVENT = "hazo_auth_status_change";
8
+ // section: helpers
9
+ /**
10
+ * Triggers a refresh of hazo_auth status across all components
11
+ * Dispatches a custom event that all use_hazo_auth hooks listen to
12
+ */
13
+ export function trigger_hazo_auth_refresh() {
14
+ if (typeof window !== "undefined") {
15
+ window.dispatchEvent(new CustomEvent(AUTH_STATUS_CHANGE_EVENT));
16
+ }
17
+ }
18
+ // section: hook
19
+ /**
20
+ * React hook for hazo_get_auth utility
21
+ * Fetches authentication status and permissions from /api/auth/get_auth
22
+ * @param options - Optional parameters for permission checking
23
+ * @returns UseHazoAuthResult with auth data, loading state, and refetch function
24
+ */
25
+ export function use_hazo_auth(options) {
26
+ const [authResult, setAuthResult] = useState({
27
+ authenticated: false,
28
+ user: null,
29
+ permissions: [],
30
+ permission_ok: false,
31
+ });
32
+ const [loading, setLoading] = useState(true);
33
+ const [error, setError] = useState(null);
34
+ const fetchAuth = useCallback(async () => {
35
+ if (options === null || options === void 0 ? void 0 : options.skip) {
36
+ setLoading(false);
37
+ return;
38
+ }
39
+ setLoading(true);
40
+ setError(null);
41
+ try {
42
+ const response = await fetch("/api/hazo_auth/get_auth", {
43
+ method: "POST",
44
+ headers: {
45
+ "Content-Type": "application/json",
46
+ },
47
+ credentials: "include",
48
+ body: JSON.stringify({
49
+ required_permissions: options === null || options === void 0 ? void 0 : options.required_permissions,
50
+ strict: (options === null || options === void 0 ? void 0 : options.strict) || false,
51
+ }),
52
+ });
53
+ if (!response.ok) {
54
+ const error_data = await response.json();
55
+ throw new Error(error_data.user_friendly_message ||
56
+ error_data.error ||
57
+ "Failed to fetch authentication status");
58
+ }
59
+ const data = await response.json();
60
+ setAuthResult(data);
61
+ }
62
+ catch (err) {
63
+ const error_message = err instanceof Error ? err : new Error("Unknown error");
64
+ setError(error_message);
65
+ setAuthResult({
66
+ authenticated: false,
67
+ user: null,
68
+ permissions: [],
69
+ permission_ok: false,
70
+ });
71
+ }
72
+ finally {
73
+ setLoading(false);
74
+ }
75
+ }, [options === null || options === void 0 ? void 0 : options.required_permissions, options === null || options === void 0 ? void 0 : options.strict, options === null || options === void 0 ? void 0 : options.skip]);
76
+ useEffect(() => {
77
+ // Fetch auth status on mount
78
+ void fetchAuth();
79
+ // Listen for auth status change events
80
+ const handleAuthChange = () => {
81
+ void fetchAuth();
82
+ };
83
+ window.addEventListener(AUTH_STATUS_CHANGE_EVENT, handleAuthChange);
84
+ return () => {
85
+ window.removeEventListener(AUTH_STATUS_CHANGE_EVENT, handleAuthChange);
86
+ };
87
+ }, [fetchAuth]);
88
+ return Object.assign(Object.assign({}, authResult), { loading,
89
+ error, refetch: fetchAuth });
90
+ }
@@ -0,0 +1,24 @@
1
+ export { AlreadyLoggedInGuard } from "./components/already_logged_in_guard";
2
+ export { AuthPageShell } from "./components/auth_page_shell";
3
+ export { FieldErrorMessage } from "./components/field_error_message";
4
+ export { FormActionButtons } from "./components/form_action_buttons";
5
+ export { FormFieldWrapper } from "./components/form_field_wrapper";
6
+ export { FormHeader } from "./components/form_header";
7
+ export { LogoutButton } from "./components/logout_button";
8
+ export { PasswordField } from "./components/password_field";
9
+ export { ProfilePicMenuWrapper } from "./components/profile_pic_menu_wrapper";
10
+ export { ProfilePicMenu } from "./components/profile_pic_menu";
11
+ export { SidebarLayoutWrapper } from "./components/sidebar_layout_wrapper";
12
+ export { StandaloneLayoutWrapper } from "./components/standalone_layout_wrapper";
13
+ export { TwoColumnAuthLayout } from "./components/two_column_auth_layout";
14
+ export { UnauthorizedGuard } from "./components/unauthorized_guard";
15
+ export { VisualPanel } from "./components/visual_panel";
16
+ export { use_auth_status } from "./hooks/use_auth_status";
17
+ export { use_hazo_auth, trigger_hazo_auth_refresh } from "./hooks/use_hazo_auth";
18
+ export type { UseHazoAuthOptions, UseHazoAuthResult } from "./hooks/use_hazo_auth";
19
+ export * from "./config/layout_customization";
20
+ export { createLayoutDataClient } from "./data/layout_data_client";
21
+ export type { LayoutDataClient } from "./data/layout_data_client";
22
+ export { get_client_ip } from "./utils/ip_address";
23
+ export * from "./utils/validation";
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/layouts/shared/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACjF,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAGnF,cAAc,+BAA+B,CAAC;AAG9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,27 @@
1
+ // file_description: barrel export for shared layout components, hooks, and utilities
2
+ // section: component_exports
3
+ export { AlreadyLoggedInGuard } from "./components/already_logged_in_guard";
4
+ export { AuthPageShell } from "./components/auth_page_shell";
5
+ export { FieldErrorMessage } from "./components/field_error_message";
6
+ export { FormActionButtons } from "./components/form_action_buttons";
7
+ export { FormFieldWrapper } from "./components/form_field_wrapper";
8
+ export { FormHeader } from "./components/form_header";
9
+ export { LogoutButton } from "./components/logout_button";
10
+ export { PasswordField } from "./components/password_field";
11
+ export { ProfilePicMenuWrapper } from "./components/profile_pic_menu_wrapper";
12
+ export { ProfilePicMenu } from "./components/profile_pic_menu";
13
+ export { SidebarLayoutWrapper } from "./components/sidebar_layout_wrapper";
14
+ export { StandaloneLayoutWrapper } from "./components/standalone_layout_wrapper";
15
+ export { TwoColumnAuthLayout } from "./components/two_column_auth_layout";
16
+ export { UnauthorizedGuard } from "./components/unauthorized_guard";
17
+ export { VisualPanel } from "./components/visual_panel";
18
+ // section: hook_exports
19
+ export { use_auth_status } from "./hooks/use_auth_status";
20
+ export { use_hazo_auth, trigger_hazo_auth_refresh } from "./hooks/use_hazo_auth";
21
+ // section: config_exports
22
+ export * from "./config/layout_customization";
23
+ // section: data_exports
24
+ export { createLayoutDataClient } from "./data/layout_data_client";
25
+ // section: utility_exports
26
+ export { get_client_ip } from "./utils/ip_address";
27
+ export * from "./utils/validation";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Attempts to get the client IP address
3
+ * In browser context, this will try to fetch from an API endpoint
4
+ * Falls back to "unknown" if unable to determine
5
+ */
6
+ export declare function get_client_ip(): Promise<string>;
7
+ //# sourceMappingURL=ip_address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip_address.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/utils/ip_address.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CA4BrD"}
@@ -0,0 +1,34 @@
1
+ // file_description: utility functions for collecting client IP address
2
+ // section: client_ip_collection
3
+ /**
4
+ * Attempts to get the client IP address
5
+ * In browser context, this will try to fetch from an API endpoint
6
+ * Falls back to "unknown" if unable to determine
7
+ */
8
+ export async function get_client_ip() {
9
+ // Check if fetch is available (not available in test environment)
10
+ if (typeof fetch === "undefined") {
11
+ return "unknown";
12
+ }
13
+ try {
14
+ // Try to get IP from a public IP detection service
15
+ const response = await fetch("https://api.ipify.org?format=json", {
16
+ method: "GET",
17
+ headers: {
18
+ "Accept": "application/json",
19
+ },
20
+ });
21
+ if (response.ok) {
22
+ const data = await response.json();
23
+ return data.ip || "unknown";
24
+ }
25
+ }
26
+ catch (error) {
27
+ // Silently fail and return unknown
28
+ // Only log in non-test environments
29
+ if (process.env.NODE_ENV !== "test") {
30
+ console.debug("Failed to fetch IP address:", error);
31
+ }
32
+ }
33
+ return "unknown";
34
+ }
@@ -0,0 +1,15 @@
1
+ import type { PasswordRequirementOptions } from "hazo_auth/components/layouts/shared/config/layout_customization";
2
+ /**
3
+ * Validates an email address format
4
+ * @param email - The email address to validate
5
+ * @returns Error message string if invalid, undefined if valid
6
+ */
7
+ export declare function validateEmail(email: string): string | undefined;
8
+ /**
9
+ * Validates a password against specified requirements
10
+ * @param password - The password to validate
11
+ * @param requirements - Password requirement options
12
+ * @returns Array of error message strings if invalid, undefined if valid
13
+ */
14
+ export declare function validatePassword(password: string, requirements: PasswordRequirementOptions): string[] | undefined;
15
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../src/components/layouts/shared/utils/validation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iEAAiE,CAAC;AAMlH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM/D;AAGD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,0BAA0B,GACvC,MAAM,EAAE,GAAG,SAAS,CAiCtB"}