hazo_auth 1.4.1 → 1.6.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 (478) hide show
  1. package/README.md +25 -38
  2. package/SETUP_CHECKLIST.md +708 -0
  3. package/dist/app/api/hazo_auth/change_password/route.d.ts +8 -0
  4. package/dist/app/api/hazo_auth/change_password/route.d.ts.map +1 -0
  5. package/dist/app/api/hazo_auth/change_password/route.js +98 -0
  6. package/dist/app/api/hazo_auth/forgot_password/route.d.ts +8 -0
  7. package/dist/app/api/hazo_auth/forgot_password/route.d.ts.map +1 -0
  8. package/dist/app/api/hazo_auth/forgot_password/route.js +78 -0
  9. package/dist/app/api/hazo_auth/get_auth/route.d.ts +10 -0
  10. package/dist/app/api/hazo_auth/get_auth/route.d.ts.map +1 -0
  11. package/dist/app/api/hazo_auth/get_auth/route.js +63 -0
  12. package/dist/app/api/hazo_auth/invalidate_cache/route.d.ts +14 -0
  13. package/dist/app/api/hazo_auth/invalidate_cache/route.d.ts.map +1 -0
  14. package/dist/app/api/hazo_auth/invalidate_cache/route.js +96 -0
  15. package/dist/app/api/hazo_auth/library_photos/route.d.ts +13 -0
  16. package/dist/app/api/hazo_auth/library_photos/route.d.ts.map +1 -0
  17. package/dist/app/api/hazo_auth/library_photos/route.js +55 -0
  18. package/dist/app/api/hazo_auth/login/route.d.ts +12 -0
  19. package/dist/app/api/hazo_auth/login/route.d.ts.map +1 -0
  20. package/dist/app/api/hazo_auth/login/route.js +140 -0
  21. package/dist/app/api/hazo_auth/logout/route.d.ts +8 -0
  22. package/dist/app/api/hazo_auth/logout/route.d.ts.map +1 -0
  23. package/dist/app/api/hazo_auth/logout/route.js +71 -0
  24. package/dist/app/api/hazo_auth/me/route.d.ts +3 -0
  25. package/dist/app/api/hazo_auth/me/route.d.ts.map +1 -0
  26. package/dist/app/api/hazo_auth/me/route.js +34 -0
  27. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.d.ts +7 -0
  28. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.d.ts.map +1 -0
  29. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.js +43 -0
  30. package/dist/app/api/hazo_auth/register/route.d.ts +9 -0
  31. package/dist/app/api/hazo_auth/register/route.d.ts.map +1 -0
  32. package/dist/app/api/hazo_auth/register/route.js +80 -0
  33. package/dist/app/api/hazo_auth/remove_profile_picture/route.d.ts +8 -0
  34. package/dist/app/api/hazo_auth/remove_profile_picture/route.d.ts.map +1 -0
  35. package/dist/app/api/hazo_auth/remove_profile_picture/route.js +64 -0
  36. package/dist/app/api/hazo_auth/resend_verification/route.d.ts +8 -0
  37. package/dist/app/api/hazo_auth/resend_verification/route.d.ts.map +1 -0
  38. package/dist/app/api/hazo_auth/resend_verification/route.js +79 -0
  39. package/dist/app/api/hazo_auth/reset_password/route.d.ts +8 -0
  40. package/dist/app/api/hazo_auth/reset_password/route.d.ts.map +1 -0
  41. package/dist/app/api/hazo_auth/reset_password/route.js +76 -0
  42. package/dist/app/api/hazo_auth/update_user/route.d.ts +9 -0
  43. package/dist/app/api/hazo_auth/update_user/route.d.ts.map +1 -0
  44. package/dist/app/api/hazo_auth/update_user/route.js +95 -0
  45. package/dist/app/api/hazo_auth/upload_profile_picture/route.d.ts +9 -0
  46. package/dist/app/api/hazo_auth/upload_profile_picture/route.d.ts.map +1 -0
  47. package/dist/app/api/hazo_auth/upload_profile_picture/route.js +204 -0
  48. package/dist/app/api/hazo_auth/validate_reset_token/route.d.ts +6 -0
  49. package/dist/app/api/hazo_auth/validate_reset_token/route.d.ts.map +1 -0
  50. package/dist/app/api/hazo_auth/validate_reset_token/route.js +58 -0
  51. package/dist/app/api/hazo_auth/verify_email/route.d.ts +11 -0
  52. package/dist/app/api/hazo_auth/verify_email/route.d.ts.map +1 -0
  53. package/dist/app/api/hazo_auth/verify_email/route.js +63 -0
  54. package/dist/cli/generate.d.ts +2 -0
  55. package/dist/cli/generate.d.ts.map +1 -0
  56. package/dist/cli/generate.js +117 -0
  57. package/dist/cli/index.d.ts +3 -0
  58. package/dist/cli/index.d.ts.map +1 -0
  59. package/dist/cli/index.js +120 -0
  60. package/dist/cli/validate.d.ts +15 -0
  61. package/dist/cli/validate.d.ts.map +1 -0
  62. package/dist/cli/validate.js +509 -0
  63. package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts +2 -2
  64. package/dist/components/layouts/email_verification/config/email_verification_field_config.d.ts.map +1 -1
  65. package/dist/components/layouts/email_verification/config/email_verification_field_config.js +1 -1
  66. package/dist/components/layouts/email_verification/hooks/use_email_verification.d.ts +2 -2
  67. package/dist/components/layouts/email_verification/hooks/use_email_verification.d.ts.map +1 -1
  68. package/dist/components/layouts/email_verification/hooks/use_email_verification.js +2 -2
  69. package/dist/components/layouts/email_verification/index.d.ts +3 -3
  70. package/dist/components/layouts/email_verification/index.d.ts.map +1 -1
  71. package/dist/components/layouts/email_verification/index.js +9 -9
  72. package/dist/components/layouts/forgot_password/config/forgot_password_field_config.d.ts +2 -2
  73. package/dist/components/layouts/forgot_password/config/forgot_password_field_config.d.ts.map +1 -1
  74. package/dist/components/layouts/forgot_password/config/forgot_password_field_config.js +1 -1
  75. package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.d.ts +2 -2
  76. package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.d.ts.map +1 -1
  77. package/dist/components/layouts/forgot_password/hooks/use_forgot_password_form.js +2 -2
  78. package/dist/components/layouts/forgot_password/index.d.ts +2 -2
  79. package/dist/components/layouts/forgot_password/index.d.ts.map +1 -1
  80. package/dist/components/layouts/forgot_password/index.js +8 -8
  81. package/dist/components/layouts/login/config/login_field_config.d.ts +2 -2
  82. package/dist/components/layouts/login/config/login_field_config.d.ts.map +1 -1
  83. package/dist/components/layouts/login/config/login_field_config.js +1 -1
  84. package/dist/components/layouts/login/hooks/use_login_form.d.ts +2 -2
  85. package/dist/components/layouts/login/hooks/use_login_form.d.ts.map +1 -1
  86. package/dist/components/layouts/login/hooks/use_login_form.js +4 -4
  87. package/dist/components/layouts/login/index.d.ts +2 -2
  88. package/dist/components/layouts/login/index.d.ts.map +1 -1
  89. package/dist/components/layouts/login/index.js +9 -9
  90. package/dist/components/layouts/my_settings/components/editable_field.js +3 -3
  91. package/dist/components/layouts/my_settings/components/password_change_dialog.d.ts +1 -1
  92. package/dist/components/layouts/my_settings/components/password_change_dialog.d.ts.map +1 -1
  93. package/dist/components/layouts/my_settings/components/password_change_dialog.js +4 -4
  94. package/dist/components/layouts/my_settings/components/profile_picture_dialog.js +7 -7
  95. package/dist/components/layouts/my_settings/components/profile_picture_display.js +1 -1
  96. package/dist/components/layouts/my_settings/components/profile_picture_gravatar_tab.js +3 -3
  97. package/dist/components/layouts/my_settings/components/profile_picture_library_tab.js +5 -5
  98. package/dist/components/layouts/my_settings/components/profile_picture_upload_tab.js +4 -4
  99. package/dist/components/layouts/my_settings/config/my_settings_field_config.d.ts +1 -1
  100. package/dist/components/layouts/my_settings/config/my_settings_field_config.d.ts.map +1 -1
  101. package/dist/components/layouts/my_settings/config/my_settings_field_config.js +1 -1
  102. package/dist/components/layouts/my_settings/hooks/use_my_settings.d.ts +1 -1
  103. package/dist/components/layouts/my_settings/hooks/use_my_settings.d.ts.map +1 -1
  104. package/dist/components/layouts/my_settings/hooks/use_my_settings.js +1 -1
  105. package/dist/components/layouts/my_settings/index.d.ts +2 -2
  106. package/dist/components/layouts/my_settings/index.d.ts.map +1 -1
  107. package/dist/components/layouts/my_settings/index.js +9 -9
  108. package/dist/components/layouts/register/config/register_field_config.d.ts +2 -2
  109. package/dist/components/layouts/register/config/register_field_config.d.ts.map +1 -1
  110. package/dist/components/layouts/register/config/register_field_config.js +1 -1
  111. package/dist/components/layouts/register/hooks/use_register_form.d.ts +3 -3
  112. package/dist/components/layouts/register/hooks/use_register_form.d.ts.map +1 -1
  113. package/dist/components/layouts/register/hooks/use_register_form.js +2 -2
  114. package/dist/components/layouts/register/index.d.ts +2 -2
  115. package/dist/components/layouts/register/index.d.ts.map +1 -1
  116. package/dist/components/layouts/register/index.js +9 -9
  117. package/dist/components/layouts/reset_password/config/reset_password_field_config.d.ts +2 -2
  118. package/dist/components/layouts/reset_password/config/reset_password_field_config.d.ts.map +1 -1
  119. package/dist/components/layouts/reset_password/config/reset_password_field_config.js +1 -1
  120. package/dist/components/layouts/reset_password/hooks/use_reset_password_form.d.ts +3 -3
  121. package/dist/components/layouts/reset_password/hooks/use_reset_password_form.d.ts.map +1 -1
  122. package/dist/components/layouts/reset_password/hooks/use_reset_password_form.js +2 -2
  123. package/dist/components/layouts/reset_password/index.d.ts +2 -2
  124. package/dist/components/layouts/reset_password/index.d.ts.map +1 -1
  125. package/dist/components/layouts/reset_password/index.js +8 -8
  126. package/dist/components/layouts/shared/components/already_logged_in_guard.js +4 -4
  127. package/dist/components/layouts/shared/components/auth_page_shell.js +3 -3
  128. package/dist/components/layouts/shared/components/form_action_buttons.d.ts +1 -1
  129. package/dist/components/layouts/shared/components/form_action_buttons.d.ts.map +1 -1
  130. package/dist/components/layouts/shared/components/form_action_buttons.js +1 -1
  131. package/dist/components/layouts/shared/components/form_field_wrapper.js +2 -2
  132. package/dist/components/layouts/shared/components/logout_button.js +2 -2
  133. package/dist/components/layouts/shared/components/password_field.js +3 -3
  134. package/dist/components/layouts/shared/components/profile_pic_menu.d.ts +1 -1
  135. package/dist/components/layouts/shared/components/profile_pic_menu.d.ts.map +1 -1
  136. package/dist/components/layouts/shared/components/profile_pic_menu.js +4 -4
  137. package/dist/components/layouts/shared/components/profile_pic_menu_wrapper.js +2 -2
  138. package/dist/components/layouts/shared/components/sidebar_layout_wrapper.js +3 -3
  139. package/dist/components/layouts/shared/components/standalone_layout_wrapper.js +1 -1
  140. package/dist/components/layouts/shared/components/two_column_auth_layout.js +1 -1
  141. package/dist/components/layouts/shared/components/unauthorized_guard.js +2 -2
  142. package/dist/components/layouts/shared/hooks/use_hazo_auth.d.ts +1 -1
  143. package/dist/components/layouts/shared/hooks/use_hazo_auth.d.ts.map +1 -1
  144. package/dist/components/layouts/shared/utils/validation.d.ts +1 -1
  145. package/dist/components/layouts/shared/utils/validation.d.ts.map +1 -1
  146. package/dist/components/layouts/user_management/components/roles_matrix.js +7 -7
  147. package/dist/components/layouts/user_management/index.js +11 -11
  148. package/dist/components/ui/alert-dialog.js +2 -2
  149. package/dist/components/ui/avatar.js +1 -1
  150. package/dist/components/ui/button.js +1 -1
  151. package/dist/components/ui/card.d.ts +9 -0
  152. package/dist/components/ui/card.d.ts.map +1 -0
  153. package/dist/components/ui/card.js +45 -0
  154. package/dist/components/ui/checkbox.js +1 -1
  155. package/dist/components/ui/dialog.js +1 -1
  156. package/dist/components/ui/dropdown-menu.js +1 -1
  157. package/dist/components/ui/hazo_ui_tooltip.js +1 -1
  158. package/dist/components/ui/input.js +1 -1
  159. package/dist/components/ui/label.js +1 -1
  160. package/dist/components/ui/separator.js +1 -1
  161. package/dist/components/ui/sheet.js +1 -1
  162. package/dist/components/ui/sidebar.d.ts +2 -2
  163. package/dist/components/ui/sidebar.d.ts.map +1 -1
  164. package/dist/components/ui/sidebar.js +8 -8
  165. package/dist/components/ui/skeleton.js +1 -1
  166. package/dist/components/ui/switch.js +1 -1
  167. package/dist/components/ui/table.js +1 -1
  168. package/dist/components/ui/tabs.js +1 -1
  169. package/dist/components/ui/tooltip.js +1 -1
  170. package/dist/components/ui/vertical-tabs.js +1 -1
  171. package/dist/hooks/use-mobile.d.ts.map +1 -1
  172. package/dist/hooks/use-mobile.js +17 -3
  173. package/dist/lib/already_logged_in_config.server.js +1 -1
  174. package/dist/lib/app_logger.js +1 -1
  175. package/dist/lib/auth/auth_cache.d.ts +1 -1
  176. package/dist/lib/auth/auth_cache.d.ts.map +1 -1
  177. package/dist/lib/auth/auth_utils.server.js +2 -2
  178. package/dist/lib/auth/hazo_get_auth.server.d.ts +1 -1
  179. package/dist/lib/auth/hazo_get_auth.server.d.ts.map +1 -1
  180. package/dist/lib/auth/hazo_get_auth.server.js +7 -7
  181. package/dist/lib/auth/server_auth.js +2 -2
  182. package/dist/lib/auth_utility_config.server.js +1 -1
  183. package/dist/lib/config/config_loader.server.js +1 -1
  184. package/dist/lib/email_verification_config.server.js +1 -1
  185. package/dist/lib/file_types_config.server.js +1 -1
  186. package/dist/lib/forgot_password_config.server.js +1 -1
  187. package/dist/lib/hazo_connect_instance.server.js +2 -2
  188. package/dist/lib/hazo_connect_setup.server.js +2 -2
  189. package/dist/lib/login_config.server.js +2 -2
  190. package/dist/lib/messages_config.server.js +1 -1
  191. package/dist/lib/my_settings_config.server.js +7 -7
  192. package/dist/lib/password_requirements_config.server.js +1 -1
  193. package/dist/lib/profile_pic_menu_config.server.js +1 -1
  194. package/dist/lib/profile_picture_config.server.js +2 -2
  195. package/dist/lib/register_config.server.js +4 -4
  196. package/dist/lib/reset_password_config.server.js +3 -3
  197. package/dist/lib/services/email_service.js +2 -2
  198. package/dist/lib/services/email_verification_service.js +3 -3
  199. package/dist/lib/services/login_service.js +3 -3
  200. package/dist/lib/services/password_change_service.js +3 -3
  201. package/dist/lib/services/password_reset_service.js +3 -3
  202. package/dist/lib/services/profile_picture_remove_service.js +3 -3
  203. package/dist/lib/services/profile_picture_service.d.ts +1 -1
  204. package/dist/lib/services/profile_picture_service.d.ts.map +1 -1
  205. package/dist/lib/services/profile_picture_service.js +5 -5
  206. package/dist/lib/services/registration_service.js +8 -8
  207. package/dist/lib/services/token_service.js +2 -2
  208. package/dist/lib/services/user_profiles_service.js +2 -2
  209. package/dist/lib/services/user_update_service.d.ts +1 -1
  210. package/dist/lib/services/user_update_service.d.ts.map +1 -1
  211. package/dist/lib/services/user_update_service.js +4 -4
  212. package/dist/lib/ui_shell_config.server.js +1 -1
  213. package/dist/lib/ui_sizes_config.server.js +1 -1
  214. package/dist/lib/user_fields_config.server.js +1 -1
  215. package/dist/lib/user_management_config.server.js +1 -1
  216. package/dist/lib/utils/error_sanitizer.d.ts +1 -1
  217. package/dist/lib/utils/error_sanitizer.d.ts.map +1 -1
  218. package/dist/server/config/config_loader.d.ts +1 -1
  219. package/dist/server/config/config_loader.d.ts.map +1 -1
  220. package/dist/server/config/config_loader.js +1 -1
  221. package/dist/server/index.js +2 -2
  222. package/dist/server/logging/logger_service.d.ts +1 -1
  223. package/dist/server/logging/logger_service.d.ts.map +1 -1
  224. package/dist/server/routes/change_password.d.ts +2 -0
  225. package/dist/server/routes/change_password.d.ts.map +1 -0
  226. package/dist/server/routes/change_password.js +2 -0
  227. package/dist/server/routes/forgot_password.d.ts +2 -0
  228. package/dist/server/routes/forgot_password.d.ts.map +1 -0
  229. package/dist/server/routes/forgot_password.js +2 -0
  230. package/dist/server/routes/get_auth.d.ts +2 -0
  231. package/dist/server/routes/get_auth.d.ts.map +1 -0
  232. package/dist/server/routes/get_auth.js +2 -0
  233. package/dist/server/routes/index.d.ts +18 -0
  234. package/dist/server/routes/index.d.ts.map +1 -0
  235. package/dist/server/routes/index.js +24 -0
  236. package/dist/server/routes/invalidate_cache.d.ts +2 -0
  237. package/dist/server/routes/invalidate_cache.d.ts.map +1 -0
  238. package/dist/server/routes/invalidate_cache.js +2 -0
  239. package/dist/server/routes/library_photos.d.ts +2 -0
  240. package/dist/server/routes/library_photos.d.ts.map +1 -0
  241. package/dist/server/routes/library_photos.js +2 -0
  242. package/dist/server/routes/login.d.ts +2 -0
  243. package/dist/server/routes/login.d.ts.map +1 -0
  244. package/dist/server/routes/login.js +2 -0
  245. package/dist/server/routes/logout.d.ts +2 -0
  246. package/dist/server/routes/logout.d.ts.map +1 -0
  247. package/dist/server/routes/logout.js +2 -0
  248. package/dist/server/routes/me.d.ts +2 -0
  249. package/dist/server/routes/me.d.ts.map +1 -0
  250. package/dist/server/routes/me.js +2 -0
  251. package/dist/server/routes/profile_picture_filename.d.ts +2 -0
  252. package/dist/server/routes/profile_picture_filename.d.ts.map +1 -0
  253. package/dist/server/routes/profile_picture_filename.js +3 -0
  254. package/dist/server/routes/register.d.ts +2 -0
  255. package/dist/server/routes/register.d.ts.map +1 -0
  256. package/dist/server/routes/register.js +2 -0
  257. package/dist/server/routes/remove_profile_picture.d.ts +2 -0
  258. package/dist/server/routes/remove_profile_picture.d.ts.map +1 -0
  259. package/dist/server/routes/remove_profile_picture.js +2 -0
  260. package/dist/server/routes/resend_verification.d.ts +2 -0
  261. package/dist/server/routes/resend_verification.d.ts.map +1 -0
  262. package/dist/server/routes/resend_verification.js +2 -0
  263. package/dist/server/routes/reset_password.d.ts +2 -0
  264. package/dist/server/routes/reset_password.d.ts.map +1 -0
  265. package/dist/server/routes/reset_password.js +2 -0
  266. package/dist/server/routes/update_user.d.ts +2 -0
  267. package/dist/server/routes/update_user.d.ts.map +1 -0
  268. package/dist/server/routes/update_user.js +2 -0
  269. package/dist/server/routes/upload_profile_picture.d.ts +2 -0
  270. package/dist/server/routes/upload_profile_picture.d.ts.map +1 -0
  271. package/dist/server/routes/upload_profile_picture.js +2 -0
  272. package/dist/server/routes/validate_reset_token.d.ts +2 -0
  273. package/dist/server/routes/validate_reset_token.d.ts.map +1 -0
  274. package/dist/server/routes/validate_reset_token.js +2 -0
  275. package/dist/server/routes/verify_email.d.ts +2 -0
  276. package/dist/server/routes/verify_email.d.ts.map +1 -0
  277. package/dist/server/routes/verify_email.js +2 -0
  278. package/dist/server/server.js +2 -2
  279. package/package.json +14 -115
  280. package/components.json +0 -22
  281. package/instrumentation.ts +0 -32
  282. package/migrations/001_add_token_type_to_refresh_tokens.sql +0 -14
  283. package/migrations/002_add_name_to_hazo_users.sql +0 -7
  284. package/migrations/003_add_url_on_logon_to_hazo_users.sql +0 -8
  285. package/next.config.mjs +0 -67
  286. package/postcss.config.mjs +0 -8
  287. package/public/file.svg +0 -1
  288. package/public/globe.svg +0 -1
  289. package/public/next.svg +0 -1
  290. package/public/vercel.svg +0 -1
  291. package/public/window.svg +0 -1
  292. package/scripts/apply_migration.ts +0 -118
  293. package/scripts/init_users.ts +0 -378
  294. package/src/app/api/hazo_auth/auth/upload_profile_picture/route.ts +0 -268
  295. package/src/app/api/hazo_auth/change_password/route.ts +0 -132
  296. package/src/app/api/hazo_auth/forgot_password/route.ts +0 -107
  297. package/src/app/api/hazo_auth/get_auth/route.ts +0 -89
  298. package/src/app/api/hazo_auth/invalidate_cache/route.ts +0 -139
  299. package/src/app/api/hazo_auth/library_photos/route.ts +0 -73
  300. package/src/app/api/hazo_auth/login/route.ts +0 -181
  301. package/src/app/api/hazo_auth/logout/route.ts +0 -89
  302. package/src/app/api/hazo_auth/me/route.ts +0 -47
  303. package/src/app/api/hazo_auth/profile_picture/[filename]/route.ts +0 -67
  304. package/src/app/api/hazo_auth/register/route.ts +0 -109
  305. package/src/app/api/hazo_auth/remove_profile_picture/route.ts +0 -86
  306. package/src/app/api/hazo_auth/resend_verification/route.ts +0 -108
  307. package/src/app/api/hazo_auth/reset_password/route.ts +0 -107
  308. package/src/app/api/hazo_auth/update_user/route.ts +0 -126
  309. package/src/app/api/hazo_auth/upload_profile_picture/route.ts +0 -268
  310. package/src/app/api/hazo_auth/user_management/permissions/route.ts +0 -367
  311. package/src/app/api/hazo_auth/user_management/roles/route.ts +0 -442
  312. package/src/app/api/hazo_auth/user_management/users/roles/route.ts +0 -367
  313. package/src/app/api/hazo_auth/user_management/users/route.ts +0 -239
  314. package/src/app/api/hazo_auth/validate_reset_token/route.ts +0 -83
  315. package/src/app/api/hazo_auth/verify_email/route.ts +0 -88
  316. package/src/app/api/migrations/apply/route.ts +0 -91
  317. package/src/app/favicon.ico +0 -0
  318. package/src/app/fonts/GeistMonoVF.woff +0 -0
  319. package/src/app/fonts/GeistVF.woff +0 -0
  320. package/src/app/globals.css +0 -89
  321. package/src/app/hazo_auth/forgot_password/forgot_password_page_client.tsx +0 -60
  322. package/src/app/hazo_auth/forgot_password/page.tsx +0 -24
  323. package/src/app/hazo_auth/login/login_page_client.tsx +0 -86
  324. package/src/app/hazo_auth/login/page.tsx +0 -38
  325. package/src/app/hazo_auth/my_settings/my_settings_page_client.tsx +0 -120
  326. package/src/app/hazo_auth/my_settings/page.tsx +0 -40
  327. package/src/app/hazo_auth/register/page.tsx +0 -36
  328. package/src/app/hazo_auth/register/register_page_client.tsx +0 -81
  329. package/src/app/hazo_auth/reset_password/page.tsx +0 -29
  330. package/src/app/hazo_auth/reset_password/reset_password_page_client.tsx +0 -81
  331. package/src/app/hazo_auth/user_management/page.tsx +0 -14
  332. package/src/app/hazo_auth/user_management/user_management_page_client.tsx +0 -16
  333. package/src/app/hazo_auth/verify_email/page.tsx +0 -24
  334. package/src/app/hazo_auth/verify_email/verify_email_page_client.tsx +0 -60
  335. package/src/app/hazo_connect/api/sqlite/data/route.ts +0 -203
  336. package/src/app/hazo_connect/api/sqlite/schema/route.ts +0 -45
  337. package/src/app/hazo_connect/api/sqlite/tables/route.ts +0 -36
  338. package/src/app/hazo_connect/sqlite_admin/page.tsx +0 -51
  339. package/src/app/hazo_connect/sqlite_admin/sqlite-admin-client.tsx +0 -984
  340. package/src/app/layout.tsx +0 -43
  341. package/src/app/page.tsx +0 -170
  342. package/src/components/index.ts +0 -7
  343. package/src/components/layouts/email_verification/config/email_verification_field_config.ts +0 -86
  344. package/src/components/layouts/email_verification/hooks/use_email_verification.ts +0 -297
  345. package/src/components/layouts/email_verification/index.tsx +0 -297
  346. package/src/components/layouts/forgot_password/config/forgot_password_field_config.ts +0 -58
  347. package/src/components/layouts/forgot_password/hooks/use_forgot_password_form.ts +0 -179
  348. package/src/components/layouts/forgot_password/index.tsx +0 -168
  349. package/src/components/layouts/index.ts +0 -26
  350. package/src/components/layouts/login/config/login_field_config.ts +0 -67
  351. package/src/components/layouts/login/hooks/use_login_form.ts +0 -286
  352. package/src/components/layouts/login/index.tsx +0 -252
  353. package/src/components/layouts/my_settings/components/editable_field.tsx +0 -177
  354. package/src/components/layouts/my_settings/components/password_change_dialog.tsx +0 -301
  355. package/src/components/layouts/my_settings/components/profile_picture_dialog.tsx +0 -385
  356. package/src/components/layouts/my_settings/components/profile_picture_display.tsx +0 -66
  357. package/src/components/layouts/my_settings/components/profile_picture_gravatar_tab.tsx +0 -143
  358. package/src/components/layouts/my_settings/components/profile_picture_library_tab.tsx +0 -311
  359. package/src/components/layouts/my_settings/components/profile_picture_upload_tab.tsx +0 -341
  360. package/src/components/layouts/my_settings/config/my_settings_field_config.ts +0 -61
  361. package/src/components/layouts/my_settings/hooks/use_my_settings.ts +0 -458
  362. package/src/components/layouts/my_settings/index.tsx +0 -351
  363. package/src/components/layouts/register/config/register_field_config.ts +0 -101
  364. package/src/components/layouts/register/hooks/use_register_form.ts +0 -275
  365. package/src/components/layouts/register/index.tsx +0 -226
  366. package/src/components/layouts/reset_password/config/reset_password_field_config.ts +0 -86
  367. package/src/components/layouts/reset_password/hooks/use_reset_password_form.ts +0 -276
  368. package/src/components/layouts/reset_password/index.tsx +0 -294
  369. package/src/components/layouts/shared/components/already_logged_in_guard.tsx +0 -95
  370. package/src/components/layouts/shared/components/auth_page_shell.tsx +0 -36
  371. package/src/components/layouts/shared/components/field_error_message.tsx +0 -29
  372. package/src/components/layouts/shared/components/form_action_buttons.tsx +0 -64
  373. package/src/components/layouts/shared/components/form_field_wrapper.tsx +0 -44
  374. package/src/components/layouts/shared/components/form_header.tsx +0 -36
  375. package/src/components/layouts/shared/components/logout_button.tsx +0 -76
  376. package/src/components/layouts/shared/components/password_field.tsx +0 -72
  377. package/src/components/layouts/shared/components/profile_pic_menu.tsx +0 -321
  378. package/src/components/layouts/shared/components/profile_pic_menu_wrapper.tsx +0 -40
  379. package/src/components/layouts/shared/components/sidebar_layout_wrapper.tsx +0 -214
  380. package/src/components/layouts/shared/components/standalone_layout_wrapper.tsx +0 -53
  381. package/src/components/layouts/shared/components/two_column_auth_layout.tsx +0 -44
  382. package/src/components/layouts/shared/components/unauthorized_guard.tsx +0 -78
  383. package/src/components/layouts/shared/components/visual_panel.tsx +0 -41
  384. package/src/components/layouts/shared/config/layout_customization.ts +0 -95
  385. package/src/components/layouts/shared/data/layout_data_client.ts +0 -19
  386. package/src/components/layouts/shared/hooks/use_auth_status.ts +0 -103
  387. package/src/components/layouts/shared/hooks/use_hazo_auth.ts +0 -158
  388. package/src/components/layouts/shared/index.ts +0 -34
  389. package/src/components/layouts/shared/utils/ip_address.ts +0 -37
  390. package/src/components/layouts/shared/utils/validation.ts +0 -66
  391. package/src/components/layouts/user_management/components/roles_matrix.tsx +0 -607
  392. package/src/components/layouts/user_management/index.tsx +0 -1295
  393. package/src/components/ui/alert-dialog.tsx +0 -141
  394. package/src/components/ui/avatar.tsx +0 -50
  395. package/src/components/ui/button.tsx +0 -57
  396. package/src/components/ui/checkbox.tsx +0 -30
  397. package/src/components/ui/dialog.tsx +0 -122
  398. package/src/components/ui/dropdown-menu.tsx +0 -201
  399. package/src/components/ui/hazo_ui_tooltip.tsx +0 -67
  400. package/src/components/ui/index.ts +0 -22
  401. package/src/components/ui/input.tsx +0 -22
  402. package/src/components/ui/label.tsx +0 -26
  403. package/src/components/ui/separator.tsx +0 -31
  404. package/src/components/ui/sheet.tsx +0 -139
  405. package/src/components/ui/sidebar.tsx +0 -773
  406. package/src/components/ui/skeleton.tsx +0 -15
  407. package/src/components/ui/sonner.tsx +0 -31
  408. package/src/components/ui/switch.tsx +0 -29
  409. package/src/components/ui/table.tsx +0 -120
  410. package/src/components/ui/tabs.tsx +0 -55
  411. package/src/components/ui/tooltip.tsx +0 -32
  412. package/src/components/ui/vertical-tabs.tsx +0 -59
  413. package/src/hooks/use-mobile.tsx +0 -19
  414. package/src/index.ts +0 -7
  415. package/src/lib/already_logged_in_config.server.ts +0 -46
  416. package/src/lib/app_logger.ts +0 -24
  417. package/src/lib/auth/auth_cache.ts +0 -220
  418. package/src/lib/auth/auth_rate_limiter.ts +0 -121
  419. package/src/lib/auth/auth_types.ts +0 -65
  420. package/src/lib/auth/auth_utils.server.ts +0 -196
  421. package/src/lib/auth/hazo_get_auth.server.ts +0 -333
  422. package/src/lib/auth/index.ts +0 -23
  423. package/src/lib/auth/server_auth.ts +0 -88
  424. package/src/lib/auth_utility_config.server.ts +0 -136
  425. package/src/lib/config/config_loader.server.ts +0 -164
  426. package/src/lib/email_verification_config.server.ts +0 -32
  427. package/src/lib/file_types_config.server.ts +0 -25
  428. package/src/lib/forgot_password_config.server.ts +0 -32
  429. package/src/lib/hazo_connect_instance.server.ts +0 -101
  430. package/src/lib/hazo_connect_setup.server.ts +0 -194
  431. package/src/lib/hazo_connect_setup.ts +0 -54
  432. package/src/lib/index.ts +0 -44
  433. package/src/lib/login_config.server.ts +0 -71
  434. package/src/lib/messages_config.server.ts +0 -45
  435. package/src/lib/migrations/apply_migration.ts +0 -105
  436. package/src/lib/my_settings_config.server.ts +0 -135
  437. package/src/lib/password_requirements_config.server.ts +0 -39
  438. package/src/lib/profile_pic_menu_config.server.ts +0 -138
  439. package/src/lib/profile_picture_config.server.ts +0 -56
  440. package/src/lib/register_config.server.ts +0 -73
  441. package/src/lib/reset_password_config.server.ts +0 -75
  442. package/src/lib/services/email_service.ts +0 -581
  443. package/src/lib/services/email_verification_service.ts +0 -270
  444. package/src/lib/services/index.ts +0 -15
  445. package/src/lib/services/login_service.ts +0 -134
  446. package/src/lib/services/password_change_service.ts +0 -154
  447. package/src/lib/services/password_reset_service.ts +0 -405
  448. package/src/lib/services/profile_picture_remove_service.ts +0 -120
  449. package/src/lib/services/profile_picture_service.ts +0 -215
  450. package/src/lib/services/profile_picture_source_mapper.ts +0 -62
  451. package/src/lib/services/registration_service.ts +0 -184
  452. package/src/lib/services/token_service.ts +0 -240
  453. package/src/lib/services/user_profiles_service.ts +0 -143
  454. package/src/lib/services/user_update_service.ts +0 -141
  455. package/src/lib/ui_shell_config.server.ts +0 -73
  456. package/src/lib/ui_sizes_config.server.ts +0 -37
  457. package/src/lib/user_fields_config.server.ts +0 -31
  458. package/src/lib/user_management_config.server.ts +0 -39
  459. package/src/lib/utils/api_route_helpers.ts +0 -60
  460. package/src/lib/utils/error_sanitizer.ts +0 -75
  461. package/src/lib/utils.ts +0 -11
  462. package/src/middleware.ts +0 -94
  463. package/src/routes/index.ts +0 -34
  464. package/src/server/config/config_loader.ts +0 -496
  465. package/src/server/index.ts +0 -38
  466. package/src/server/logging/logger_service.ts +0 -56
  467. package/src/server/routes/root_router.ts +0 -16
  468. package/src/server/server.ts +0 -28
  469. package/src/server/types/app_types.ts +0 -74
  470. package/src/server/types/express.d.ts +0 -16
  471. package/src/stories/email_verification_layout.stories.tsx +0 -137
  472. package/src/stories/forgot_password_layout.stories.tsx +0 -85
  473. package/src/stories/login_layout.stories.tsx +0 -85
  474. package/src/stories/project_overview.stories.tsx +0 -33
  475. package/src/stories/register_layout.stories.tsx +0 -107
  476. package/tailwind.config.ts +0 -77
  477. package/tsconfig.build.json +0 -39
  478. package/tsconfig.json +0 -28
@@ -0,0 +1,708 @@
1
+ # hazo_auth Setup Checklist
2
+
3
+ This checklist provides step-by-step instructions for setting up the `hazo_auth` package in your Next.js project. AI assistants can follow this guide to ensure complete and correct setup.
4
+
5
+ ## Pre-flight Checks
6
+
7
+ Before starting, verify your project meets these requirements:
8
+
9
+ - [ ] Node.js 18+ installed
10
+ - [ ] Project uses Next.js 14+ with App Router
11
+ - [ ] npm or pnpm package manager
12
+ - [ ] Project has `app/` directory (Next.js App Router structure)
13
+
14
+ **Verify Node.js version:**
15
+ ```bash
16
+ node --version
17
+ # Expected: v18.x.x or higher
18
+ ```
19
+
20
+ ---
21
+
22
+ ## Phase 1: Installation & Config Files
23
+
24
+ ### Step 1.1: Install the package
25
+
26
+ ```bash
27
+ npm install hazo_auth
28
+ ```
29
+
30
+ **Verify installation:**
31
+ ```bash
32
+ ls node_modules/hazo_auth/package.json
33
+ # Expected: file exists
34
+ ```
35
+
36
+ ### Step 1.2: Copy configuration files
37
+
38
+ ```bash
39
+ cp node_modules/hazo_auth/hazo_auth_config.example.ini ./hazo_auth_config.ini
40
+ cp node_modules/hazo_auth/hazo_notify_config.example.ini ./hazo_notify_config.ini
41
+ ```
42
+
43
+ **Verify config files exist:**
44
+ ```bash
45
+ ls -la hazo_auth_config.ini hazo_notify_config.ini
46
+ # Expected: both files exist in project root
47
+ ```
48
+
49
+ ### Step 1.3: Configure database connection
50
+
51
+ Edit `hazo_auth_config.ini`:
52
+
53
+ **For SQLite (development):**
54
+ ```ini
55
+ [hazo_connect]
56
+ type = sqlite
57
+ sqlite_path = ./data/hazo_auth.sqlite
58
+ ```
59
+
60
+ **For PostgreSQL (production):**
61
+ ```ini
62
+ [hazo_connect]
63
+ type = postgrest
64
+ postgrest_url = https://your-postgrest-url.com
65
+ ```
66
+
67
+ ### Step 1.4: Configure UI shell mode
68
+
69
+ Edit `hazo_auth_config.ini`:
70
+ ```ini
71
+ [hazo_auth__ui_shell]
72
+ # Use 'standalone' for consuming projects (inherits your app's layout)
73
+ # Use 'test_sidebar' only for hazo_auth package development
74
+ layout_mode = standalone
75
+ ```
76
+
77
+ **Checklist:**
78
+ - [ ] `hazo_auth_config.ini` exists in project root
79
+ - [ ] `hazo_notify_config.ini` exists in project root
80
+ - [ ] Database type configured (sqlite or postgrest)
81
+ - [ ] UI shell mode set to `standalone`
82
+
83
+ ---
84
+
85
+ ## Phase 2: Environment Variables
86
+
87
+ ### Step 2.1: Create .env.local file
88
+
89
+ Create `.env.local` in your project root:
90
+
91
+ ```env
92
+ # Required for email functionality (Zeptomail)
93
+ ZEPTOMAIL_API_KEY=your_zeptomail_api_key_here
94
+
95
+ # Required for PostgreSQL/PostgREST (if using)
96
+ HAZO_CONNECT_POSTGREST_API_KEY=your_postgrest_api_key_here
97
+
98
+ # Required for JWT authentication
99
+ JWT_SECRET=your_secure_random_string_at_least_32_characters
100
+ ```
101
+
102
+ **Generate a secure JWT secret:**
103
+ ```bash
104
+ openssl rand -base64 32
105
+ ```
106
+
107
+ ### Step 2.2: Configure email settings
108
+
109
+ Edit `hazo_notify_config.ini`:
110
+ ```ini
111
+ [emailer]
112
+ emailer_module = zeptoemail_api
113
+ from_email = noreply@yourdomain.com
114
+ from_name = Your App Name
115
+ ```
116
+
117
+ **Checklist:**
118
+ - [ ] `.env.local` file created
119
+ - [ ] `ZEPTOMAIL_API_KEY` set (or email will not work)
120
+ - [ ] `JWT_SECRET` set
121
+ - [ ] `from_email` configured in `hazo_notify_config.ini`
122
+
123
+ ---
124
+
125
+ ## Phase 3: Database Setup
126
+
127
+ ### Option A: SQLite (Development)
128
+
129
+ Create the data directory:
130
+ ```bash
131
+ mkdir -p data
132
+ ```
133
+
134
+ The SQLite database will be created automatically on first use if using hazo_connect's SQLite adapter.
135
+
136
+ **Manual creation (if needed):**
137
+ ```bash
138
+ # Create database with initial schema
139
+ cat << 'EOF' | sqlite3 data/hazo_auth.sqlite
140
+ CREATE TABLE IF NOT EXISTS hazo_users (
141
+ id TEXT PRIMARY KEY,
142
+ email_address TEXT NOT NULL UNIQUE,
143
+ password_hash TEXT NOT NULL,
144
+ name TEXT,
145
+ email_verified INTEGER NOT NULL DEFAULT 0,
146
+ is_active INTEGER NOT NULL DEFAULT 1,
147
+ login_attempts INTEGER NOT NULL DEFAULT 0,
148
+ last_logon TEXT,
149
+ profile_picture_url TEXT,
150
+ profile_source TEXT,
151
+ mfa_secret TEXT,
152
+ url_on_logon TEXT,
153
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
154
+ changed_at TEXT NOT NULL DEFAULT (datetime('now'))
155
+ );
156
+
157
+ CREATE TABLE IF NOT EXISTS hazo_refresh_tokens (
158
+ id TEXT PRIMARY KEY,
159
+ user_id TEXT NOT NULL REFERENCES hazo_users(id) ON DELETE CASCADE,
160
+ token_hash TEXT NOT NULL,
161
+ token_type TEXT NOT NULL,
162
+ expires_at TEXT NOT NULL,
163
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
164
+ );
165
+
166
+ CREATE TABLE IF NOT EXISTS hazo_permissions (
167
+ id TEXT PRIMARY KEY,
168
+ permission_name TEXT NOT NULL UNIQUE,
169
+ description TEXT,
170
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
171
+ changed_at TEXT NOT NULL DEFAULT (datetime('now'))
172
+ );
173
+
174
+ CREATE TABLE IF NOT EXISTS hazo_roles (
175
+ id TEXT PRIMARY KEY,
176
+ role_name TEXT NOT NULL UNIQUE,
177
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
178
+ changed_at TEXT NOT NULL DEFAULT (datetime('now'))
179
+ );
180
+
181
+ CREATE TABLE IF NOT EXISTS hazo_role_permissions (
182
+ role_id TEXT NOT NULL REFERENCES hazo_roles(id) ON DELETE CASCADE,
183
+ permission_id TEXT NOT NULL REFERENCES hazo_permissions(id) ON DELETE CASCADE,
184
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
185
+ changed_at TEXT NOT NULL DEFAULT (datetime('now')),
186
+ PRIMARY KEY (role_id, permission_id)
187
+ );
188
+
189
+ CREATE TABLE IF NOT EXISTS hazo_user_roles (
190
+ user_id TEXT NOT NULL REFERENCES hazo_users(id) ON DELETE CASCADE,
191
+ role_id TEXT NOT NULL REFERENCES hazo_roles(id) ON DELETE CASCADE,
192
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
193
+ changed_at TEXT NOT NULL DEFAULT (datetime('now')),
194
+ PRIMARY KEY (user_id, role_id)
195
+ );
196
+ EOF
197
+ ```
198
+
199
+ **Verify SQLite database:**
200
+ ```bash
201
+ sqlite3 data/hazo_auth.sqlite ".tables"
202
+ # Expected: hazo_users hazo_refresh_tokens hazo_permissions hazo_roles hazo_role_permissions hazo_user_roles
203
+ ```
204
+
205
+ ### Option B: PostgreSQL (Production)
206
+
207
+ Run this SQL script in your PostgreSQL database:
208
+
209
+ ```sql
210
+ -- Create enum type
211
+ CREATE TYPE hazo_enum_profile_source_enum AS ENUM ('gravatar', 'custom', 'predefined');
212
+
213
+ -- Create users table
214
+ CREATE TABLE hazo_users (
215
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
216
+ email_address TEXT NOT NULL UNIQUE,
217
+ password_hash TEXT NOT NULL,
218
+ name TEXT,
219
+ email_verified BOOLEAN NOT NULL DEFAULT FALSE,
220
+ is_active BOOLEAN NOT NULL DEFAULT TRUE,
221
+ login_attempts INTEGER NOT NULL DEFAULT 0,
222
+ last_logon TIMESTAMP WITH TIME ZONE,
223
+ profile_picture_url TEXT,
224
+ profile_source hazo_enum_profile_source_enum,
225
+ mfa_secret TEXT,
226
+ url_on_logon TEXT,
227
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
228
+ changed_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
229
+ );
230
+ CREATE INDEX idx_hazo_users_email ON hazo_users(email_address);
231
+
232
+ -- Create refresh tokens table
233
+ CREATE TABLE hazo_refresh_tokens (
234
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
235
+ user_id UUID NOT NULL REFERENCES hazo_users(id) ON DELETE CASCADE,
236
+ token_hash TEXT NOT NULL,
237
+ token_type TEXT NOT NULL,
238
+ expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
239
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
240
+ );
241
+ CREATE INDEX idx_hazo_refresh_tokens_user_id ON hazo_refresh_tokens(user_id);
242
+ CREATE INDEX idx_hazo_refresh_tokens_token_type ON hazo_refresh_tokens(token_type);
243
+
244
+ -- Create permissions table
245
+ CREATE TABLE hazo_permissions (
246
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
247
+ permission_name TEXT NOT NULL UNIQUE,
248
+ description TEXT,
249
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
250
+ changed_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
251
+ );
252
+
253
+ -- Create roles table
254
+ CREATE TABLE hazo_roles (
255
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
256
+ role_name TEXT NOT NULL UNIQUE,
257
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
258
+ changed_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
259
+ );
260
+
261
+ -- Create role-permissions junction table
262
+ CREATE TABLE hazo_role_permissions (
263
+ role_id UUID NOT NULL REFERENCES hazo_roles(id) ON DELETE CASCADE,
264
+ permission_id UUID NOT NULL REFERENCES hazo_permissions(id) ON DELETE CASCADE,
265
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
266
+ changed_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
267
+ PRIMARY KEY (role_id, permission_id)
268
+ );
269
+ CREATE INDEX idx_hazo_role_permissions_role_id ON hazo_role_permissions(role_id);
270
+ CREATE INDEX idx_hazo_role_permissions_permission_id ON hazo_role_permissions(permission_id);
271
+
272
+ -- Create user-roles junction table
273
+ CREATE TABLE hazo_user_roles (
274
+ user_id UUID NOT NULL REFERENCES hazo_users(id) ON DELETE CASCADE,
275
+ role_id UUID NOT NULL REFERENCES hazo_roles(id) ON DELETE CASCADE,
276
+ created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
277
+ changed_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
278
+ PRIMARY KEY (user_id, role_id)
279
+ );
280
+ CREATE INDEX idx_hazo_user_roles_user_id ON hazo_user_roles(user_id);
281
+ CREATE INDEX idx_hazo_user_roles_role_id ON hazo_user_roles(role_id);
282
+ ```
283
+
284
+ **Verify PostgreSQL tables:**
285
+ ```sql
286
+ SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'hazo_%';
287
+ -- Expected: 6 tables listed
288
+ ```
289
+
290
+ **Checklist:**
291
+ - [ ] Database created (SQLite file or PostgreSQL)
292
+ - [ ] All 6 tables exist: `hazo_users`, `hazo_refresh_tokens`, `hazo_permissions`, `hazo_roles`, `hazo_role_permissions`, `hazo_user_roles`
293
+
294
+ ---
295
+
296
+ ## Phase 4: API Routes
297
+
298
+ Create API route files in your project. Each file re-exports handlers from hazo_auth.
299
+
300
+ ### Step 4.1: Generate routes automatically (Recommended)
301
+
302
+ ```bash
303
+ npx hazo_auth generate-routes
304
+ ```
305
+
306
+ This creates all required API routes automatically.
307
+
308
+ ### Step 4.2: Manual route creation (Alternative)
309
+
310
+ If automatic generation doesn't work, create these files manually:
311
+
312
+ **Required routes (create all of these):**
313
+
314
+ ```
315
+ app/api/hazo_auth/
316
+ ├── login/route.ts
317
+ ├── register/route.ts
318
+ ├── logout/route.ts
319
+ ├── me/route.ts
320
+ ├── forgot_password/route.ts
321
+ ├── reset_password/route.ts
322
+ ├── verify_email/route.ts
323
+ ├── resend_verification/route.ts
324
+ ├── update_user/route.ts
325
+ ├── change_password/route.ts
326
+ ├── upload_profile_picture/route.ts
327
+ ├── remove_profile_picture/route.ts
328
+ ├── library_photos/route.ts
329
+ ├── get_auth/route.ts
330
+ ├── validate_reset_token/route.ts
331
+ └── profile_picture/
332
+ └── [filename]/route.ts
333
+ ```
334
+
335
+ **Example route file content:**
336
+
337
+ `app/api/hazo_auth/login/route.ts`:
338
+ ```typescript
339
+ export { POST } from "hazo_auth/server/routes/login";
340
+ ```
341
+
342
+ `app/api/hazo_auth/register/route.ts`:
343
+ ```typescript
344
+ export { POST } from "hazo_auth/server/routes/register";
345
+ ```
346
+
347
+ `app/api/hazo_auth/logout/route.ts`:
348
+ ```typescript
349
+ export { POST } from "hazo_auth/server/routes/logout";
350
+ ```
351
+
352
+ `app/api/hazo_auth/me/route.ts`:
353
+ ```typescript
354
+ export { GET } from "hazo_auth/server/routes/me";
355
+ ```
356
+
357
+ `app/api/hazo_auth/forgot_password/route.ts`:
358
+ ```typescript
359
+ export { POST } from "hazo_auth/server/routes/forgot_password";
360
+ ```
361
+
362
+ `app/api/hazo_auth/reset_password/route.ts`:
363
+ ```typescript
364
+ export { POST } from "hazo_auth/server/routes/reset_password";
365
+ ```
366
+
367
+ `app/api/hazo_auth/verify_email/route.ts`:
368
+ ```typescript
369
+ export { GET } from "hazo_auth/server/routes/verify_email";
370
+ ```
371
+
372
+ `app/api/hazo_auth/resend_verification/route.ts`:
373
+ ```typescript
374
+ export { POST } from "hazo_auth/server/routes/resend_verification";
375
+ ```
376
+
377
+ `app/api/hazo_auth/update_user/route.ts`:
378
+ ```typescript
379
+ export { PATCH } from "hazo_auth/server/routes/update_user";
380
+ ```
381
+
382
+ `app/api/hazo_auth/change_password/route.ts`:
383
+ ```typescript
384
+ export { POST } from "hazo_auth/server/routes/change_password";
385
+ ```
386
+
387
+ `app/api/hazo_auth/upload_profile_picture/route.ts`:
388
+ ```typescript
389
+ export { POST } from "hazo_auth/server/routes/upload_profile_picture";
390
+ ```
391
+
392
+ `app/api/hazo_auth/remove_profile_picture/route.ts`:
393
+ ```typescript
394
+ export { DELETE } from "hazo_auth/server/routes/remove_profile_picture";
395
+ ```
396
+
397
+ `app/api/hazo_auth/library_photos/route.ts`:
398
+ ```typescript
399
+ export { GET } from "hazo_auth/server/routes/library_photos";
400
+ ```
401
+
402
+ `app/api/hazo_auth/get_auth/route.ts`:
403
+ ```typescript
404
+ export { POST } from "hazo_auth/server/routes/get_auth";
405
+ ```
406
+
407
+ `app/api/hazo_auth/validate_reset_token/route.ts`:
408
+ ```typescript
409
+ export { POST } from "hazo_auth/server/routes/validate_reset_token";
410
+ ```
411
+
412
+ `app/api/hazo_auth/profile_picture/[filename]/route.ts`:
413
+ ```typescript
414
+ export { GET } from "hazo_auth/server/routes/profile_picture_filename";
415
+ ```
416
+
417
+ **Checklist:**
418
+ - [ ] All 16 API route files created
419
+ - [ ] Each file exports the correct HTTP method (POST, GET, PATCH, DELETE)
420
+
421
+ ---
422
+
423
+ ## Phase 5: Page Routes
424
+
425
+ Create page files for each auth flow.
426
+
427
+ ### Step 5.1: Create auth pages
428
+
429
+ **Login page** - `app/(auth)/login/page.tsx`:
430
+ ```typescript
431
+ import { LoginLayout } from "hazo_auth/components/layouts/login";
432
+
433
+ export default function LoginPage() {
434
+ return <LoginLayout />;
435
+ }
436
+ ```
437
+
438
+ **Register page** - `app/(auth)/register/page.tsx`:
439
+ ```typescript
440
+ import { RegisterLayout } from "hazo_auth/components/layouts/register";
441
+
442
+ export default function RegisterPage() {
443
+ return <RegisterLayout />;
444
+ }
445
+ ```
446
+
447
+ **Forgot password page** - `app/(auth)/forgot-password/page.tsx`:
448
+ ```typescript
449
+ import { ForgotPasswordLayout } from "hazo_auth/components/layouts/forgot_password";
450
+
451
+ export default function ForgotPasswordPage() {
452
+ return <ForgotPasswordLayout />;
453
+ }
454
+ ```
455
+
456
+ **Reset password page** - `app/(auth)/reset-password/page.tsx`:
457
+ ```typescript
458
+ import { ResetPasswordLayout } from "hazo_auth/components/layouts/reset_password";
459
+
460
+ export default function ResetPasswordPage() {
461
+ return <ResetPasswordLayout />;
462
+ }
463
+ ```
464
+
465
+ **Email verification page** - `app/(auth)/verify-email/page.tsx`:
466
+ ```typescript
467
+ import { EmailVerificationLayout } from "hazo_auth/components/layouts/email_verification";
468
+
469
+ export default function VerifyEmailPage() {
470
+ return <EmailVerificationLayout />;
471
+ }
472
+ ```
473
+
474
+ **My settings page** - `app/(auth)/my-settings/page.tsx`:
475
+ ```typescript
476
+ import { MySettingsLayout } from "hazo_auth/components/layouts/my_settings";
477
+
478
+ export default function MySettingsPage() {
479
+ return <MySettingsLayout />;
480
+ }
481
+ ```
482
+
483
+ ### Step 5.2: Create layout for auth pages (optional)
484
+
485
+ `app/(auth)/layout.tsx`:
486
+ ```typescript
487
+ export default function AuthLayout({
488
+ children,
489
+ }: {
490
+ children: React.ReactNode;
491
+ }) {
492
+ return (
493
+ <div className="min-h-screen flex items-center justify-center bg-background">
494
+ {children}
495
+ </div>
496
+ );
497
+ }
498
+ ```
499
+
500
+ **Checklist:**
501
+ - [ ] Login page created (`/login`)
502
+ - [ ] Register page created (`/register`)
503
+ - [ ] Forgot password page created (`/forgot-password`)
504
+ - [ ] Reset password page created (`/reset-password`)
505
+ - [ ] Email verification page created (`/verify-email`)
506
+ - [ ] My settings page created (`/my-settings`)
507
+
508
+ ---
509
+
510
+ ## Phase 6: Verification Tests
511
+
512
+ Run these tests to verify your setup is working correctly.
513
+
514
+ ### Test 1: API Health Check
515
+
516
+ ```bash
517
+ curl -s http://localhost:3000/api/hazo_auth/me | jq
518
+ ```
519
+
520
+ **Expected response:**
521
+ ```json
522
+ {
523
+ "authenticated": false
524
+ }
525
+ ```
526
+
527
+ ### Test 2: Registration API
528
+
529
+ ```bash
530
+ curl -X POST http://localhost:3000/api/hazo_auth/register \
531
+ -H "Content-Type: application/json" \
532
+ -d '{"email":"test@example.com","password":"TestPass123!","name":"Test User"}'
533
+ ```
534
+
535
+ **Expected response:**
536
+ ```json
537
+ {
538
+ "success": true,
539
+ "message": "Registration successful. Please check your email to verify your account."
540
+ }
541
+ ```
542
+
543
+ ### Test 3: Email Sending
544
+
545
+ After registration, check the inbox for `test@example.com` for a verification email.
546
+
547
+ **If email not received, check:**
548
+ - `ZEPTOMAIL_API_KEY` is set in `.env.local`
549
+ - `from_email` is configured and verified in Zeptomail
550
+ - Check server logs for email errors
551
+
552
+ ### Test 4: Login API
553
+
554
+ ```bash
555
+ curl -X POST http://localhost:3000/api/hazo_auth/login \
556
+ -H "Content-Type: application/json" \
557
+ -d '{"email":"test@example.com","password":"TestPass123!"}'
558
+ ```
559
+
560
+ **Expected response (success):**
561
+ ```json
562
+ {
563
+ "success": true,
564
+ "user": {
565
+ "id": "...",
566
+ "email": "test@example.com",
567
+ "name": "Test User"
568
+ }
569
+ }
570
+ ```
571
+
572
+ ### Test 5: Profile Picture Library
573
+
574
+ ```bash
575
+ curl -s http://localhost:3000/api/hazo_auth/library_photos | jq
576
+ ```
577
+
578
+ **Expected response:**
579
+ ```json
580
+ {
581
+ "photos": [
582
+ {"url": "/profile_pictures/library/...", "name": "..."},
583
+ ...
584
+ ]
585
+ }
586
+ ```
587
+
588
+ **If library photos not showing:**
589
+ - Copy profile pictures from `node_modules/hazo_auth/public/profile_pictures/library/` to `public/profile_pictures/library/`
590
+
591
+ ### Test 6: Visit Pages in Browser
592
+
593
+ Start your dev server:
594
+ ```bash
595
+ npm run dev
596
+ ```
597
+
598
+ Visit each page and verify it loads:
599
+ - [ ] `http://localhost:3000/login` - Login form displays
600
+ - [ ] `http://localhost:3000/register` - Registration form displays
601
+ - [ ] `http://localhost:3000/forgot-password` - Forgot password form displays
602
+ - [ ] `http://localhost:3000/my-settings` - Settings page displays (after login)
603
+
604
+ ---
605
+
606
+ ## Troubleshooting
607
+
608
+ ### Issue: Email not sending
609
+
610
+ **Symptoms:** Registration succeeds but no email received.
611
+
612
+ **Solutions:**
613
+ 1. Check `ZEPTOMAIL_API_KEY` is set in `.env.local`
614
+ 2. Verify `from_email` in `hazo_notify_config.ini` is authorized in Zeptomail
615
+ 3. Check server console for error messages
616
+ 4. Verify `emailer_module` is set to `zeptoemail_api`
617
+
618
+ ### Issue: Profile pictures not showing
619
+
620
+ **Symptoms:** Avatar shows fallback initials, library photos empty.
621
+
622
+ **Solutions:**
623
+ 1. Copy library photos:
624
+ ```bash
625
+ mkdir -p public/profile_pictures/library
626
+ cp -r node_modules/hazo_auth/public/profile_pictures/library/* public/profile_pictures/library/
627
+ ```
628
+ 2. Verify `library_photos` API route exists
629
+ 3. Check file permissions on `public/profile_pictures/`
630
+
631
+ ### Issue: Database connection failed
632
+
633
+ **Symptoms:** API returns 500 errors, "database connection failed" in logs.
634
+
635
+ **Solutions:**
636
+ 1. Verify `hazo_auth_config.ini` has correct database settings
637
+ 2. For SQLite: ensure `data/` directory exists and is writable
638
+ 3. For PostgreSQL: verify connection string and credentials
639
+ 4. Check `HAZO_CONNECT_POSTGREST_API_KEY` is set
640
+
641
+ ### Issue: "Module not found" errors
642
+
643
+ **Symptoms:** Import errors when running the app.
644
+
645
+ **Solutions:**
646
+ 1. Ensure `hazo_auth` is installed: `npm install hazo_auth`
647
+ 2. Clear node_modules and reinstall: `rm -rf node_modules && npm install`
648
+ 3. Verify you're importing from correct paths (see Phase 5)
649
+
650
+ ### Issue: API routes return 404
651
+
652
+ **Symptoms:** Calls to `/api/hazo_auth/*` return 404.
653
+
654
+ **Solutions:**
655
+ 1. Run `npx hazo_auth generate-routes` to create routes
656
+ 2. Verify route files exist in `app/api/hazo_auth/`
657
+ 3. Check Next.js is detecting routes: `npm run dev` and watch console
658
+ 4. Ensure route files export correct HTTP methods
659
+
660
+ ### Issue: Authentication not persisting
661
+
662
+ **Symptoms:** User logs in but immediately shows as logged out.
663
+
664
+ **Solutions:**
665
+ 1. Verify `JWT_SECRET` is set in `.env.local`
666
+ 2. Check cookies are being set (inspect browser devtools > Application > Cookies)
667
+ 3. Ensure API routes are on same domain (no CORS issues)
668
+
669
+ ---
670
+
671
+ ## Final Checklist
672
+
673
+ **Configuration:**
674
+ - [ ] `hazo_auth_config.ini` configured
675
+ - [ ] `hazo_notify_config.ini` configured
676
+ - [ ] `.env.local` with all required variables
677
+
678
+ **Database:**
679
+ - [ ] Database created and accessible
680
+ - [ ] All 6 tables exist
681
+
682
+ **API Routes:**
683
+ - [ ] All 16 API routes created
684
+ - [ ] `/api/hazo_auth/me` returns `{"authenticated": false}`
685
+
686
+ **Pages:**
687
+ - [ ] All 6 auth pages created
688
+ - [ ] Pages render without errors
689
+
690
+ **Features:**
691
+ - [ ] Registration works
692
+ - [ ] Email verification sends
693
+ - [ ] Login works
694
+ - [ ] Profile pictures display
695
+ - [ ] Settings page accessible
696
+
697
+ ---
698
+
699
+ ## Quick Setup Command
700
+
701
+ For AI assistants, here's a single command to verify setup status:
702
+
703
+ ```bash
704
+ npx hazo_auth validate
705
+ ```
706
+
707
+ This will check all configuration and report any issues.
708
+
@@ -0,0 +1,8 @@
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ export declare function POST(request: NextRequest): Promise<NextResponse<{
3
+ error: string;
4
+ }> | NextResponse<{
5
+ success: boolean;
6
+ message: string;
7
+ }>>;
8
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../src/app/api/hazo_auth/change_password/route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUxD,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW;;;;;IAsH9C"}