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,329 @@
1
+ // file_description: bootstrap configuration handling for the hazo_auth server
2
+ // section: imports
3
+ import fs from "fs";
4
+ import path from "path";
5
+ import axios from "axios";
6
+ import { HazoConfig } from "hazo_config/dist/lib";
7
+ import { create_logger_service } from "hazo_auth/server/logging/logger_service";
8
+ const is_string_record = (value) => !!value &&
9
+ typeof value === "object" &&
10
+ !Array.isArray(value) &&
11
+ Object.values(value).every((entry) => typeof entry === "string");
12
+ const sanitize_configuration_options = (options, logger) => {
13
+ var _a, _b;
14
+ if (!options || typeof options !== "object") {
15
+ return {};
16
+ }
17
+ const sanitized = {};
18
+ if (typeof options.config_file_path === "string" && options.config_file_path.length > 0) {
19
+ sanitized.config_file_path = options.config_file_path;
20
+ }
21
+ if (options.direct_configuration && typeof options.direct_configuration === "object") {
22
+ const direct_config = {};
23
+ const provided = options.direct_configuration;
24
+ if (Array.isArray(provided.permission_names)) {
25
+ direct_config.permission_names = provided.permission_names.filter((permission) => typeof permission === "string");
26
+ }
27
+ if (is_string_record(provided.templates)) {
28
+ direct_config.templates = provided.templates;
29
+ }
30
+ if (is_string_record(provided.labels)) {
31
+ direct_config.labels = provided.labels;
32
+ }
33
+ if (is_string_record(provided.styles)) {
34
+ direct_config.styles = provided.styles;
35
+ }
36
+ if (provided.emailer &&
37
+ typeof provided.emailer === "object" &&
38
+ typeof provided.emailer.base_url === "string") {
39
+ direct_config.emailer = {
40
+ base_url: provided.emailer.base_url,
41
+ api_key: typeof provided.emailer.api_key === "string" ? provided.emailer.api_key : undefined,
42
+ headers: is_string_record(provided.emailer.headers) ? provided.emailer.headers : undefined,
43
+ };
44
+ }
45
+ if (provided.logger) {
46
+ direct_config.logger = provided.logger;
47
+ }
48
+ if (provided.password_policy) {
49
+ direct_config.password_policy = {
50
+ min_length: typeof provided.password_policy.min_length === "number"
51
+ ? provided.password_policy.min_length
52
+ : undefined,
53
+ requires_lowercase: provided.password_policy.requires_lowercase,
54
+ requires_uppercase: provided.password_policy.requires_uppercase,
55
+ requires_number: provided.password_policy.requires_number,
56
+ requires_symbol: provided.password_policy.requires_symbol,
57
+ };
58
+ }
59
+ if (provided.token_settings) {
60
+ direct_config.token_settings = {
61
+ access_token_ttl_seconds: provided.token_settings.access_token_ttl_seconds,
62
+ refresh_token_ttl_seconds: provided.token_settings.refresh_token_ttl_seconds,
63
+ };
64
+ }
65
+ if (provided.rate_limit) {
66
+ direct_config.rate_limit = {
67
+ max_attempts: provided.rate_limit.max_attempts,
68
+ window_minutes: provided.rate_limit.window_minutes,
69
+ };
70
+ }
71
+ if (provided.captcha) {
72
+ direct_config.captcha = provided.captcha;
73
+ }
74
+ (_b = (_a = direct_config.logger) === null || _a === void 0 ? void 0 : _a.info) === null || _b === void 0 ? void 0 : _b.call(_a, "config_direct_override_detected", { fields: Object.keys(direct_config) });
75
+ sanitized.direct_configuration = direct_config;
76
+ }
77
+ return sanitized;
78
+ };
79
+ // section: defaults
80
+ const default_config_path = path.resolve(process.cwd(), "config.ini");
81
+ const default_password_policy = {
82
+ min_length: 12,
83
+ requires_uppercase: true,
84
+ requires_lowercase: true,
85
+ requires_number: true,
86
+ requires_symbol: true,
87
+ };
88
+ const default_token_settings = {
89
+ access_token_ttl_seconds: 15 * 60,
90
+ refresh_token_ttl_seconds: 60 * 60 * 24 * 30,
91
+ };
92
+ const default_rate_limit = {
93
+ max_attempts: 5,
94
+ window_minutes: 5,
95
+ };
96
+ const read_ini_section = (instance, section) => {
97
+ var _a;
98
+ if (instance === undefined) {
99
+ return {};
100
+ }
101
+ return (_a = instance.getSection(section)) !== null && _a !== void 0 ? _a : {};
102
+ };
103
+ // section: helper_functions
104
+ const resolve_permissions = (direct_permissions, permission_section, logger) => {
105
+ var _a;
106
+ if (direct_permissions && direct_permissions.length > 0) {
107
+ logger.info("config_permissions_direct_override", { count: direct_permissions.length });
108
+ return direct_permissions;
109
+ }
110
+ const configured = (_a = permission_section.list) === null || _a === void 0 ? void 0 : _a.split(",").map((value) => value.trim()).filter((value) => value.length > 0);
111
+ if (configured && configured.length > 0) {
112
+ logger.info("config_permissions_from_file", { count: configured.length });
113
+ return configured;
114
+ }
115
+ logger.warn("config_permissions_default", {});
116
+ return [];
117
+ };
118
+ const resolve_password_policy = (direct_policy, auth_section, logger) => {
119
+ const resolved = Object.assign({}, default_password_policy);
120
+ const apply_value = (key, value) => {
121
+ if (value === undefined) {
122
+ return;
123
+ }
124
+ if (key === "min_length") {
125
+ const parsed = Number(value);
126
+ if (!Number.isNaN(parsed)) {
127
+ resolved[key] = parsed;
128
+ }
129
+ return;
130
+ }
131
+ resolved[key] = value === "true";
132
+ };
133
+ apply_value("min_length", auth_section.min_length);
134
+ apply_value("requires_uppercase", auth_section.requires_uppercase);
135
+ apply_value("requires_lowercase", auth_section.requires_lowercase);
136
+ apply_value("requires_number", auth_section.requires_number);
137
+ apply_value("requires_symbol", auth_section.requires_symbol);
138
+ if (direct_policy) {
139
+ Object.assign(resolved, direct_policy);
140
+ logger.info("config_password_policy_direct_override", resolved);
141
+ }
142
+ return resolved;
143
+ };
144
+ const resolve_token_settings = (direct_tokens, auth_section, logger) => {
145
+ const resolved = Object.assign({}, default_token_settings);
146
+ const access_token_value = Number(auth_section.access_token_ttl_seconds);
147
+ if (!Number.isNaN(access_token_value) && access_token_value > 0) {
148
+ resolved.access_token_ttl_seconds = access_token_value;
149
+ }
150
+ const refresh_token_value = Number(auth_section.refresh_token_ttl_seconds);
151
+ if (!Number.isNaN(refresh_token_value) && refresh_token_value > 0) {
152
+ resolved.refresh_token_ttl_seconds = refresh_token_value;
153
+ }
154
+ if (direct_tokens) {
155
+ Object.assign(resolved, direct_tokens);
156
+ logger.info("config_token_settings_direct_override", resolved);
157
+ }
158
+ return resolved;
159
+ };
160
+ const resolve_rate_limit = (direct_rate_limit, rate_section, logger) => {
161
+ const resolved = Object.assign({}, default_rate_limit);
162
+ const max_attempts = Number(rate_section.max_attempts);
163
+ if (!Number.isNaN(max_attempts) && max_attempts > 0) {
164
+ resolved.max_attempts = max_attempts;
165
+ }
166
+ const window_minutes = Number(rate_section.window_minutes);
167
+ if (!Number.isNaN(window_minutes) && window_minutes > 0) {
168
+ resolved.window_minutes = window_minutes;
169
+ }
170
+ if (direct_rate_limit) {
171
+ Object.assign(resolved, direct_rate_limit);
172
+ logger.info("config_rate_limit_direct_override", resolved);
173
+ }
174
+ return resolved;
175
+ };
176
+ const resolve_captcha = (direct_captcha, captcha_section, logger) => {
177
+ if (direct_captcha) {
178
+ logger.info("config_captcha_direct_override", { provider: direct_captcha.provider });
179
+ return direct_captcha;
180
+ }
181
+ if (captcha_section.provider && captcha_section.secret_key) {
182
+ logger.info("config_captcha_from_file", { provider: captcha_section.provider });
183
+ return {
184
+ provider: captcha_section.provider,
185
+ secret_key: captcha_section.secret_key,
186
+ };
187
+ }
188
+ logger.warn("config_captcha_missing", {});
189
+ return undefined;
190
+ };
191
+ const resolve_dictionary = (direct_values, section_values, logger, metric_name) => {
192
+ if (direct_values && Object.keys(direct_values).length > 0) {
193
+ logger.info(`${metric_name}_direct_override`, { keys: Object.keys(direct_values) });
194
+ return direct_values;
195
+ }
196
+ if (Object.keys(section_values).length > 0) {
197
+ logger.info(`${metric_name}_from_file`, { keys: Object.keys(section_values) });
198
+ return section_values;
199
+ }
200
+ logger.warn(`${metric_name}_empty`, {});
201
+ return {};
202
+ };
203
+ const read_template_file = (file_path, logger) => {
204
+ const absolute_path = path.isAbsolute(file_path)
205
+ ? file_path
206
+ : path.resolve(process.cwd(), file_path);
207
+ try {
208
+ const content = fs.readFileSync(absolute_path, "utf-8");
209
+ logger.info("config_template_loaded", { file_path: absolute_path });
210
+ return content;
211
+ }
212
+ catch (error) {
213
+ logger.error("config_template_load_failed", {
214
+ file_path: absolute_path,
215
+ error: error.message,
216
+ });
217
+ return undefined;
218
+ }
219
+ };
220
+ const resolve_templates = (direct_templates, template_section, logger) => {
221
+ const resolved_templates = {};
222
+ Object.entries(template_section).forEach(([template_name, template_path]) => {
223
+ const template_content = read_template_file(template_path, logger);
224
+ if (template_content) {
225
+ resolved_templates[template_name] = template_content;
226
+ }
227
+ });
228
+ if (direct_templates) {
229
+ Object.entries(direct_templates).forEach(([template_name, template_body]) => {
230
+ resolved_templates[template_name] = template_body;
231
+ });
232
+ logger.info("config_templates_direct_override", { count: Object.keys(direct_templates).length });
233
+ }
234
+ return resolved_templates;
235
+ };
236
+ const create_emailer_client = (emailer_options, logger) => {
237
+ var _a;
238
+ if (!emailer_options) {
239
+ return {
240
+ send_message: async () => {
241
+ logger.warn("emailer_placeholder_invoked", {});
242
+ return { success: true };
243
+ },
244
+ };
245
+ }
246
+ const client = axios.create({
247
+ baseURL: emailer_options.base_url,
248
+ headers: Object.assign(Object.assign(Object.assign({}, ((_a = emailer_options.headers) !== null && _a !== void 0 ? _a : {})), (emailer_options.api_key ? { Authorization: `Bearer ${emailer_options.api_key}` } : {})), { "Content-Type": "application/json" }),
249
+ });
250
+ return {
251
+ send_message: async (payload) => {
252
+ try {
253
+ logger.info("emailer_request_initiated", { payload });
254
+ await client.post("/send", payload);
255
+ logger.info("emailer_request_success", {});
256
+ return { success: true };
257
+ }
258
+ catch (error) {
259
+ logger.error("emailer_request_failed", { error: error.message });
260
+ return { success: false };
261
+ }
262
+ },
263
+ };
264
+ };
265
+ // section: loader
266
+ export const load_runtime_configuration = (options) => {
267
+ var _a, _b, _c;
268
+ const fallback_logger = create_logger_service("hazo_auth_config");
269
+ const parsed_options = sanitize_configuration_options(options, fallback_logger);
270
+ const direct_configuration = parsed_options.direct_configuration;
271
+ const logger = (_a = direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.logger) !== null && _a !== void 0 ? _a : fallback_logger;
272
+ let hazo_config;
273
+ try {
274
+ const config_file_path = (_b = parsed_options === null || parsed_options === void 0 ? void 0 : parsed_options.config_file_path) !== null && _b !== void 0 ? _b : default_config_path;
275
+ if (fs.existsSync(config_file_path)) {
276
+ hazo_config = new HazoConfig({
277
+ filePath: config_file_path,
278
+ logger,
279
+ });
280
+ logger.info("config_file_loaded", { config_file_path });
281
+ }
282
+ else {
283
+ logger.warn("config_file_missing", { config_file_path });
284
+ }
285
+ }
286
+ catch (error) {
287
+ logger.error("config_file_error", { error: error.message });
288
+ }
289
+ const permission_section = read_ini_section(hazo_config, "permissions");
290
+ const auth_section = read_ini_section(hazo_config, "auth");
291
+ const rate_section = read_ini_section(hazo_config, "rate_limit");
292
+ const label_section = read_ini_section(hazo_config, "labels");
293
+ const style_section = read_ini_section(hazo_config, "styles");
294
+ const template_section = read_ini_section(hazo_config, "templates");
295
+ const emailer_section = read_ini_section(hazo_config, "emailer");
296
+ const captcha_section = read_ini_section(hazo_config, "captcha");
297
+ const permission_names = resolve_permissions(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.permission_names, permission_section, logger);
298
+ const password_policy = resolve_password_policy(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.password_policy, auth_section, logger);
299
+ const token_settings = resolve_token_settings(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.token_settings, auth_section, logger);
300
+ const rate_limit = resolve_rate_limit(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.rate_limit, rate_section, logger);
301
+ const labels = resolve_dictionary(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.labels, label_section, logger, "config_labels");
302
+ const styles = resolve_dictionary(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.styles, style_section, logger, "config_styles");
303
+ const templates = resolve_templates(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.templates, template_section, logger);
304
+ const resolved_emailer_options = (_c = direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.emailer) !== null && _c !== void 0 ? _c : (emailer_section.base_url
305
+ ? {
306
+ base_url: emailer_section.base_url,
307
+ api_key: emailer_section.api_key,
308
+ headers: emailer_section.headers ? JSON.parse(emailer_section.headers) : undefined,
309
+ }
310
+ : undefined);
311
+ const emailer = create_emailer_client(resolved_emailer_options, logger);
312
+ const captcha = resolve_captcha(direct_configuration === null || direct_configuration === void 0 ? void 0 : direct_configuration.captcha, captcha_section, logger);
313
+ return {
314
+ permission_names,
315
+ logger,
316
+ emailer,
317
+ templates,
318
+ labels,
319
+ styles,
320
+ password_policy,
321
+ token_settings,
322
+ rate_limit,
323
+ captcha,
324
+ };
325
+ };
326
+ // section: context_factory
327
+ export const create_app_context = (options) => ({
328
+ config: load_runtime_configuration(options),
329
+ });
@@ -0,0 +1,2 @@
1
+ export declare const start_server: () => Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,IAAI,CAgBjD,CAAC"}
@@ -0,0 +1,32 @@
1
+ var _a;
2
+ // file_description: bootstrap entry point for the hazo_auth express server
3
+ // section: imports
4
+ import http from "http";
5
+ import { create_server_app } from "hazo_auth/server/server";
6
+ import { create_logger_service } from "hazo_auth/server/logging/logger_service";
7
+ // section: constants
8
+ const default_port = Number((_a = process.env.PORT) !== null && _a !== void 0 ? _a : 4100);
9
+ const server_namespace = "hazo_auth_server";
10
+ // section: bootstrap_runner
11
+ export const start_server = async () => {
12
+ const logger = create_logger_service(server_namespace);
13
+ const app = create_server_app();
14
+ const http_server = http.createServer(app);
15
+ return new Promise((resolve, reject) => {
16
+ http_server.listen(default_port, () => {
17
+ logger.info("server_started", { port: default_port });
18
+ resolve();
19
+ });
20
+ http_server.on("error", (error) => {
21
+ logger.error("server_start_failed", { error: error.message });
22
+ reject(error);
23
+ });
24
+ });
25
+ };
26
+ // section: direct_execution_guard
27
+ const resolved_module_path = new URL(import.meta.url).pathname;
28
+ const entry_module_path = process.argv[1] !== undefined ? new URL(`file://${process.argv[1]}`).pathname : undefined;
29
+ const is_primary_module = entry_module_path !== undefined && entry_module_path === resolved_module_path;
30
+ if (is_primary_module) {
31
+ void start_server();
32
+ }
@@ -0,0 +1,3 @@
1
+ import type { logger_service } from "hazo_auth/server/types/app_types";
2
+ export declare const create_logger_service: (namespace: string, external_logger?: Partial<logger_service>) => logger_service;
3
+ //# sourceMappingURL=logger_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger_service.d.ts","sourceRoot":"","sources":["../../../src/server/logging/logger_service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,kCAAkC,CAAC;AA2BtF,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,EACjB,kBAAkB,OAAO,CAAC,cAAc,CAAC,KACxC,cAsBF,CAAC"}
@@ -0,0 +1,37 @@
1
+ // section: helper_functions
2
+ const create_console_logger = (namespace) => {
3
+ const write = (level, message, data) => {
4
+ const timestamp = new Date().toISOString();
5
+ // eslint-disable-next-line no-console
6
+ console.log(JSON.stringify({
7
+ namespace,
8
+ level,
9
+ message,
10
+ data,
11
+ timestamp,
12
+ }));
13
+ };
14
+ return {
15
+ debug: (message, data) => write("debug", message, data),
16
+ info: (message, data) => write("info", message, data),
17
+ warn: (message, data) => write("warn", message, data),
18
+ error: (message, data) => write("error", message, data),
19
+ };
20
+ };
21
+ // section: factory
22
+ export const create_logger_service = (namespace, external_logger) => {
23
+ const console_logger = create_console_logger(namespace);
24
+ const safe_bind = (level, fallback) => {
25
+ const candidate = external_logger === null || external_logger === void 0 ? void 0 : external_logger[level];
26
+ if (typeof candidate === "function") {
27
+ return (message, data) => candidate(message, data);
28
+ }
29
+ return fallback;
30
+ };
31
+ return {
32
+ debug: safe_bind("debug", console_logger.debug),
33
+ info: safe_bind("info", console_logger.info),
34
+ warn: safe_bind("warn", console_logger.warn),
35
+ error: safe_bind("error", console_logger.error),
36
+ };
37
+ };
@@ -0,0 +1,3 @@
1
+ import { Router } from "express";
2
+ export declare const create_root_router: () => Router;
3
+ //# sourceMappingURL=root_router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root_router.d.ts","sourceRoot":"","sources":["../../../src/server/routes/root_router.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,eAAO,MAAM,kBAAkB,QAAO,MASrC,CAAC"}
@@ -0,0 +1,14 @@
1
+ // file_description: declares the primary express router for the hazo_auth backend
2
+ // section: imports
3
+ import { Router } from "express";
4
+ // section: router_factory
5
+ export const create_root_router = () => {
6
+ const root_router = Router();
7
+ // section: health_endpoint
8
+ root_router.get("/health", (_request, response) => {
9
+ response.status(200).json({
10
+ status: "ok",
11
+ });
12
+ });
13
+ return root_router;
14
+ };
@@ -0,0 +1,3 @@
1
+ import type { Application } from "express";
2
+ export declare const create_server_app: () => Application;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK3C,eAAO,MAAM,iBAAiB,QAAO,WAcpC,CAAC"}
@@ -0,0 +1,25 @@
1
+ // file_description: configure and export the express application for hazo_auth
2
+ // section: imports
3
+ import express from "express";
4
+ import helmet from "helmet";
5
+ import cors from "cors";
6
+ import cookie_parser from "cookie-parser";
7
+ import compression from "compression";
8
+ import { create_root_router } from "hazo_auth/server/routes/root_router";
9
+ import { create_app_context } from "hazo_auth/server/config/config_loader";
10
+ // section: app_factory
11
+ export const create_server_app = () => {
12
+ const server_app = express();
13
+ server_app.use(helmet({ crossOriginResourcePolicy: false }));
14
+ server_app.use(cors({ credentials: true, origin: true }));
15
+ server_app.use(express.json({ limit: "1mb" }));
16
+ server_app.use(express.urlencoded({ extended: true }));
17
+ server_app.use(cookie_parser());
18
+ server_app.use(compression());
19
+ server_app.use((request, _response, next) => {
20
+ request.context = create_app_context();
21
+ next();
22
+ });
23
+ server_app.use(create_root_router());
24
+ return server_app;
25
+ };
@@ -0,0 +1,53 @@
1
+ import type { Request } from "express";
2
+ export type logger_method = (message: string, data?: Record<string, unknown>) => void;
3
+ export type logger_service = {
4
+ debug: logger_method;
5
+ info: logger_method;
6
+ warn: logger_method;
7
+ error: logger_method;
8
+ };
9
+ export type emailer_client = {
10
+ send_message: (payload: Record<string, unknown>) => Promise<{
11
+ success: boolean;
12
+ }>;
13
+ };
14
+ export type handlebars_templates = Record<string, string>;
15
+ export type password_policy = {
16
+ min_length: number;
17
+ requires_uppercase: boolean;
18
+ requires_lowercase: boolean;
19
+ requires_number: boolean;
20
+ requires_symbol: boolean;
21
+ };
22
+ export type token_settings = {
23
+ access_token_ttl_seconds: number;
24
+ refresh_token_ttl_seconds: number;
25
+ };
26
+ export type rate_limit_settings = {
27
+ max_attempts: number;
28
+ window_minutes: number;
29
+ };
30
+ export type captcha_settings = {
31
+ provider: "recaptcha_v2" | "recaptcha_v3" | "hcaptcha";
32
+ secret_key: string;
33
+ } | undefined;
34
+ export type runtime_configuration = {
35
+ permission_names: string[];
36
+ logger: logger_service;
37
+ emailer: emailer_client;
38
+ templates: handlebars_templates;
39
+ labels: Record<string, string>;
40
+ styles: Record<string, string>;
41
+ password_policy: password_policy;
42
+ token_settings: token_settings;
43
+ rate_limit: rate_limit_settings;
44
+ captcha: captcha_settings;
45
+ };
46
+ export type app_context = {
47
+ config: runtime_configuration;
48
+ };
49
+ export type context_request<T = unknown> = Request & {
50
+ body: T;
51
+ context: app_context;
52
+ };
53
+ //# sourceMappingURL=app_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app_types.d.ts","sourceRoot":"","sources":["../../../src/server/types/app_types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,IAAI,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAGF,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,CACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB;IACE,QAAQ,EAAE,cAAc,GAAG,cAAc,GAAG,UAAU,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB,GACD,SAAS,CAAC;AAEd,MAAM,MAAM,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,oBAAoB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,qBAAqB,CAAC;CAC/B,CAAC;AAGF,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,GAAG;IACnD,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ -- file_description: migration to add url_on_logon column to hazo_users table
2
+ -- This migration adds a url_on_logon text field to store the URL to redirect to after successful login
3
+
4
+ -- Add url_on_logon column (nullable, as this is an optional redirect URL)
5
+ ALTER TABLE hazo_users
6
+ ADD COLUMN url_on_logon TEXT;
7
+
8
+
package/next.config.mjs CHANGED
@@ -22,6 +22,18 @@ const next_config = {
22
22
  // Using webpack externals configuration instead (see webpack section below)
23
23
  // section: webpack_configuration
24
24
  webpack: (config, { isServer }) => {
25
+ // section: hazo_auth_alias_resolution
26
+ // Add hazo_auth/* alias to resolve to ./src/* during local development
27
+ // This allows package-style imports to work during development
28
+ config.resolve.alias = {
29
+ ...config.resolve.alias,
30
+ "hazo_auth/components": path.resolve(__dirname, "src/components"),
31
+ "hazo_auth/lib": path.resolve(__dirname, "src/lib"),
32
+ "hazo_auth/hooks": path.resolve(__dirname, "src/hooks"),
33
+ "hazo_auth/server": path.resolve(__dirname, "src/server"),
34
+ "hazo_auth/app": path.resolve(__dirname, "src/app"),
35
+ };
36
+
25
37
  // Exclude sql.js from webpack bundling for API routes
26
38
  // These packages use Node.js module.exports which doesn't work in webpack context
27
39
  if (isServer) {
package/package.json CHANGED
@@ -1,7 +1,41 @@
1
1
  {
2
2
  "name": "hazo_auth",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ },
12
+ "./components/*": {
13
+ "types": "./dist/components/*.d.ts",
14
+ "import": "./dist/components/*.js"
15
+ },
16
+ "./components/ui/*": {
17
+ "types": "./dist/components/ui/*.d.ts",
18
+ "import": "./dist/components/ui/*.js"
19
+ },
20
+ "./components/layouts/*": {
21
+ "types": "./dist/components/layouts/*.d.ts",
22
+ "import": "./dist/components/layouts/*.js"
23
+ },
24
+ "./lib/*": {
25
+ "types": "./dist/lib/*.d.ts",
26
+ "import": "./dist/lib/*.js"
27
+ },
28
+ "./hooks/*": {
29
+ "types": "./dist/hooks/*.d.ts",
30
+ "import": "./dist/hooks/*.js"
31
+ },
32
+ "./server/*": {
33
+ "types": "./dist/server/*.d.ts",
34
+ "import": "./dist/server/*.js"
35
+ }
36
+ },
4
37
  "files": [
38
+ "dist/**/*",
5
39
  "src/**/*",
6
40
  "public/file.svg",
7
41
  "public/globe.svg",
@@ -14,6 +48,7 @@
14
48
  "README.md",
15
49
  "LICENSE",
16
50
  "tsconfig.json",
51
+ "tsconfig.build.json",
17
52
  "tailwind.config.ts",
18
53
  "postcss.config.mjs",
19
54
  "next.config.mjs",
@@ -25,6 +60,8 @@
25
60
  "scripts": {
26
61
  "dev": "next dev",
27
62
  "build": "next build",
63
+ "build:pkg": "tsc -p tsconfig.build.json",
64
+ "prepublishOnly": "npm run build:pkg",
28
65
  "start": "next start",
29
66
  "lint": "next lint",
30
67
  "storybook": "storybook dev -p 6006",
@@ -103,7 +140,7 @@
103
140
  "better-sqlite3": "^12.4.1",
104
141
  "cross-env": "^10.1.0",
105
142
  "eslint": "^8.57.0",
106
- "eslint-config-next": "^14.2.7",
143
+ "eslint-config-next": "^16.0.4",
107
144
  "eslint-plugin-storybook": "^10.0.6",
108
145
  "jest": "^30.2.0",
109
146
  "jest-environment-jsdom": "^29.7.0",