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,53 @@
1
+ /**
2
+ * User data structure returned by hazo_get_auth
3
+ */
4
+ export type HazoAuthUser = {
5
+ id: string;
6
+ name: string | null;
7
+ email_address: string;
8
+ is_active: boolean;
9
+ profile_picture_url: string | null;
10
+ };
11
+ /**
12
+ * Result type for hazo_get_auth function
13
+ * Returns authenticated state with user data and permissions, or unauthenticated state
14
+ */
15
+ export type HazoAuthResult = {
16
+ authenticated: true;
17
+ user: HazoAuthUser;
18
+ permissions: string[];
19
+ permission_ok: boolean;
20
+ missing_permissions?: string[];
21
+ } | {
22
+ authenticated: false;
23
+ user: null;
24
+ permissions: [];
25
+ permission_ok: false;
26
+ };
27
+ /**
28
+ * Options for hazo_get_auth function
29
+ */
30
+ export type HazoAuthOptions = {
31
+ /**
32
+ * Array of required permissions to check
33
+ * If provided, permission_ok will be set based on whether user has all required permissions
34
+ */
35
+ required_permissions?: string[];
36
+ /**
37
+ * If true, throws PermissionError when user lacks required permissions
38
+ * If false (default), returns permission_ok: false without throwing
39
+ */
40
+ strict?: boolean;
41
+ };
42
+ /**
43
+ * Custom error class for permission denials
44
+ * Includes technical and user-friendly error messages
45
+ */
46
+ export declare class PermissionError extends Error {
47
+ missing_permissions: string[];
48
+ user_permissions: string[];
49
+ required_permissions: string[];
50
+ user_friendly_message?: string | undefined;
51
+ constructor(missing_permissions: string[], user_permissions: string[], required_permissions: string[], user_friendly_message?: string | undefined);
52
+ }
53
+ //# sourceMappingURL=auth_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth_types.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/auth_types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB;IACE,aAAa,EAAE,IAAI,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,GACD;IACE,aAAa,EAAE,KAAK,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,EAAE,CAAC;IAChB,aAAa,EAAE,KAAK,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAE/B,mBAAmB,EAAE,MAAM,EAAE;IAC7B,gBAAgB,EAAE,MAAM,EAAE;IAC1B,oBAAoB,EAAE,MAAM,EAAE;IAC9B,qBAAqB,CAAC,EAAE,MAAM;gBAH9B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,gBAAgB,EAAE,MAAM,EAAE,EAC1B,oBAAoB,EAAE,MAAM,EAAE,EAC9B,qBAAqB,CAAC,EAAE,MAAM,YAAA;CAKxC"}
@@ -0,0 +1,16 @@
1
+ // file_description: Type definitions and error classes for hazo_get_auth utility
2
+ // section: types
3
+ /**
4
+ * Custom error class for permission denials
5
+ * Includes technical and user-friendly error messages
6
+ */
7
+ export class PermissionError extends Error {
8
+ constructor(missing_permissions, user_permissions, required_permissions, user_friendly_message) {
9
+ super(`Missing permissions: ${missing_permissions.join(", ")}`);
10
+ this.missing_permissions = missing_permissions;
11
+ this.user_permissions = user_permissions;
12
+ this.required_permissions = required_permissions;
13
+ this.user_friendly_message = user_friendly_message;
14
+ this.name = "PermissionError";
15
+ }
16
+ }
@@ -0,0 +1,47 @@
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ export type AuthUser = {
3
+ authenticated: true;
4
+ user_id: string;
5
+ email: string;
6
+ name?: string;
7
+ email_verified: boolean;
8
+ is_active: boolean;
9
+ last_logon?: string;
10
+ profile_picture_url?: string;
11
+ profile_source?: "upload" | "library" | "gravatar" | "custom";
12
+ };
13
+ export type AuthResult = AuthUser | {
14
+ authenticated: false;
15
+ };
16
+ /**
17
+ * Checks if a user is authenticated from request cookies
18
+ * Validates user exists, is active, and cookies match
19
+ * @param request - NextRequest object
20
+ * @returns AuthResult with user info or authenticated: false
21
+ */
22
+ export declare function get_authenticated_user(request: NextRequest): Promise<AuthResult>;
23
+ /**
24
+ * Checks if user is authenticated (simple boolean check)
25
+ * @param request - NextRequest object
26
+ * @returns true if authenticated, false otherwise
27
+ */
28
+ export declare function is_authenticated(request: NextRequest): Promise<boolean>;
29
+ /**
30
+ * Requires authentication - throws error if not authenticated
31
+ * Use in API routes that require authentication
32
+ * @param request - NextRequest object
33
+ * @returns AuthUser (never returns authenticated: false, throws instead)
34
+ * @throws Error if not authenticated
35
+ */
36
+ export declare function require_auth(request: NextRequest): Promise<AuthUser>;
37
+ /**
38
+ * Gets authenticated user and returns response with cleared cookies if invalid
39
+ * Useful for /api/auth/me endpoint that needs to clear cookies on invalid auth
40
+ * @param request - NextRequest object
41
+ * @returns Object with auth_result and response (with cleared cookies if invalid)
42
+ */
43
+ export declare function get_authenticated_user_with_response(request: NextRequest): Promise<{
44
+ auth_result: AuthResult;
45
+ response?: NextResponse;
46
+ }>;
47
+ //# sourceMappingURL=auth_utils.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth_utils.server.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/auth_utils.server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMxD,MAAM,MAAM,QAAQ,GAAG;IACrB,aAAa,EAAE,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR;IAAE,aAAa,EAAE,KAAK,CAAA;CAAE,CAAC;AAqB7B;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA8CtF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAG7E;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQ1E;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IACxF,WAAW,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB,CAAC,CA6DD"}
@@ -0,0 +1,150 @@
1
+ // file_description: server-side authentication utilities for checking login status in API routes
2
+ // section: imports
3
+ import { NextResponse } from "next/server";
4
+ import { get_hazo_connect_instance } from "hazo_auth/lib/hazo_connect_instance.server";
5
+ import { createCrudService } from "hazo_connect/server";
6
+ import { map_db_source_to_ui } from "hazo_auth/lib/services/profile_picture_source_mapper";
7
+ // section: helpers
8
+ /**
9
+ * Clears authentication cookies from response
10
+ * @param response - NextResponse object to clear cookies from
11
+ * @returns The response with cleared cookies
12
+ */
13
+ function clear_auth_cookies(response) {
14
+ response.cookies.set("hazo_auth_user_email", "", {
15
+ expires: new Date(0),
16
+ path: "/",
17
+ });
18
+ response.cookies.set("hazo_auth_user_id", "", {
19
+ expires: new Date(0),
20
+ path: "/",
21
+ });
22
+ return response;
23
+ }
24
+ // section: functions
25
+ /**
26
+ * Checks if a user is authenticated from request cookies
27
+ * Validates user exists, is active, and cookies match
28
+ * @param request - NextRequest object
29
+ * @returns AuthResult with user info or authenticated: false
30
+ */
31
+ export async function get_authenticated_user(request) {
32
+ var _a, _b;
33
+ const user_id = (_a = request.cookies.get("hazo_auth_user_id")) === null || _a === void 0 ? void 0 : _a.value;
34
+ const user_email = (_b = request.cookies.get("hazo_auth_user_email")) === null || _b === void 0 ? void 0 : _b.value;
35
+ if (!user_id || !user_email) {
36
+ return { authenticated: false };
37
+ }
38
+ try {
39
+ const hazoConnect = get_hazo_connect_instance();
40
+ const users_service = createCrudService(hazoConnect, "hazo_users");
41
+ const users = await users_service.findBy({
42
+ id: user_id,
43
+ email_address: user_email,
44
+ });
45
+ if (!Array.isArray(users) || users.length === 0) {
46
+ return { authenticated: false };
47
+ }
48
+ const user = users[0];
49
+ // Check if user is active
50
+ if (user.is_active === false) {
51
+ return { authenticated: false };
52
+ }
53
+ // Map database profile_source to UI representation
54
+ const profile_source_db = user.profile_source;
55
+ const profile_source_ui = profile_source_db ? map_db_source_to_ui(profile_source_db) : undefined;
56
+ return {
57
+ authenticated: true,
58
+ user_id: user.id,
59
+ email: user.email_address,
60
+ name: user.name || undefined,
61
+ email_verified: user.email_verified === true,
62
+ is_active: user.is_active === true,
63
+ last_logon: user.last_logon || undefined,
64
+ profile_picture_url: user.profile_picture_url || undefined,
65
+ profile_source: profile_source_ui,
66
+ };
67
+ }
68
+ catch (error) {
69
+ return { authenticated: false };
70
+ }
71
+ }
72
+ /**
73
+ * Checks if user is authenticated (simple boolean check)
74
+ * @param request - NextRequest object
75
+ * @returns true if authenticated, false otherwise
76
+ */
77
+ export async function is_authenticated(request) {
78
+ const result = await get_authenticated_user(request);
79
+ return result.authenticated;
80
+ }
81
+ /**
82
+ * Requires authentication - throws error if not authenticated
83
+ * Use in API routes that require authentication
84
+ * @param request - NextRequest object
85
+ * @returns AuthUser (never returns authenticated: false, throws instead)
86
+ * @throws Error if not authenticated
87
+ */
88
+ export async function require_auth(request) {
89
+ const result = await get_authenticated_user(request);
90
+ if (!result.authenticated) {
91
+ throw new Error("Authentication required");
92
+ }
93
+ return result;
94
+ }
95
+ /**
96
+ * Gets authenticated user and returns response with cleared cookies if invalid
97
+ * Useful for /api/auth/me endpoint that needs to clear cookies on invalid auth
98
+ * @param request - NextRequest object
99
+ * @returns Object with auth_result and response (with cleared cookies if invalid)
100
+ */
101
+ export async function get_authenticated_user_with_response(request) {
102
+ var _a, _b;
103
+ const user_id = (_a = request.cookies.get("hazo_auth_user_id")) === null || _a === void 0 ? void 0 : _a.value;
104
+ const user_email = (_b = request.cookies.get("hazo_auth_user_email")) === null || _b === void 0 ? void 0 : _b.value;
105
+ if (!user_id || !user_email) {
106
+ return { auth_result: { authenticated: false } };
107
+ }
108
+ try {
109
+ const hazoConnect = get_hazo_connect_instance();
110
+ const users_service = createCrudService(hazoConnect, "hazo_users");
111
+ const users = await users_service.findBy({
112
+ id: user_id,
113
+ email_address: user_email,
114
+ });
115
+ if (!Array.isArray(users) || users.length === 0) {
116
+ // User not found - clear cookies
117
+ const response = NextResponse.json({ authenticated: false }, { status: 200 });
118
+ clear_auth_cookies(response);
119
+ return { auth_result: { authenticated: false }, response };
120
+ }
121
+ const user = users[0];
122
+ // Check if user is still active
123
+ if (user.is_active === false) {
124
+ // User is inactive - clear cookies
125
+ const response = NextResponse.json({ authenticated: false }, { status: 200 });
126
+ clear_auth_cookies(response);
127
+ return { auth_result: { authenticated: false }, response };
128
+ }
129
+ // Map database profile_source to UI representation
130
+ const profile_source_db = user.profile_source;
131
+ const profile_source_ui = profile_source_db ? map_db_source_to_ui(profile_source_db) : undefined;
132
+ return {
133
+ auth_result: {
134
+ authenticated: true,
135
+ user_id: user.id,
136
+ email: user.email_address,
137
+ name: user.name || undefined,
138
+ email_verified: user.email_verified === true,
139
+ is_active: user.is_active === true,
140
+ last_logon: user.last_logon || undefined,
141
+ profile_picture_url: user.profile_picture_url || undefined,
142
+ profile_source: profile_source_ui,
143
+ },
144
+ };
145
+ }
146
+ catch (error) {
147
+ // On error, assume not authenticated
148
+ return { auth_result: { authenticated: false } };
149
+ }
150
+ }
@@ -0,0 +1,12 @@
1
+ import { NextRequest } from "next/server";
2
+ import type { HazoAuthResult, HazoAuthOptions } from "hazo_auth/lib/auth/auth_types";
3
+ /**
4
+ * Main hazo_get_auth function for server-side use in API routes
5
+ * Returns user details, permissions, and checks required permissions
6
+ * @param request - NextRequest object
7
+ * @param options - Optional parameters for permission checking
8
+ * @returns HazoAuthResult with user data and permissions
9
+ * @throws PermissionError if strict mode and permissions are missing
10
+ */
11
+ export declare function hazo_get_auth(request: NextRequest, options?: HazoAuthOptions): Promise<HazoAuthResult>;
12
+ //# sourceMappingURL=hazo_get_auth.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hazo_get_auth.server.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/hazo_get_auth.server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,OAAO,KAAK,EAAE,cAAc,EAAgB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAkLnG;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC,CAuIzB"}
@@ -0,0 +1,256 @@
1
+ import { get_hazo_connect_instance } from "hazo_auth/lib/hazo_connect_instance.server";
2
+ import { createCrudService } from "hazo_connect/server";
3
+ import { create_app_logger } from "hazo_auth/lib/app_logger";
4
+ import { get_filename, get_line_number } from "hazo_auth/lib/utils/api_route_helpers";
5
+ import { PermissionError } from "hazo_auth/lib/auth/auth_types";
6
+ import { get_auth_cache } from "hazo_auth/lib/auth/auth_cache";
7
+ import { get_rate_limiter } from "hazo_auth/lib/auth/auth_rate_limiter";
8
+ import { get_auth_utility_config } from "hazo_auth/lib/auth_utility_config.server";
9
+ // section: helpers
10
+ /**
11
+ * Gets client IP address from request
12
+ * @param request - NextRequest object
13
+ * @returns IP address string
14
+ */
15
+ function get_client_ip(request) {
16
+ const forwarded = request.headers.get("x-forwarded-for");
17
+ if (forwarded) {
18
+ return forwarded.split(",")[0].trim();
19
+ }
20
+ const real_ip = request.headers.get("x-real-ip");
21
+ if (real_ip) {
22
+ return real_ip;
23
+ }
24
+ return "unknown";
25
+ }
26
+ /**
27
+ * Fetches user data and permissions from database
28
+ * @param user_id - User ID
29
+ * @returns Object with user, permissions, and role_ids
30
+ */
31
+ async function fetch_user_data_from_db(user_id) {
32
+ const hazoConnect = get_hazo_connect_instance();
33
+ const users_service = createCrudService(hazoConnect, "hazo_users");
34
+ const user_roles_service = createCrudService(hazoConnect, "hazo_user_roles");
35
+ const role_permissions_service = createCrudService(hazoConnect, "hazo_role_permissions");
36
+ const permissions_service = createCrudService(hazoConnect, "hazo_permissions");
37
+ // Fetch user
38
+ const users = await users_service.findBy({ id: user_id });
39
+ if (!Array.isArray(users) || users.length === 0) {
40
+ throw new Error("User not found");
41
+ }
42
+ const user_db = users[0];
43
+ // Check if user is active
44
+ if (user_db.is_active === false) {
45
+ throw new Error("User is inactive");
46
+ }
47
+ // Build user object
48
+ const user = {
49
+ id: user_db.id,
50
+ name: user_db.name || null,
51
+ email_address: user_db.email_address,
52
+ is_active: user_db.is_active === true,
53
+ profile_picture_url: user_db.profile_picture_url || null,
54
+ };
55
+ // Fetch user roles
56
+ const user_roles = await user_roles_service.findBy({ user_id });
57
+ const role_ids = [];
58
+ if (Array.isArray(user_roles)) {
59
+ for (const ur of user_roles) {
60
+ const role_id = ur.role_id;
61
+ if (role_id !== undefined) {
62
+ role_ids.push(role_id);
63
+ }
64
+ }
65
+ }
66
+ // Fetch role permissions
67
+ const permissions_set = new Set();
68
+ if (role_ids.length > 0) {
69
+ const role_permissions = await role_permissions_service.findBy({});
70
+ if (Array.isArray(role_permissions)) {
71
+ // Filter role_permissions for user's roles
72
+ const user_role_permissions = role_permissions.filter((rp) => role_ids.includes(rp.role_id));
73
+ // Get permission IDs
74
+ const permission_ids = new Set();
75
+ for (const rp of user_role_permissions) {
76
+ const perm_id = rp.permission_id;
77
+ if (perm_id !== undefined) {
78
+ permission_ids.add(perm_id);
79
+ }
80
+ }
81
+ // Fetch permission names
82
+ if (permission_ids.size > 0) {
83
+ const permissions = await permissions_service.findBy({});
84
+ if (Array.isArray(permissions)) {
85
+ for (const perm of permissions) {
86
+ const perm_id = perm.id;
87
+ if (perm_id !== undefined && permission_ids.has(perm_id)) {
88
+ const perm_name = perm.permission_name;
89
+ if (perm_name) {
90
+ permissions_set.add(perm_name);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ const permissions = Array.from(permissions_set);
99
+ return { user, permissions, role_ids };
100
+ }
101
+ /**
102
+ * Checks if user has required permissions
103
+ * @param user_permissions - User's permissions
104
+ * @param required_permissions - Required permissions
105
+ * @returns Object with permission_ok and missing_permissions
106
+ */
107
+ function check_permissions(user_permissions, required_permissions) {
108
+ const user_perms_set = new Set(user_permissions);
109
+ const missing = required_permissions.filter((perm) => !user_perms_set.has(perm));
110
+ return {
111
+ permission_ok: missing.length === 0,
112
+ missing_permissions: missing,
113
+ };
114
+ }
115
+ /**
116
+ * Gets user-friendly error message for missing permissions
117
+ * @param missing_permissions - Array of missing permission names
118
+ * @param config - Auth utility config
119
+ * @returns User-friendly message or undefined
120
+ */
121
+ function get_friendly_error_message(missing_permissions, config) {
122
+ if (!config.enable_friendly_error_messages) {
123
+ return undefined;
124
+ }
125
+ // Try to get messages for each missing permission
126
+ const messages = [];
127
+ for (const perm of missing_permissions) {
128
+ const message = config.permission_error_messages.get(perm);
129
+ if (message) {
130
+ messages.push(message);
131
+ }
132
+ }
133
+ if (messages.length > 0) {
134
+ return messages.join(". ");
135
+ }
136
+ // Default message if no specific mapping
137
+ return "You don't have the required permissions to perform this action. Please contact your administrator.";
138
+ }
139
+ // section: main_function
140
+ /**
141
+ * Main hazo_get_auth function for server-side use in API routes
142
+ * Returns user details, permissions, and checks required permissions
143
+ * @param request - NextRequest object
144
+ * @param options - Optional parameters for permission checking
145
+ * @returns HazoAuthResult with user data and permissions
146
+ * @throws PermissionError if strict mode and permissions are missing
147
+ */
148
+ export async function hazo_get_auth(request, options) {
149
+ var _a, _b;
150
+ const logger = create_app_logger();
151
+ const config = get_auth_utility_config();
152
+ const cache = get_auth_cache(config.cache_max_users, config.cache_ttl_minutes, config.cache_max_age_minutes);
153
+ const rate_limiter = get_rate_limiter();
154
+ // Fast path: Check for authentication cookies
155
+ const user_id = (_a = request.cookies.get("hazo_auth_user_id")) === null || _a === void 0 ? void 0 : _a.value;
156
+ const user_email = (_b = request.cookies.get("hazo_auth_user_email")) === null || _b === void 0 ? void 0 : _b.value;
157
+ if (!user_id || !user_email) {
158
+ // Unauthenticated - check rate limit by IP
159
+ const client_ip = get_client_ip(request);
160
+ const ip_key = `ip:${client_ip}`;
161
+ if (!rate_limiter.check(ip_key, config.rate_limit_per_ip)) {
162
+ logger.warn("auth_utility_rate_limit_exceeded_ip", {
163
+ filename: get_filename(),
164
+ line_number: get_line_number(),
165
+ ip: client_ip,
166
+ });
167
+ throw new Error("Rate limit exceeded. Please try again later.");
168
+ }
169
+ return {
170
+ authenticated: false,
171
+ user: null,
172
+ permissions: [],
173
+ permission_ok: false,
174
+ };
175
+ }
176
+ // Authenticated - check rate limit by user
177
+ const user_key = `user:${user_id}`;
178
+ if (!rate_limiter.check(user_key, config.rate_limit_per_user)) {
179
+ logger.warn("auth_utility_rate_limit_exceeded_user", {
180
+ filename: get_filename(),
181
+ line_number: get_line_number(),
182
+ user_id,
183
+ });
184
+ throw new Error("Rate limit exceeded. Please try again later.");
185
+ }
186
+ // Check cache
187
+ let cached_entry = cache.get(user_id);
188
+ let user;
189
+ let permissions;
190
+ let role_ids;
191
+ if (cached_entry) {
192
+ // Cache hit
193
+ user = cached_entry.user;
194
+ permissions = cached_entry.permissions;
195
+ role_ids = cached_entry.role_ids;
196
+ }
197
+ else {
198
+ // Cache miss - fetch from database
199
+ try {
200
+ const user_data = await fetch_user_data_from_db(user_id);
201
+ user = user_data.user;
202
+ permissions = user_data.permissions;
203
+ role_ids = user_data.role_ids;
204
+ // Update cache
205
+ cache.set(user_id, user, permissions, role_ids);
206
+ }
207
+ catch (error) {
208
+ const error_message = error instanceof Error ? error.message : "Unknown error";
209
+ logger.error("auth_utility_fetch_user_failed", {
210
+ filename: get_filename(),
211
+ line_number: get_line_number(),
212
+ user_id,
213
+ error: error_message,
214
+ });
215
+ return {
216
+ authenticated: false,
217
+ user: null,
218
+ permissions: [],
219
+ permission_ok: false,
220
+ };
221
+ }
222
+ }
223
+ // Check permissions if required
224
+ let permission_ok = true;
225
+ let missing_permissions;
226
+ if ((options === null || options === void 0 ? void 0 : options.required_permissions) && options.required_permissions.length > 0) {
227
+ const check_result = check_permissions(permissions, options.required_permissions);
228
+ permission_ok = check_result.permission_ok;
229
+ missing_permissions = check_result.missing_permissions;
230
+ // Log permission denial if enabled
231
+ if (!permission_ok && config.log_permission_denials) {
232
+ const client_ip = get_client_ip(request);
233
+ logger.warn("auth_utility_permission_denied", {
234
+ filename: get_filename(),
235
+ line_number: get_line_number(),
236
+ user_id,
237
+ requested_permissions: options.required_permissions,
238
+ missing_permissions,
239
+ user_permissions: permissions,
240
+ ip: client_ip,
241
+ });
242
+ }
243
+ // Throw error if strict mode
244
+ if (!permission_ok && options.strict) {
245
+ const friendly_message = get_friendly_error_message(missing_permissions, config);
246
+ throw new PermissionError(missing_permissions, permissions, options.required_permissions, friendly_message);
247
+ }
248
+ }
249
+ return {
250
+ authenticated: true,
251
+ user,
252
+ permissions,
253
+ permission_ok,
254
+ missing_permissions,
255
+ };
256
+ }
@@ -0,0 +1,9 @@
1
+ export * from "./auth_types";
2
+ export { hazo_get_auth } from "./hazo_get_auth.server";
3
+ export { get_authenticated_user, require_auth, is_authenticated, } from "./auth_utils.server";
4
+ export type { AuthResult, AuthUser } from "./auth_utils.server";
5
+ export { get_server_auth_user } from "./server_auth";
6
+ export type { ServerAuthResult } from "./server_auth";
7
+ export { get_auth_cache, reset_auth_cache } from "./auth_cache";
8
+ export { get_rate_limiter, reset_rate_limiter } from "./auth_rate_limiter";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/index.ts"],"names":[],"mappings":"AAEA,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ // file_description: barrel export for auth utilities
2
+ // section: type_exports
3
+ export * from "./auth_types";
4
+ // section: server_exports
5
+ export { hazo_get_auth } from "./hazo_get_auth.server";
6
+ export { get_authenticated_user, require_auth, is_authenticated, } from "./auth_utils.server";
7
+ // section: client_exports
8
+ export { get_server_auth_user } from "./server_auth";
9
+ // section: cache_exports
10
+ export { get_auth_cache, reset_auth_cache } from "./auth_cache";
11
+ // section: rate_limiter_exports
12
+ export { get_rate_limiter, reset_rate_limiter } from "./auth_rate_limiter";
@@ -0,0 +1,26 @@
1
+ export type ServerAuthUser = {
2
+ authenticated: true;
3
+ user_id: string;
4
+ email: string;
5
+ name?: string;
6
+ email_verified: boolean;
7
+ is_active: boolean;
8
+ last_logon?: string;
9
+ profile_picture_url?: string;
10
+ profile_source?: "upload" | "library" | "gravatar" | "custom";
11
+ };
12
+ export type ServerAuthResult = ServerAuthUser | {
13
+ authenticated: false;
14
+ };
15
+ /**
16
+ * Gets authenticated user in server components/pages
17
+ * Uses Next.js cookies() function to read authentication cookies
18
+ * @returns ServerAuthResult with user info or authenticated: false
19
+ */
20
+ export declare function get_server_auth_user(): Promise<ServerAuthResult>;
21
+ /**
22
+ * Checks if user is authenticated in server components/pages (simple boolean check)
23
+ * @returns true if authenticated, false otherwise
24
+ */
25
+ export declare function is_server_authenticated(): Promise<boolean>;
26
+ //# sourceMappingURL=server_auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server_auth.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/server_auth.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,EAAE,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd;IAAE,aAAa,EAAE,KAAK,CAAA;CAAE,CAAC;AAG7B;;;;GAIG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA+CtE;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC,CAGhE"}
@@ -0,0 +1,62 @@
1
+ // file_description: server-side auth utilities for server components and pages
2
+ // section: imports
3
+ import { cookies } from "next/headers";
4
+ import { get_hazo_connect_instance } from "hazo_auth/lib/hazo_connect_instance.server";
5
+ import { createCrudService } from "hazo_connect/server";
6
+ import { map_db_source_to_ui } from "hazo_auth/lib/services/profile_picture_source_mapper";
7
+ // section: functions
8
+ /**
9
+ * Gets authenticated user in server components/pages
10
+ * Uses Next.js cookies() function to read authentication cookies
11
+ * @returns ServerAuthResult with user info or authenticated: false
12
+ */
13
+ export async function get_server_auth_user() {
14
+ var _a, _b;
15
+ const cookie_store = await cookies();
16
+ const user_id = (_a = cookie_store.get("hazo_auth_user_id")) === null || _a === void 0 ? void 0 : _a.value;
17
+ const user_email = (_b = cookie_store.get("hazo_auth_user_email")) === null || _b === void 0 ? void 0 : _b.value;
18
+ if (!user_id || !user_email) {
19
+ return { authenticated: false };
20
+ }
21
+ try {
22
+ const hazoConnect = get_hazo_connect_instance();
23
+ const users_service = createCrudService(hazoConnect, "hazo_users");
24
+ const users = await users_service.findBy({
25
+ id: user_id,
26
+ email_address: user_email,
27
+ });
28
+ if (!Array.isArray(users) || users.length === 0) {
29
+ return { authenticated: false };
30
+ }
31
+ const user = users[0];
32
+ // Check if user is active
33
+ if (user.is_active === false) {
34
+ return { authenticated: false };
35
+ }
36
+ // Map database profile_source to UI representation
37
+ const profile_source_db = user.profile_source;
38
+ const profile_source_ui = profile_source_db ? map_db_source_to_ui(profile_source_db) : undefined;
39
+ return {
40
+ authenticated: true,
41
+ user_id: user.id,
42
+ email: user.email_address,
43
+ name: user.name || undefined,
44
+ email_verified: user.email_verified === true,
45
+ is_active: user.is_active === true,
46
+ last_logon: user.last_logon || undefined,
47
+ profile_picture_url: user.profile_picture_url || undefined,
48
+ profile_source: profile_source_ui,
49
+ };
50
+ }
51
+ catch (error) {
52
+ return { authenticated: false };
53
+ }
54
+ }
55
+ /**
56
+ * Checks if user is authenticated in server components/pages (simple boolean check)
57
+ * @returns true if authenticated, false otherwise
58
+ */
59
+ export async function is_server_authenticated() {
60
+ const result = await get_server_auth_user();
61
+ return result.authenticated;
62
+ }