hazo_auth 1.4.2 → 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 (320) hide show
  1. package/SETUP_CHECKLIST.md +708 -0
  2. package/dist/app/api/hazo_auth/change_password/route.d.ts +8 -0
  3. package/dist/app/api/hazo_auth/change_password/route.d.ts.map +1 -0
  4. package/dist/app/api/hazo_auth/change_password/route.js +98 -0
  5. package/dist/app/api/hazo_auth/forgot_password/route.d.ts +8 -0
  6. package/dist/app/api/hazo_auth/forgot_password/route.d.ts.map +1 -0
  7. package/dist/app/api/hazo_auth/forgot_password/route.js +78 -0
  8. package/dist/app/api/hazo_auth/get_auth/route.d.ts +10 -0
  9. package/dist/app/api/hazo_auth/get_auth/route.d.ts.map +1 -0
  10. package/dist/app/api/hazo_auth/get_auth/route.js +63 -0
  11. package/dist/app/api/hazo_auth/invalidate_cache/route.d.ts +14 -0
  12. package/dist/app/api/hazo_auth/invalidate_cache/route.d.ts.map +1 -0
  13. package/dist/app/api/hazo_auth/invalidate_cache/route.js +96 -0
  14. package/dist/app/api/hazo_auth/library_photos/route.d.ts +13 -0
  15. package/dist/app/api/hazo_auth/library_photos/route.d.ts.map +1 -0
  16. package/dist/app/api/hazo_auth/library_photos/route.js +55 -0
  17. package/dist/app/api/hazo_auth/login/route.d.ts +12 -0
  18. package/dist/app/api/hazo_auth/login/route.d.ts.map +1 -0
  19. package/dist/app/api/hazo_auth/login/route.js +140 -0
  20. package/dist/app/api/hazo_auth/logout/route.d.ts +8 -0
  21. package/dist/app/api/hazo_auth/logout/route.d.ts.map +1 -0
  22. package/dist/app/api/hazo_auth/logout/route.js +71 -0
  23. package/dist/app/api/hazo_auth/me/route.d.ts +3 -0
  24. package/dist/app/api/hazo_auth/me/route.d.ts.map +1 -0
  25. package/dist/app/api/hazo_auth/me/route.js +34 -0
  26. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.d.ts +7 -0
  27. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.d.ts.map +1 -0
  28. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.js +43 -0
  29. package/dist/app/api/hazo_auth/register/route.d.ts +9 -0
  30. package/dist/app/api/hazo_auth/register/route.d.ts.map +1 -0
  31. package/dist/app/api/hazo_auth/register/route.js +80 -0
  32. package/dist/app/api/hazo_auth/remove_profile_picture/route.d.ts +8 -0
  33. package/dist/app/api/hazo_auth/remove_profile_picture/route.d.ts.map +1 -0
  34. package/dist/app/api/hazo_auth/remove_profile_picture/route.js +64 -0
  35. package/dist/app/api/hazo_auth/resend_verification/route.d.ts +8 -0
  36. package/dist/app/api/hazo_auth/resend_verification/route.d.ts.map +1 -0
  37. package/dist/app/api/hazo_auth/resend_verification/route.js +79 -0
  38. package/dist/app/api/hazo_auth/reset_password/route.d.ts +8 -0
  39. package/dist/app/api/hazo_auth/reset_password/route.d.ts.map +1 -0
  40. package/dist/app/api/hazo_auth/reset_password/route.js +76 -0
  41. package/dist/app/api/hazo_auth/update_user/route.d.ts +9 -0
  42. package/dist/app/api/hazo_auth/update_user/route.d.ts.map +1 -0
  43. package/dist/app/api/hazo_auth/update_user/route.js +95 -0
  44. package/dist/app/api/hazo_auth/upload_profile_picture/route.d.ts +9 -0
  45. package/dist/app/api/hazo_auth/upload_profile_picture/route.d.ts.map +1 -0
  46. package/dist/app/api/hazo_auth/upload_profile_picture/route.js +204 -0
  47. package/dist/app/api/hazo_auth/validate_reset_token/route.d.ts +6 -0
  48. package/dist/app/api/hazo_auth/validate_reset_token/route.d.ts.map +1 -0
  49. package/dist/app/api/hazo_auth/validate_reset_token/route.js +58 -0
  50. package/dist/app/api/hazo_auth/verify_email/route.d.ts +11 -0
  51. package/dist/app/api/hazo_auth/verify_email/route.d.ts.map +1 -0
  52. package/dist/app/api/hazo_auth/verify_email/route.js +63 -0
  53. package/dist/cli/generate.d.ts +2 -0
  54. package/dist/cli/generate.d.ts.map +1 -0
  55. package/dist/cli/generate.js +117 -0
  56. package/dist/cli/index.d.ts +3 -0
  57. package/dist/cli/index.d.ts.map +1 -0
  58. package/dist/cli/index.js +120 -0
  59. package/dist/cli/validate.d.ts +15 -0
  60. package/dist/cli/validate.d.ts.map +1 -0
  61. package/dist/cli/validate.js +509 -0
  62. package/dist/components/ui/card.d.ts +9 -0
  63. package/dist/components/ui/card.d.ts.map +1 -0
  64. package/dist/components/ui/card.js +45 -0
  65. package/dist/hooks/use-mobile.d.ts.map +1 -1
  66. package/dist/hooks/use-mobile.js +17 -3
  67. package/dist/server/routes/change_password.d.ts +2 -0
  68. package/dist/server/routes/change_password.d.ts.map +1 -0
  69. package/dist/server/routes/change_password.js +2 -0
  70. package/dist/server/routes/forgot_password.d.ts +2 -0
  71. package/dist/server/routes/forgot_password.d.ts.map +1 -0
  72. package/dist/server/routes/forgot_password.js +2 -0
  73. package/dist/server/routes/get_auth.d.ts +2 -0
  74. package/dist/server/routes/get_auth.d.ts.map +1 -0
  75. package/dist/server/routes/get_auth.js +2 -0
  76. package/dist/server/routes/index.d.ts +18 -0
  77. package/dist/server/routes/index.d.ts.map +1 -0
  78. package/dist/server/routes/index.js +24 -0
  79. package/dist/server/routes/invalidate_cache.d.ts +2 -0
  80. package/dist/server/routes/invalidate_cache.d.ts.map +1 -0
  81. package/dist/server/routes/invalidate_cache.js +2 -0
  82. package/dist/server/routes/library_photos.d.ts +2 -0
  83. package/dist/server/routes/library_photos.d.ts.map +1 -0
  84. package/dist/server/routes/library_photos.js +2 -0
  85. package/dist/server/routes/login.d.ts +2 -0
  86. package/dist/server/routes/login.d.ts.map +1 -0
  87. package/dist/server/routes/login.js +2 -0
  88. package/dist/server/routes/logout.d.ts +2 -0
  89. package/dist/server/routes/logout.d.ts.map +1 -0
  90. package/dist/server/routes/logout.js +2 -0
  91. package/dist/server/routes/me.d.ts +2 -0
  92. package/dist/server/routes/me.d.ts.map +1 -0
  93. package/dist/server/routes/me.js +2 -0
  94. package/dist/server/routes/profile_picture_filename.d.ts +2 -0
  95. package/dist/server/routes/profile_picture_filename.d.ts.map +1 -0
  96. package/dist/server/routes/profile_picture_filename.js +3 -0
  97. package/dist/server/routes/register.d.ts +2 -0
  98. package/dist/server/routes/register.d.ts.map +1 -0
  99. package/dist/server/routes/register.js +2 -0
  100. package/dist/server/routes/remove_profile_picture.d.ts +2 -0
  101. package/dist/server/routes/remove_profile_picture.d.ts.map +1 -0
  102. package/dist/server/routes/remove_profile_picture.js +2 -0
  103. package/dist/server/routes/resend_verification.d.ts +2 -0
  104. package/dist/server/routes/resend_verification.d.ts.map +1 -0
  105. package/dist/server/routes/resend_verification.js +2 -0
  106. package/dist/server/routes/reset_password.d.ts +2 -0
  107. package/dist/server/routes/reset_password.d.ts.map +1 -0
  108. package/dist/server/routes/reset_password.js +2 -0
  109. package/dist/server/routes/update_user.d.ts +2 -0
  110. package/dist/server/routes/update_user.d.ts.map +1 -0
  111. package/dist/server/routes/update_user.js +2 -0
  112. package/dist/server/routes/upload_profile_picture.d.ts +2 -0
  113. package/dist/server/routes/upload_profile_picture.d.ts.map +1 -0
  114. package/dist/server/routes/upload_profile_picture.js +2 -0
  115. package/dist/server/routes/validate_reset_token.d.ts +2 -0
  116. package/dist/server/routes/validate_reset_token.d.ts.map +1 -0
  117. package/dist/server/routes/validate_reset_token.js +2 -0
  118. package/dist/server/routes/verify_email.d.ts +2 -0
  119. package/dist/server/routes/verify_email.d.ts.map +1 -0
  120. package/dist/server/routes/verify_email.js +2 -0
  121. package/package.json +12 -17
  122. package/components.json +0 -22
  123. package/instrumentation.ts +0 -32
  124. package/migrations/001_add_token_type_to_refresh_tokens.sql +0 -14
  125. package/migrations/002_add_name_to_hazo_users.sql +0 -7
  126. package/migrations/003_add_url_on_logon_to_hazo_users.sql +0 -8
  127. package/next.config.mjs +0 -67
  128. package/postcss.config.mjs +0 -8
  129. package/public/file.svg +0 -1
  130. package/public/globe.svg +0 -1
  131. package/public/next.svg +0 -1
  132. package/public/vercel.svg +0 -1
  133. package/public/window.svg +0 -1
  134. package/scripts/apply_migration.ts +0 -118
  135. package/scripts/init_users.ts +0 -378
  136. package/src/app/api/hazo_auth/auth/upload_profile_picture/route.ts +0 -268
  137. package/src/app/api/hazo_auth/change_password/route.ts +0 -132
  138. package/src/app/api/hazo_auth/forgot_password/route.ts +0 -107
  139. package/src/app/api/hazo_auth/get_auth/route.ts +0 -89
  140. package/src/app/api/hazo_auth/invalidate_cache/route.ts +0 -139
  141. package/src/app/api/hazo_auth/library_photos/route.ts +0 -73
  142. package/src/app/api/hazo_auth/login/route.ts +0 -181
  143. package/src/app/api/hazo_auth/logout/route.ts +0 -89
  144. package/src/app/api/hazo_auth/me/route.ts +0 -47
  145. package/src/app/api/hazo_auth/profile_picture/[filename]/route.ts +0 -67
  146. package/src/app/api/hazo_auth/register/route.ts +0 -109
  147. package/src/app/api/hazo_auth/remove_profile_picture/route.ts +0 -86
  148. package/src/app/api/hazo_auth/resend_verification/route.ts +0 -108
  149. package/src/app/api/hazo_auth/reset_password/route.ts +0 -107
  150. package/src/app/api/hazo_auth/update_user/route.ts +0 -126
  151. package/src/app/api/hazo_auth/upload_profile_picture/route.ts +0 -268
  152. package/src/app/api/hazo_auth/user_management/permissions/route.ts +0 -367
  153. package/src/app/api/hazo_auth/user_management/roles/route.ts +0 -442
  154. package/src/app/api/hazo_auth/user_management/users/roles/route.ts +0 -367
  155. package/src/app/api/hazo_auth/user_management/users/route.ts +0 -239
  156. package/src/app/api/hazo_auth/validate_reset_token/route.ts +0 -83
  157. package/src/app/api/hazo_auth/verify_email/route.ts +0 -88
  158. package/src/app/api/migrations/apply/route.ts +0 -91
  159. package/src/app/favicon.ico +0 -0
  160. package/src/app/fonts/GeistMonoVF.woff +0 -0
  161. package/src/app/fonts/GeistVF.woff +0 -0
  162. package/src/app/globals.css +0 -89
  163. package/src/app/hazo_auth/forgot_password/forgot_password_page_client.tsx +0 -60
  164. package/src/app/hazo_auth/forgot_password/page.tsx +0 -24
  165. package/src/app/hazo_auth/login/login_page_client.tsx +0 -86
  166. package/src/app/hazo_auth/login/page.tsx +0 -38
  167. package/src/app/hazo_auth/my_settings/my_settings_page_client.tsx +0 -120
  168. package/src/app/hazo_auth/my_settings/page.tsx +0 -40
  169. package/src/app/hazo_auth/register/page.tsx +0 -36
  170. package/src/app/hazo_auth/register/register_page_client.tsx +0 -81
  171. package/src/app/hazo_auth/reset_password/page.tsx +0 -29
  172. package/src/app/hazo_auth/reset_password/reset_password_page_client.tsx +0 -81
  173. package/src/app/hazo_auth/user_management/page.tsx +0 -14
  174. package/src/app/hazo_auth/user_management/user_management_page_client.tsx +0 -16
  175. package/src/app/hazo_auth/verify_email/page.tsx +0 -24
  176. package/src/app/hazo_auth/verify_email/verify_email_page_client.tsx +0 -60
  177. package/src/app/hazo_connect/api/sqlite/data/route.ts +0 -203
  178. package/src/app/hazo_connect/api/sqlite/schema/route.ts +0 -45
  179. package/src/app/hazo_connect/api/sqlite/tables/route.ts +0 -36
  180. package/src/app/hazo_connect/sqlite_admin/page.tsx +0 -51
  181. package/src/app/hazo_connect/sqlite_admin/sqlite-admin-client.tsx +0 -984
  182. package/src/app/layout.tsx +0 -43
  183. package/src/app/page.tsx +0 -170
  184. package/src/components/index.ts +0 -7
  185. package/src/components/layouts/email_verification/config/email_verification_field_config.ts +0 -86
  186. package/src/components/layouts/email_verification/hooks/use_email_verification.ts +0 -297
  187. package/src/components/layouts/email_verification/index.tsx +0 -297
  188. package/src/components/layouts/forgot_password/config/forgot_password_field_config.ts +0 -58
  189. package/src/components/layouts/forgot_password/hooks/use_forgot_password_form.ts +0 -179
  190. package/src/components/layouts/forgot_password/index.tsx +0 -168
  191. package/src/components/layouts/index.ts +0 -26
  192. package/src/components/layouts/login/config/login_field_config.ts +0 -67
  193. package/src/components/layouts/login/hooks/use_login_form.ts +0 -286
  194. package/src/components/layouts/login/index.tsx +0 -252
  195. package/src/components/layouts/my_settings/components/editable_field.tsx +0 -177
  196. package/src/components/layouts/my_settings/components/password_change_dialog.tsx +0 -301
  197. package/src/components/layouts/my_settings/components/profile_picture_dialog.tsx +0 -385
  198. package/src/components/layouts/my_settings/components/profile_picture_display.tsx +0 -66
  199. package/src/components/layouts/my_settings/components/profile_picture_gravatar_tab.tsx +0 -143
  200. package/src/components/layouts/my_settings/components/profile_picture_library_tab.tsx +0 -311
  201. package/src/components/layouts/my_settings/components/profile_picture_upload_tab.tsx +0 -341
  202. package/src/components/layouts/my_settings/config/my_settings_field_config.ts +0 -61
  203. package/src/components/layouts/my_settings/hooks/use_my_settings.ts +0 -458
  204. package/src/components/layouts/my_settings/index.tsx +0 -351
  205. package/src/components/layouts/register/config/register_field_config.ts +0 -101
  206. package/src/components/layouts/register/hooks/use_register_form.ts +0 -275
  207. package/src/components/layouts/register/index.tsx +0 -226
  208. package/src/components/layouts/reset_password/config/reset_password_field_config.ts +0 -86
  209. package/src/components/layouts/reset_password/hooks/use_reset_password_form.ts +0 -276
  210. package/src/components/layouts/reset_password/index.tsx +0 -294
  211. package/src/components/layouts/shared/components/already_logged_in_guard.tsx +0 -95
  212. package/src/components/layouts/shared/components/auth_page_shell.tsx +0 -36
  213. package/src/components/layouts/shared/components/field_error_message.tsx +0 -29
  214. package/src/components/layouts/shared/components/form_action_buttons.tsx +0 -64
  215. package/src/components/layouts/shared/components/form_field_wrapper.tsx +0 -44
  216. package/src/components/layouts/shared/components/form_header.tsx +0 -36
  217. package/src/components/layouts/shared/components/logout_button.tsx +0 -76
  218. package/src/components/layouts/shared/components/password_field.tsx +0 -72
  219. package/src/components/layouts/shared/components/profile_pic_menu.tsx +0 -321
  220. package/src/components/layouts/shared/components/profile_pic_menu_wrapper.tsx +0 -40
  221. package/src/components/layouts/shared/components/sidebar_layout_wrapper.tsx +0 -214
  222. package/src/components/layouts/shared/components/standalone_layout_wrapper.tsx +0 -53
  223. package/src/components/layouts/shared/components/two_column_auth_layout.tsx +0 -44
  224. package/src/components/layouts/shared/components/unauthorized_guard.tsx +0 -78
  225. package/src/components/layouts/shared/components/visual_panel.tsx +0 -41
  226. package/src/components/layouts/shared/config/layout_customization.ts +0 -95
  227. package/src/components/layouts/shared/data/layout_data_client.ts +0 -19
  228. package/src/components/layouts/shared/hooks/use_auth_status.ts +0 -103
  229. package/src/components/layouts/shared/hooks/use_hazo_auth.ts +0 -158
  230. package/src/components/layouts/shared/index.ts +0 -34
  231. package/src/components/layouts/shared/utils/ip_address.ts +0 -37
  232. package/src/components/layouts/shared/utils/validation.ts +0 -66
  233. package/src/components/layouts/user_management/components/roles_matrix.tsx +0 -607
  234. package/src/components/layouts/user_management/index.tsx +0 -1295
  235. package/src/components/ui/alert-dialog.tsx +0 -141
  236. package/src/components/ui/avatar.tsx +0 -50
  237. package/src/components/ui/button.tsx +0 -57
  238. package/src/components/ui/checkbox.tsx +0 -30
  239. package/src/components/ui/dialog.tsx +0 -122
  240. package/src/components/ui/dropdown-menu.tsx +0 -201
  241. package/src/components/ui/hazo_ui_tooltip.tsx +0 -67
  242. package/src/components/ui/index.ts +0 -22
  243. package/src/components/ui/input.tsx +0 -22
  244. package/src/components/ui/label.tsx +0 -26
  245. package/src/components/ui/separator.tsx +0 -31
  246. package/src/components/ui/sheet.tsx +0 -139
  247. package/src/components/ui/sidebar.tsx +0 -773
  248. package/src/components/ui/skeleton.tsx +0 -15
  249. package/src/components/ui/sonner.tsx +0 -31
  250. package/src/components/ui/switch.tsx +0 -29
  251. package/src/components/ui/table.tsx +0 -120
  252. package/src/components/ui/tabs.tsx +0 -55
  253. package/src/components/ui/tooltip.tsx +0 -32
  254. package/src/components/ui/vertical-tabs.tsx +0 -59
  255. package/src/hooks/use-mobile.tsx +0 -19
  256. package/src/index.ts +0 -7
  257. package/src/lib/already_logged_in_config.server.ts +0 -46
  258. package/src/lib/app_logger.ts +0 -24
  259. package/src/lib/auth/auth_cache.ts +0 -220
  260. package/src/lib/auth/auth_rate_limiter.ts +0 -121
  261. package/src/lib/auth/auth_types.ts +0 -65
  262. package/src/lib/auth/auth_utils.server.ts +0 -196
  263. package/src/lib/auth/hazo_get_auth.server.ts +0 -333
  264. package/src/lib/auth/index.ts +0 -23
  265. package/src/lib/auth/server_auth.ts +0 -88
  266. package/src/lib/auth_utility_config.server.ts +0 -136
  267. package/src/lib/config/config_loader.server.ts +0 -164
  268. package/src/lib/email_verification_config.server.ts +0 -32
  269. package/src/lib/file_types_config.server.ts +0 -25
  270. package/src/lib/forgot_password_config.server.ts +0 -32
  271. package/src/lib/hazo_connect_instance.server.ts +0 -101
  272. package/src/lib/hazo_connect_setup.server.ts +0 -194
  273. package/src/lib/hazo_connect_setup.ts +0 -54
  274. package/src/lib/index.ts +0 -44
  275. package/src/lib/login_config.server.ts +0 -71
  276. package/src/lib/messages_config.server.ts +0 -45
  277. package/src/lib/migrations/apply_migration.ts +0 -105
  278. package/src/lib/my_settings_config.server.ts +0 -135
  279. package/src/lib/password_requirements_config.server.ts +0 -39
  280. package/src/lib/profile_pic_menu_config.server.ts +0 -138
  281. package/src/lib/profile_picture_config.server.ts +0 -56
  282. package/src/lib/register_config.server.ts +0 -73
  283. package/src/lib/reset_password_config.server.ts +0 -75
  284. package/src/lib/services/email_service.ts +0 -581
  285. package/src/lib/services/email_verification_service.ts +0 -270
  286. package/src/lib/services/index.ts +0 -15
  287. package/src/lib/services/login_service.ts +0 -134
  288. package/src/lib/services/password_change_service.ts +0 -154
  289. package/src/lib/services/password_reset_service.ts +0 -405
  290. package/src/lib/services/profile_picture_remove_service.ts +0 -120
  291. package/src/lib/services/profile_picture_service.ts +0 -215
  292. package/src/lib/services/profile_picture_source_mapper.ts +0 -62
  293. package/src/lib/services/registration_service.ts +0 -184
  294. package/src/lib/services/token_service.ts +0 -240
  295. package/src/lib/services/user_profiles_service.ts +0 -143
  296. package/src/lib/services/user_update_service.ts +0 -141
  297. package/src/lib/ui_shell_config.server.ts +0 -73
  298. package/src/lib/ui_sizes_config.server.ts +0 -37
  299. package/src/lib/user_fields_config.server.ts +0 -31
  300. package/src/lib/user_management_config.server.ts +0 -39
  301. package/src/lib/utils/api_route_helpers.ts +0 -60
  302. package/src/lib/utils/error_sanitizer.ts +0 -75
  303. package/src/lib/utils.ts +0 -11
  304. package/src/middleware.ts +0 -94
  305. package/src/routes/index.ts +0 -34
  306. package/src/server/config/config_loader.ts +0 -496
  307. package/src/server/index.ts +0 -38
  308. package/src/server/logging/logger_service.ts +0 -56
  309. package/src/server/routes/root_router.ts +0 -16
  310. package/src/server/server.ts +0 -28
  311. package/src/server/types/app_types.ts +0 -74
  312. package/src/server/types/express.d.ts +0 -16
  313. package/src/stories/email_verification_layout.stories.tsx +0 -137
  314. package/src/stories/forgot_password_layout.stories.tsx +0 -85
  315. package/src/stories/login_layout.stories.tsx +0 -85
  316. package/src/stories/project_overview.stories.tsx +0 -33
  317. package/src/stories/register_layout.stories.tsx +0 -107
  318. package/tailwind.config.ts +0 -77
  319. package/tsconfig.build.json +0 -36
  320. 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"}