hazo_auth 1.4.2 → 1.6.1

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 (354) hide show
  1. package/README.md +65 -19
  2. package/SETUP_CHECKLIST.md +779 -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_photo/[category]/[filename]/route.d.ts +9 -0
  16. package/dist/app/api/hazo_auth/library_photo/[category]/[filename]/route.d.ts.map +1 -0
  17. package/dist/app/api/hazo_auth/library_photo/[category]/[filename]/route.js +82 -0
  18. package/dist/app/api/hazo_auth/library_photos/route.d.ts +22 -0
  19. package/dist/app/api/hazo_auth/library_photos/route.d.ts.map +1 -0
  20. package/dist/app/api/hazo_auth/library_photos/route.js +80 -0
  21. package/dist/app/api/hazo_auth/login/route.d.ts +12 -0
  22. package/dist/app/api/hazo_auth/login/route.d.ts.map +1 -0
  23. package/dist/app/api/hazo_auth/login/route.js +140 -0
  24. package/dist/app/api/hazo_auth/logout/route.d.ts +8 -0
  25. package/dist/app/api/hazo_auth/logout/route.d.ts.map +1 -0
  26. package/dist/app/api/hazo_auth/logout/route.js +71 -0
  27. package/dist/app/api/hazo_auth/me/route.d.ts +3 -0
  28. package/dist/app/api/hazo_auth/me/route.d.ts.map +1 -0
  29. package/dist/app/api/hazo_auth/me/route.js +34 -0
  30. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.d.ts +7 -0
  31. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.d.ts.map +1 -0
  32. package/dist/app/api/hazo_auth/profile_picture/[filename]/route.js +43 -0
  33. package/dist/app/api/hazo_auth/register/route.d.ts +9 -0
  34. package/dist/app/api/hazo_auth/register/route.d.ts.map +1 -0
  35. package/dist/app/api/hazo_auth/register/route.js +80 -0
  36. package/dist/app/api/hazo_auth/remove_profile_picture/route.d.ts +8 -0
  37. package/dist/app/api/hazo_auth/remove_profile_picture/route.d.ts.map +1 -0
  38. package/dist/app/api/hazo_auth/remove_profile_picture/route.js +64 -0
  39. package/dist/app/api/hazo_auth/resend_verification/route.d.ts +8 -0
  40. package/dist/app/api/hazo_auth/resend_verification/route.d.ts.map +1 -0
  41. package/dist/app/api/hazo_auth/resend_verification/route.js +79 -0
  42. package/dist/app/api/hazo_auth/reset_password/route.d.ts +8 -0
  43. package/dist/app/api/hazo_auth/reset_password/route.d.ts.map +1 -0
  44. package/dist/app/api/hazo_auth/reset_password/route.js +76 -0
  45. package/dist/app/api/hazo_auth/update_user/route.d.ts +9 -0
  46. package/dist/app/api/hazo_auth/update_user/route.d.ts.map +1 -0
  47. package/dist/app/api/hazo_auth/update_user/route.js +95 -0
  48. package/dist/app/api/hazo_auth/upload_profile_picture/route.d.ts +9 -0
  49. package/dist/app/api/hazo_auth/upload_profile_picture/route.d.ts.map +1 -0
  50. package/dist/app/api/hazo_auth/upload_profile_picture/route.js +204 -0
  51. package/dist/app/api/hazo_auth/validate_reset_token/route.d.ts +6 -0
  52. package/dist/app/api/hazo_auth/validate_reset_token/route.d.ts.map +1 -0
  53. package/dist/app/api/hazo_auth/validate_reset_token/route.js +58 -0
  54. package/dist/app/api/hazo_auth/verify_email/route.d.ts +11 -0
  55. package/dist/app/api/hazo_auth/verify_email/route.d.ts.map +1 -0
  56. package/dist/app/api/hazo_auth/verify_email/route.js +63 -0
  57. package/dist/cli/generate.d.ts +7 -0
  58. package/dist/cli/generate.d.ts.map +1 -0
  59. package/dist/cli/generate.js +184 -0
  60. package/dist/cli/index.d.ts +3 -0
  61. package/dist/cli/index.d.ts.map +1 -0
  62. package/dist/cli/index.js +173 -0
  63. package/dist/cli/init.d.ts +2 -0
  64. package/dist/cli/init.d.ts.map +1 -0
  65. package/dist/cli/init.js +201 -0
  66. package/dist/cli/validate.d.ts +15 -0
  67. package/dist/cli/validate.d.ts.map +1 -0
  68. package/dist/cli/validate.js +509 -0
  69. package/dist/components/ui/card.d.ts +9 -0
  70. package/dist/components/ui/card.d.ts.map +1 -0
  71. package/dist/components/ui/card.js +45 -0
  72. package/dist/hooks/use-mobile.d.ts.map +1 -1
  73. package/dist/hooks/use-mobile.js +17 -3
  74. package/dist/lib/services/profile_picture_service.d.ts +34 -2
  75. package/dist/lib/services/profile_picture_service.d.ts.map +1 -1
  76. package/dist/lib/services/profile_picture_service.js +157 -15
  77. package/dist/page_components/forgot_password.d.ts +19 -0
  78. package/dist/page_components/forgot_password.d.ts.map +1 -0
  79. package/dist/page_components/forgot_password.js +36 -0
  80. package/dist/page_components/index.d.ts +7 -0
  81. package/dist/page_components/index.d.ts.map +1 -0
  82. package/dist/page_components/index.js +9 -0
  83. package/dist/page_components/login.d.ts +26 -0
  84. package/dist/page_components/login.d.ts.map +1 -0
  85. package/dist/page_components/login.js +40 -0
  86. package/dist/page_components/my_settings.d.ts +64 -0
  87. package/dist/page_components/my_settings.d.ts.map +1 -0
  88. package/dist/page_components/my_settings.js +67 -0
  89. package/dist/page_components/register.d.ts +25 -0
  90. package/dist/page_components/register.d.ts.map +1 -0
  91. package/dist/page_components/register.js +43 -0
  92. package/dist/page_components/reset_password.d.ts +25 -0
  93. package/dist/page_components/reset_password.d.ts.map +1 -0
  94. package/dist/page_components/reset_password.js +43 -0
  95. package/dist/page_components/verify_email.d.ts +21 -0
  96. package/dist/page_components/verify_email.d.ts.map +1 -0
  97. package/dist/page_components/verify_email.js +36 -0
  98. package/dist/server/routes/change_password.d.ts +2 -0
  99. package/dist/server/routes/change_password.d.ts.map +1 -0
  100. package/dist/server/routes/change_password.js +2 -0
  101. package/dist/server/routes/forgot_password.d.ts +2 -0
  102. package/dist/server/routes/forgot_password.d.ts.map +1 -0
  103. package/dist/server/routes/forgot_password.js +2 -0
  104. package/dist/server/routes/get_auth.d.ts +2 -0
  105. package/dist/server/routes/get_auth.d.ts.map +1 -0
  106. package/dist/server/routes/get_auth.js +2 -0
  107. package/dist/server/routes/index.d.ts +19 -0
  108. package/dist/server/routes/index.d.ts.map +1 -0
  109. package/dist/server/routes/index.js +25 -0
  110. package/dist/server/routes/invalidate_cache.d.ts +2 -0
  111. package/dist/server/routes/invalidate_cache.d.ts.map +1 -0
  112. package/dist/server/routes/invalidate_cache.js +2 -0
  113. package/dist/server/routes/library_photo.d.ts +2 -0
  114. package/dist/server/routes/library_photo.d.ts.map +1 -0
  115. package/dist/server/routes/library_photo.js +3 -0
  116. package/dist/server/routes/library_photos.d.ts +2 -0
  117. package/dist/server/routes/library_photos.d.ts.map +1 -0
  118. package/dist/server/routes/library_photos.js +2 -0
  119. package/dist/server/routes/login.d.ts +2 -0
  120. package/dist/server/routes/login.d.ts.map +1 -0
  121. package/dist/server/routes/login.js +2 -0
  122. package/dist/server/routes/logout.d.ts +2 -0
  123. package/dist/server/routes/logout.d.ts.map +1 -0
  124. package/dist/server/routes/logout.js +2 -0
  125. package/dist/server/routes/me.d.ts +2 -0
  126. package/dist/server/routes/me.d.ts.map +1 -0
  127. package/dist/server/routes/me.js +2 -0
  128. package/dist/server/routes/profile_picture_filename.d.ts +2 -0
  129. package/dist/server/routes/profile_picture_filename.d.ts.map +1 -0
  130. package/dist/server/routes/profile_picture_filename.js +3 -0
  131. package/dist/server/routes/register.d.ts +2 -0
  132. package/dist/server/routes/register.d.ts.map +1 -0
  133. package/dist/server/routes/register.js +2 -0
  134. package/dist/server/routes/remove_profile_picture.d.ts +2 -0
  135. package/dist/server/routes/remove_profile_picture.d.ts.map +1 -0
  136. package/dist/server/routes/remove_profile_picture.js +2 -0
  137. package/dist/server/routes/resend_verification.d.ts +2 -0
  138. package/dist/server/routes/resend_verification.d.ts.map +1 -0
  139. package/dist/server/routes/resend_verification.js +2 -0
  140. package/dist/server/routes/reset_password.d.ts +2 -0
  141. package/dist/server/routes/reset_password.d.ts.map +1 -0
  142. package/dist/server/routes/reset_password.js +2 -0
  143. package/dist/server/routes/update_user.d.ts +2 -0
  144. package/dist/server/routes/update_user.d.ts.map +1 -0
  145. package/dist/server/routes/update_user.js +2 -0
  146. package/dist/server/routes/upload_profile_picture.d.ts +2 -0
  147. package/dist/server/routes/upload_profile_picture.d.ts.map +1 -0
  148. package/dist/server/routes/upload_profile_picture.js +2 -0
  149. package/dist/server/routes/validate_reset_token.d.ts +2 -0
  150. package/dist/server/routes/validate_reset_token.d.ts.map +1 -0
  151. package/dist/server/routes/validate_reset_token.js +2 -0
  152. package/dist/server/routes/verify_email.d.ts +2 -0
  153. package/dist/server/routes/verify_email.d.ts.map +1 -0
  154. package/dist/server/routes/verify_email.js +2 -0
  155. package/package.json +40 -17
  156. package/components.json +0 -22
  157. package/instrumentation.ts +0 -32
  158. package/migrations/001_add_token_type_to_refresh_tokens.sql +0 -14
  159. package/migrations/002_add_name_to_hazo_users.sql +0 -7
  160. package/migrations/003_add_url_on_logon_to_hazo_users.sql +0 -8
  161. package/next.config.mjs +0 -67
  162. package/postcss.config.mjs +0 -8
  163. package/public/file.svg +0 -1
  164. package/public/globe.svg +0 -1
  165. package/public/next.svg +0 -1
  166. package/public/vercel.svg +0 -1
  167. package/public/window.svg +0 -1
  168. package/scripts/apply_migration.ts +0 -118
  169. package/scripts/init_users.ts +0 -378
  170. package/src/app/api/hazo_auth/auth/upload_profile_picture/route.ts +0 -268
  171. package/src/app/api/hazo_auth/change_password/route.ts +0 -132
  172. package/src/app/api/hazo_auth/forgot_password/route.ts +0 -107
  173. package/src/app/api/hazo_auth/get_auth/route.ts +0 -89
  174. package/src/app/api/hazo_auth/invalidate_cache/route.ts +0 -139
  175. package/src/app/api/hazo_auth/library_photos/route.ts +0 -73
  176. package/src/app/api/hazo_auth/login/route.ts +0 -181
  177. package/src/app/api/hazo_auth/logout/route.ts +0 -89
  178. package/src/app/api/hazo_auth/me/route.ts +0 -47
  179. package/src/app/api/hazo_auth/profile_picture/[filename]/route.ts +0 -67
  180. package/src/app/api/hazo_auth/register/route.ts +0 -109
  181. package/src/app/api/hazo_auth/remove_profile_picture/route.ts +0 -86
  182. package/src/app/api/hazo_auth/resend_verification/route.ts +0 -108
  183. package/src/app/api/hazo_auth/reset_password/route.ts +0 -107
  184. package/src/app/api/hazo_auth/update_user/route.ts +0 -126
  185. package/src/app/api/hazo_auth/upload_profile_picture/route.ts +0 -268
  186. package/src/app/api/hazo_auth/user_management/permissions/route.ts +0 -367
  187. package/src/app/api/hazo_auth/user_management/roles/route.ts +0 -442
  188. package/src/app/api/hazo_auth/user_management/users/roles/route.ts +0 -367
  189. package/src/app/api/hazo_auth/user_management/users/route.ts +0 -239
  190. package/src/app/api/hazo_auth/validate_reset_token/route.ts +0 -83
  191. package/src/app/api/hazo_auth/verify_email/route.ts +0 -88
  192. package/src/app/api/migrations/apply/route.ts +0 -91
  193. package/src/app/favicon.ico +0 -0
  194. package/src/app/fonts/GeistMonoVF.woff +0 -0
  195. package/src/app/fonts/GeistVF.woff +0 -0
  196. package/src/app/globals.css +0 -89
  197. package/src/app/hazo_auth/forgot_password/forgot_password_page_client.tsx +0 -60
  198. package/src/app/hazo_auth/forgot_password/page.tsx +0 -24
  199. package/src/app/hazo_auth/login/login_page_client.tsx +0 -86
  200. package/src/app/hazo_auth/login/page.tsx +0 -38
  201. package/src/app/hazo_auth/my_settings/my_settings_page_client.tsx +0 -120
  202. package/src/app/hazo_auth/my_settings/page.tsx +0 -40
  203. package/src/app/hazo_auth/register/page.tsx +0 -36
  204. package/src/app/hazo_auth/register/register_page_client.tsx +0 -81
  205. package/src/app/hazo_auth/reset_password/page.tsx +0 -29
  206. package/src/app/hazo_auth/reset_password/reset_password_page_client.tsx +0 -81
  207. package/src/app/hazo_auth/user_management/page.tsx +0 -14
  208. package/src/app/hazo_auth/user_management/user_management_page_client.tsx +0 -16
  209. package/src/app/hazo_auth/verify_email/page.tsx +0 -24
  210. package/src/app/hazo_auth/verify_email/verify_email_page_client.tsx +0 -60
  211. package/src/app/hazo_connect/api/sqlite/data/route.ts +0 -203
  212. package/src/app/hazo_connect/api/sqlite/schema/route.ts +0 -45
  213. package/src/app/hazo_connect/api/sqlite/tables/route.ts +0 -36
  214. package/src/app/hazo_connect/sqlite_admin/page.tsx +0 -51
  215. package/src/app/hazo_connect/sqlite_admin/sqlite-admin-client.tsx +0 -984
  216. package/src/app/layout.tsx +0 -43
  217. package/src/app/page.tsx +0 -170
  218. package/src/components/index.ts +0 -7
  219. package/src/components/layouts/email_verification/config/email_verification_field_config.ts +0 -86
  220. package/src/components/layouts/email_verification/hooks/use_email_verification.ts +0 -297
  221. package/src/components/layouts/email_verification/index.tsx +0 -297
  222. package/src/components/layouts/forgot_password/config/forgot_password_field_config.ts +0 -58
  223. package/src/components/layouts/forgot_password/hooks/use_forgot_password_form.ts +0 -179
  224. package/src/components/layouts/forgot_password/index.tsx +0 -168
  225. package/src/components/layouts/index.ts +0 -26
  226. package/src/components/layouts/login/config/login_field_config.ts +0 -67
  227. package/src/components/layouts/login/hooks/use_login_form.ts +0 -286
  228. package/src/components/layouts/login/index.tsx +0 -252
  229. package/src/components/layouts/my_settings/components/editable_field.tsx +0 -177
  230. package/src/components/layouts/my_settings/components/password_change_dialog.tsx +0 -301
  231. package/src/components/layouts/my_settings/components/profile_picture_dialog.tsx +0 -385
  232. package/src/components/layouts/my_settings/components/profile_picture_display.tsx +0 -66
  233. package/src/components/layouts/my_settings/components/profile_picture_gravatar_tab.tsx +0 -143
  234. package/src/components/layouts/my_settings/components/profile_picture_library_tab.tsx +0 -311
  235. package/src/components/layouts/my_settings/components/profile_picture_upload_tab.tsx +0 -341
  236. package/src/components/layouts/my_settings/config/my_settings_field_config.ts +0 -61
  237. package/src/components/layouts/my_settings/hooks/use_my_settings.ts +0 -458
  238. package/src/components/layouts/my_settings/index.tsx +0 -351
  239. package/src/components/layouts/register/config/register_field_config.ts +0 -101
  240. package/src/components/layouts/register/hooks/use_register_form.ts +0 -275
  241. package/src/components/layouts/register/index.tsx +0 -226
  242. package/src/components/layouts/reset_password/config/reset_password_field_config.ts +0 -86
  243. package/src/components/layouts/reset_password/hooks/use_reset_password_form.ts +0 -276
  244. package/src/components/layouts/reset_password/index.tsx +0 -294
  245. package/src/components/layouts/shared/components/already_logged_in_guard.tsx +0 -95
  246. package/src/components/layouts/shared/components/auth_page_shell.tsx +0 -36
  247. package/src/components/layouts/shared/components/field_error_message.tsx +0 -29
  248. package/src/components/layouts/shared/components/form_action_buttons.tsx +0 -64
  249. package/src/components/layouts/shared/components/form_field_wrapper.tsx +0 -44
  250. package/src/components/layouts/shared/components/form_header.tsx +0 -36
  251. package/src/components/layouts/shared/components/logout_button.tsx +0 -76
  252. package/src/components/layouts/shared/components/password_field.tsx +0 -72
  253. package/src/components/layouts/shared/components/profile_pic_menu.tsx +0 -321
  254. package/src/components/layouts/shared/components/profile_pic_menu_wrapper.tsx +0 -40
  255. package/src/components/layouts/shared/components/sidebar_layout_wrapper.tsx +0 -214
  256. package/src/components/layouts/shared/components/standalone_layout_wrapper.tsx +0 -53
  257. package/src/components/layouts/shared/components/two_column_auth_layout.tsx +0 -44
  258. package/src/components/layouts/shared/components/unauthorized_guard.tsx +0 -78
  259. package/src/components/layouts/shared/components/visual_panel.tsx +0 -41
  260. package/src/components/layouts/shared/config/layout_customization.ts +0 -95
  261. package/src/components/layouts/shared/data/layout_data_client.ts +0 -19
  262. package/src/components/layouts/shared/hooks/use_auth_status.ts +0 -103
  263. package/src/components/layouts/shared/hooks/use_hazo_auth.ts +0 -158
  264. package/src/components/layouts/shared/index.ts +0 -34
  265. package/src/components/layouts/shared/utils/ip_address.ts +0 -37
  266. package/src/components/layouts/shared/utils/validation.ts +0 -66
  267. package/src/components/layouts/user_management/components/roles_matrix.tsx +0 -607
  268. package/src/components/layouts/user_management/index.tsx +0 -1295
  269. package/src/components/ui/alert-dialog.tsx +0 -141
  270. package/src/components/ui/avatar.tsx +0 -50
  271. package/src/components/ui/button.tsx +0 -57
  272. package/src/components/ui/checkbox.tsx +0 -30
  273. package/src/components/ui/dialog.tsx +0 -122
  274. package/src/components/ui/dropdown-menu.tsx +0 -201
  275. package/src/components/ui/hazo_ui_tooltip.tsx +0 -67
  276. package/src/components/ui/index.ts +0 -22
  277. package/src/components/ui/input.tsx +0 -22
  278. package/src/components/ui/label.tsx +0 -26
  279. package/src/components/ui/separator.tsx +0 -31
  280. package/src/components/ui/sheet.tsx +0 -139
  281. package/src/components/ui/sidebar.tsx +0 -773
  282. package/src/components/ui/skeleton.tsx +0 -15
  283. package/src/components/ui/sonner.tsx +0 -31
  284. package/src/components/ui/switch.tsx +0 -29
  285. package/src/components/ui/table.tsx +0 -120
  286. package/src/components/ui/tabs.tsx +0 -55
  287. package/src/components/ui/tooltip.tsx +0 -32
  288. package/src/components/ui/vertical-tabs.tsx +0 -59
  289. package/src/hooks/use-mobile.tsx +0 -19
  290. package/src/index.ts +0 -7
  291. package/src/lib/already_logged_in_config.server.ts +0 -46
  292. package/src/lib/app_logger.ts +0 -24
  293. package/src/lib/auth/auth_cache.ts +0 -220
  294. package/src/lib/auth/auth_rate_limiter.ts +0 -121
  295. package/src/lib/auth/auth_types.ts +0 -65
  296. package/src/lib/auth/auth_utils.server.ts +0 -196
  297. package/src/lib/auth/hazo_get_auth.server.ts +0 -333
  298. package/src/lib/auth/index.ts +0 -23
  299. package/src/lib/auth/server_auth.ts +0 -88
  300. package/src/lib/auth_utility_config.server.ts +0 -136
  301. package/src/lib/config/config_loader.server.ts +0 -164
  302. package/src/lib/email_verification_config.server.ts +0 -32
  303. package/src/lib/file_types_config.server.ts +0 -25
  304. package/src/lib/forgot_password_config.server.ts +0 -32
  305. package/src/lib/hazo_connect_instance.server.ts +0 -101
  306. package/src/lib/hazo_connect_setup.server.ts +0 -194
  307. package/src/lib/hazo_connect_setup.ts +0 -54
  308. package/src/lib/index.ts +0 -44
  309. package/src/lib/login_config.server.ts +0 -71
  310. package/src/lib/messages_config.server.ts +0 -45
  311. package/src/lib/migrations/apply_migration.ts +0 -105
  312. package/src/lib/my_settings_config.server.ts +0 -135
  313. package/src/lib/password_requirements_config.server.ts +0 -39
  314. package/src/lib/profile_pic_menu_config.server.ts +0 -138
  315. package/src/lib/profile_picture_config.server.ts +0 -56
  316. package/src/lib/register_config.server.ts +0 -73
  317. package/src/lib/reset_password_config.server.ts +0 -75
  318. package/src/lib/services/email_service.ts +0 -581
  319. package/src/lib/services/email_verification_service.ts +0 -270
  320. package/src/lib/services/index.ts +0 -15
  321. package/src/lib/services/login_service.ts +0 -134
  322. package/src/lib/services/password_change_service.ts +0 -154
  323. package/src/lib/services/password_reset_service.ts +0 -405
  324. package/src/lib/services/profile_picture_remove_service.ts +0 -120
  325. package/src/lib/services/profile_picture_service.ts +0 -215
  326. package/src/lib/services/profile_picture_source_mapper.ts +0 -62
  327. package/src/lib/services/registration_service.ts +0 -184
  328. package/src/lib/services/token_service.ts +0 -240
  329. package/src/lib/services/user_profiles_service.ts +0 -143
  330. package/src/lib/services/user_update_service.ts +0 -141
  331. package/src/lib/ui_shell_config.server.ts +0 -73
  332. package/src/lib/ui_sizes_config.server.ts +0 -37
  333. package/src/lib/user_fields_config.server.ts +0 -31
  334. package/src/lib/user_management_config.server.ts +0 -39
  335. package/src/lib/utils/api_route_helpers.ts +0 -60
  336. package/src/lib/utils/error_sanitizer.ts +0 -75
  337. package/src/lib/utils.ts +0 -11
  338. package/src/middleware.ts +0 -94
  339. package/src/routes/index.ts +0 -34
  340. package/src/server/config/config_loader.ts +0 -496
  341. package/src/server/index.ts +0 -38
  342. package/src/server/logging/logger_service.ts +0 -56
  343. package/src/server/routes/root_router.ts +0 -16
  344. package/src/server/server.ts +0 -28
  345. package/src/server/types/app_types.ts +0 -74
  346. package/src/server/types/express.d.ts +0 -16
  347. package/src/stories/email_verification_layout.stories.tsx +0 -137
  348. package/src/stories/forgot_password_layout.stories.tsx +0 -85
  349. package/src/stories/login_layout.stories.tsx +0 -85
  350. package/src/stories/project_overview.stories.tsx +0 -33
  351. package/src/stories/register_layout.stories.tsx +0 -107
  352. package/tailwind.config.ts +0 -77
  353. package/tsconfig.build.json +0 -36
  354. package/tsconfig.json +0 -28
@@ -1,109 +0,0 @@
1
- // file_description: API route for user registration using hazo_connect to insert into hazo_users table
2
- // section: imports
3
- import { NextRequest, NextResponse } from "next/server";
4
- import { get_hazo_connect_instance } from "../../../../lib/hazo_connect_instance.server";
5
- import { create_app_logger } from "../../../../lib/app_logger";
6
- import { register_user } from "../../../../lib/services/registration_service";
7
- import { get_filename, get_line_number } from "../../../../lib/utils/api_route_helpers";
8
- import { sanitize_error_for_user } from "../../../../lib/utils/error_sanitizer";
9
-
10
- // section: api_handler
11
- export async function POST(request: NextRequest) {
12
- const logger = create_app_logger();
13
-
14
- try {
15
- const body = await request.json();
16
- const { name, email, password, url_on_logon } = body;
17
-
18
- // Validate input
19
- if (!email || !password) {
20
- logger.warn("registration_validation_failed", {
21
- filename: get_filename(),
22
- line_number: get_line_number(),
23
- email: email || "missing",
24
- has_password: !!password,
25
- });
26
-
27
- return NextResponse.json(
28
- { error: "Email and password are required" },
29
- { status: 400 }
30
- );
31
- }
32
-
33
- // Validate email format
34
- const email_pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
35
- if (!email_pattern.test(email)) {
36
- logger.warn("registration_invalid_email", {
37
- filename: get_filename(),
38
- line_number: get_line_number(),
39
- email,
40
- });
41
-
42
- return NextResponse.json(
43
- { error: "Invalid email address format" },
44
- { status: 400 }
45
- );
46
- }
47
-
48
- // Get singleton hazo_connect instance (reuses same connection across all routes)
49
- const hazoConnect = get_hazo_connect_instance();
50
-
51
- // Register user using the registration service
52
- const result = await register_user(hazoConnect, {
53
- email,
54
- password,
55
- name,
56
- url_on_logon,
57
- });
58
-
59
- if (!result.success) {
60
- const status_code = result.error === "Email address already registered" ? 409 : 500;
61
-
62
- logger.warn("registration_failed", {
63
- filename: get_filename(),
64
- line_number: get_line_number(),
65
- email,
66
- error: result.error,
67
- });
68
-
69
- return NextResponse.json(
70
- { error: result.error || "Registration failed" },
71
- { status: status_code }
72
- );
73
- }
74
-
75
- logger.info("registration_successful", {
76
- filename: get_filename(),
77
- line_number: get_line_number(),
78
- user_id: result.user_id,
79
- email,
80
- has_name: !!name,
81
- });
82
-
83
- return NextResponse.json(
84
- {
85
- success: true,
86
- message: "Registration successful",
87
- user_id: result.user_id,
88
- },
89
- { status: 201 }
90
- );
91
- } catch (error) {
92
- const user_friendly_error = sanitize_error_for_user(error, {
93
- logToConsole: true,
94
- logToLogger: true,
95
- logger,
96
- context: {
97
- filename: get_filename(),
98
- line_number: get_line_number(),
99
- operation: "register_api_route",
100
- },
101
- });
102
-
103
- return NextResponse.json(
104
- { error: user_friendly_error },
105
- { status: 500 }
106
- );
107
- }
108
- }
109
-
@@ -1,86 +0,0 @@
1
- // file_description: API route for removing profile pictures
2
- // section: imports
3
- import { NextRequest, NextResponse } from "next/server";
4
- import { get_hazo_connect_instance } from "../../../../lib/hazo_connect_instance.server";
5
- import { create_app_logger } from "../../../../lib/app_logger";
6
- import { remove_user_profile_picture } from "../../../../lib/services/profile_picture_remove_service";
7
- import { get_filename, get_line_number } from "../../../../lib/utils/api_route_helpers";
8
-
9
- // section: api_handler
10
- export async function DELETE(request: NextRequest) {
11
- const logger = create_app_logger();
12
-
13
- try {
14
- // Use centralized auth check
15
- let user_id: string;
16
- try {
17
- const { require_auth } = await import("../../../../lib/auth/auth_utils.server");
18
- const user = await require_auth(request);
19
- user_id = user.user_id;
20
- } catch (error) {
21
- if (error instanceof Error && error.message === "Authentication required") {
22
- logger.warn("profile_picture_remove_authentication_failed", {
23
- filename: get_filename(),
24
- line_number: get_line_number(),
25
- error: "User not authenticated",
26
- });
27
-
28
- return NextResponse.json(
29
- { error: "Authentication required" },
30
- { status: 401 }
31
- );
32
- }
33
- throw error;
34
- }
35
-
36
- // Get singleton hazo_connect instance
37
- const hazoConnect = get_hazo_connect_instance();
38
-
39
- // Remove profile picture
40
- const result = await remove_user_profile_picture(hazoConnect, user_id);
41
-
42
- if (!result.success) {
43
- logger.warn("profile_picture_remove_failed", {
44
- filename: get_filename(),
45
- line_number: get_line_number(),
46
- user_id,
47
- error: result.error,
48
- });
49
-
50
- return NextResponse.json(
51
- { error: result.error || "Failed to remove profile picture" },
52
- { status: 400 }
53
- );
54
- }
55
-
56
- logger.info("profile_picture_remove_successful", {
57
- filename: get_filename(),
58
- line_number: get_line_number(),
59
- user_id,
60
- });
61
-
62
- return NextResponse.json(
63
- {
64
- success: true,
65
- message: "Profile picture removed successfully",
66
- },
67
- { status: 200 }
68
- );
69
- } catch (error) {
70
- const error_message = error instanceof Error ? error.message : "Unknown error";
71
- const error_stack = error instanceof Error ? error.stack : undefined;
72
-
73
- logger.error("profile_picture_remove_error", {
74
- filename: get_filename(),
75
- line_number: get_line_number(),
76
- error_message,
77
- error_stack,
78
- });
79
-
80
- return NextResponse.json(
81
- { error: "Failed to remove profile picture. Please try again." },
82
- { status: 500 }
83
- );
84
- }
85
- }
86
-
@@ -1,108 +0,0 @@
1
- // file_description: API route for resending email verification using hazo_connect
2
- // section: imports
3
- import { NextRequest, NextResponse } from "next/server";
4
- import { get_hazo_connect_instance } from "../../../../lib/hazo_connect_instance.server";
5
- import { create_app_logger } from "../../../../lib/app_logger";
6
- import { resend_verification_email } from "../../../../lib/services/email_verification_service";
7
- import { get_filename, get_line_number } from "../../../../lib/utils/api_route_helpers";
8
-
9
- // section: api_handler
10
- export async function POST(request: NextRequest) {
11
- const logger = create_app_logger();
12
-
13
- try {
14
- const body = await request.json();
15
- const { email } = body;
16
-
17
- // Validate input
18
- if (!email) {
19
- logger.warn("resend_verification_validation_failed", {
20
- filename: get_filename(),
21
- line_number: get_line_number(),
22
- email: email || "missing",
23
- });
24
-
25
- return NextResponse.json(
26
- { error: "Email is required" },
27
- { status: 400 }
28
- );
29
- }
30
-
31
- // Validate email format
32
- const email_pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
33
- if (!email_pattern.test(email)) {
34
- logger.warn("resend_verification_invalid_email", {
35
- filename: get_filename(),
36
- line_number: get_line_number(),
37
- email,
38
- });
39
-
40
- return NextResponse.json(
41
- { error: "Invalid email address format" },
42
- { status: 400 }
43
- );
44
- }
45
-
46
- // Get singleton hazo_connect instance (reuses same connection across all routes)
47
- const hazoConnect = get_hazo_connect_instance();
48
-
49
- // Resend verification email using the email verification service
50
- const result = await resend_verification_email(hazoConnect, {
51
- email,
52
- });
53
-
54
- if (!result.success) {
55
- logger.error("resend_verification_failed", {
56
- filename: get_filename(),
57
- line_number: get_line_number(),
58
- email,
59
- error: result.error,
60
- });
61
-
62
- // Return error response (500) when email sending fails
63
- // This is a technical error, not a security issue, so we can reveal it
64
- return NextResponse.json(
65
- {
66
- success: false,
67
- error: result.error || "Failed to resend verification email",
68
- },
69
- { status: 500 }
70
- );
71
- }
72
-
73
- logger.info("resend_verification_requested", {
74
- filename: get_filename(),
75
- line_number: get_line_number(),
76
- email,
77
- });
78
-
79
- // Always return success to prevent email enumeration attacks
80
- return NextResponse.json(
81
- {
82
- success: true,
83
- message: "If an account with that email exists and is not verified, a verification link has been sent.",
84
- },
85
- { status: 200 }
86
- );
87
- } catch (error) {
88
- const error_message = error instanceof Error ? error.message : "Unknown error";
89
- const error_stack = error instanceof Error ? error.stack : undefined;
90
-
91
- logger.error("resend_verification_error", {
92
- filename: get_filename(),
93
- line_number: get_line_number(),
94
- error_message,
95
- error_stack,
96
- });
97
-
98
- // Still return 200 OK to prevent email enumeration attacks
99
- return NextResponse.json(
100
- {
101
- success: true,
102
- message: "If an account with that email exists and is not verified, a verification link has been sent.",
103
- },
104
- { status: 200 }
105
- );
106
- }
107
- }
108
-
@@ -1,107 +0,0 @@
1
- // file_description: API route for resetting user password using a reset token
2
- // section: imports
3
- import { NextRequest, NextResponse } from "next/server";
4
- import { get_hazo_connect_instance } from "../../../../lib/hazo_connect_instance.server";
5
- import { reset_password } from "../../../../lib/services/password_reset_service";
6
- import { create_app_logger } from "../../../../lib/app_logger";
7
- import { get_password_requirements_config } from "../../../../lib/password_requirements_config.server";
8
- import { get_filename, get_line_number } from "../../../../lib/utils/api_route_helpers";
9
-
10
- // section: api_handler
11
- export async function POST(request: NextRequest) {
12
- const logger = create_app_logger();
13
-
14
- try {
15
- const body = await request.json();
16
- const { token, new_password } = body;
17
-
18
- // Validate input
19
- if (!token) {
20
- logger.warn("password_reset_validation_failed", {
21
- filename: get_filename(),
22
- line_number: get_line_number(),
23
- error: "Token is required",
24
- });
25
-
26
- return NextResponse.json(
27
- { error: "Token is required" },
28
- { status: 400 }
29
- );
30
- }
31
-
32
- if (!new_password) {
33
- logger.warn("password_reset_validation_failed", {
34
- filename: get_filename(),
35
- line_number: get_line_number(),
36
- error: "New password is required",
37
- });
38
-
39
- return NextResponse.json(
40
- { error: "New password is required" },
41
- { status: 400 }
42
- );
43
- }
44
-
45
- // Get singleton hazo_connect instance (reuses same connection across all routes)
46
- const hazoConnect = get_hazo_connect_instance();
47
-
48
- // Get password requirements from config
49
- const passwordRequirements = get_password_requirements_config();
50
-
51
- // Reset password using the password reset service
52
- const result = await reset_password(hazoConnect, {
53
- token,
54
- new_password,
55
- minimum_length: passwordRequirements.minimum_length,
56
- });
57
-
58
- if (!result.success) {
59
- logger.warn("password_reset_failed", {
60
- filename: get_filename(),
61
- line_number: get_line_number(),
62
- error: result.error,
63
- });
64
-
65
- return NextResponse.json(
66
- {
67
- success: false,
68
- error: result.error || "Failed to reset password",
69
- },
70
- { status: 400 }
71
- );
72
- }
73
-
74
- logger.info("password_reset_successful", {
75
- filename: get_filename(),
76
- line_number: get_line_number(),
77
- user_id: result.user_id,
78
- email: result.email,
79
- });
80
-
81
- return NextResponse.json(
82
- {
83
- success: true,
84
- message: "Password has been reset successfully",
85
- },
86
- { status: 200 }
87
- );
88
- } catch (error) {
89
- const error_message =
90
- error instanceof Error ? error.message : "Unknown error";
91
-
92
- logger.error("password_reset_error", {
93
- filename: get_filename(),
94
- line_number: get_line_number(),
95
- error: error_message,
96
- });
97
-
98
- return NextResponse.json(
99
- {
100
- success: false,
101
- error: "An error occurred while resetting your password",
102
- },
103
- { status: 500 }
104
- );
105
- }
106
- }
107
-
@@ -1,126 +0,0 @@
1
- // file_description: API route for updating user profile information
2
- // section: imports
3
- import { NextRequest, NextResponse } from "next/server";
4
- import { get_hazo_connect_instance } from "../../../../lib/hazo_connect_instance.server";
5
- import { create_app_logger } from "../../../../lib/app_logger";
6
- import { update_user_profile } from "../../../../lib/services/user_update_service";
7
- import { get_filename, get_line_number } from "../../../../lib/utils/api_route_helpers";
8
- import { require_auth } from "../../../../lib/auth/auth_utils.server";
9
-
10
- // section: api_handler
11
- export async function PATCH(request: NextRequest) {
12
- const logger = create_app_logger();
13
-
14
- try {
15
- // Use centralized auth check
16
- let user_id: string;
17
- try {
18
- const user = await require_auth(request);
19
- user_id = user.user_id;
20
- } catch (error) {
21
- if (error instanceof Error && error.message === "Authentication required") {
22
- logger.warn("user_update_authentication_failed", {
23
- filename: get_filename(),
24
- line_number: get_line_number(),
25
- error: "User not authenticated",
26
- });
27
-
28
- return NextResponse.json(
29
- { error: "Authentication required" },
30
- { status: 401 }
31
- );
32
- }
33
- throw error;
34
- }
35
-
36
- const body = await request.json();
37
- const { name, email, profile_picture_url, profile_source } = body;
38
-
39
- // Validate input (at least one field must be provided)
40
- if (name === undefined && email === undefined && profile_picture_url === undefined) {
41
- logger.warn("user_update_validation_failed", {
42
- filename: get_filename(),
43
- line_number: get_line_number(),
44
- error: "No fields to update",
45
- });
46
-
47
- return NextResponse.json(
48
- { error: "At least one field (name, email, or profile_picture_url) must be provided" },
49
- { status: 400 }
50
- );
51
- }
52
-
53
- // Get singleton hazo_connect instance
54
- const hazoConnect = get_hazo_connect_instance();
55
-
56
- // Update user profile
57
- const result = await update_user_profile(hazoConnect, user_id, {
58
- name,
59
- email,
60
- profile_picture_url,
61
- profile_source,
62
- });
63
-
64
- if (!result.success) {
65
- logger.warn("user_update_failed", {
66
- filename: get_filename(),
67
- line_number: get_line_number(),
68
- error: result.error,
69
- user_id,
70
- email_changed: result.email_changed,
71
- });
72
-
73
- return NextResponse.json(
74
- { error: result.error || "Failed to update user profile" },
75
- { status: 400 }
76
- );
77
- }
78
-
79
- logger.info("user_update_successful", {
80
- filename: get_filename(),
81
- line_number: get_line_number(),
82
- user_id,
83
- email_changed: result.email_changed,
84
- });
85
-
86
- // Create response
87
- const response = NextResponse.json(
88
- {
89
- success: true,
90
- message: "Profile updated successfully",
91
- email_changed: result.email_changed,
92
- },
93
- { status: 200 }
94
- );
95
-
96
- // If email changed, update the cookie (match login route cookie settings)
97
- if (result.email_changed && email) {
98
- response.cookies.set("hazo_auth_user_email", email, {
99
- httpOnly: true,
100
- secure: process.env.NODE_ENV === "production",
101
- sameSite: "lax",
102
- path: "/",
103
- maxAge: 60 * 60 * 24 * 30, // 30 days
104
- });
105
- }
106
-
107
- return response;
108
- } catch (error) {
109
- const error_message =
110
- error instanceof Error ? error.message : "Unknown error";
111
- const error_stack = error instanceof Error ? error.stack : undefined;
112
-
113
- logger.error("user_update_error", {
114
- filename: get_filename(),
115
- line_number: get_line_number(),
116
- error_message,
117
- error_stack,
118
- });
119
-
120
- return NextResponse.json(
121
- { error: "Failed to update user profile. Please try again." },
122
- { status: 500 }
123
- );
124
- }
125
- }
126
-