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
@@ -1,81 +0,0 @@
1
- // file_description: client component for register page that initializes hazo_connect and renders register layout
2
- // section: client_directive
3
- "use client";
4
-
5
- // section: imports
6
- import { useEffect, useState } from "react";
7
- import register_layout from "../../../components/layouts/register";
8
- import { createLayoutDataClient } from "../../../components/layouts/shared/data/layout_data_client";
9
- import { create_sqlite_hazo_connect } from "../../../lib/hazo_connect_setup";
10
- import type { LayoutDataClient } from "../../../components/layouts/shared/data/layout_data_client";
11
-
12
- // section: types
13
- type RegisterPageClientProps = {
14
- showNameField?: boolean;
15
- passwordRequirements?: {
16
- minimum_length: number;
17
- require_uppercase: boolean;
18
- require_lowercase: boolean;
19
- require_number: boolean;
20
- require_special: boolean;
21
- };
22
- alreadyLoggedInMessage?: string;
23
- showLogoutButton?: boolean;
24
- showReturnHomeButton?: boolean;
25
- returnHomeButtonLabel?: string;
26
- returnHomePath?: string;
27
- signInPath?: string;
28
- signInLabel?: string;
29
- urlOnLogon?: string;
30
- };
31
-
32
- // section: component
33
- export function RegisterPageClient({
34
- showNameField,
35
- passwordRequirements,
36
- alreadyLoggedInMessage,
37
- showLogoutButton,
38
- showReturnHomeButton,
39
- returnHomeButtonLabel,
40
- returnHomePath,
41
- signInPath,
42
- signInLabel,
43
- urlOnLogon,
44
- }: RegisterPageClientProps) {
45
- const [dataClient, setDataClient] = useState<LayoutDataClient<unknown> | null>(null);
46
-
47
- useEffect(() => {
48
- // Initialize hazo_connect on client side
49
- const hazoConnect = create_sqlite_hazo_connect();
50
- const client = createLayoutDataClient(hazoConnect);
51
-
52
- setDataClient(client);
53
- }, []);
54
-
55
- // Show loading state while initializing
56
- if (!dataClient) {
57
- return <div className="cls_register_page_loading text-slate-600">Loading...</div>;
58
- }
59
-
60
- const RegisterLayout = register_layout;
61
-
62
- return (
63
- <RegisterLayout
64
- image_src="/globe.svg"
65
- image_alt="Illustration of a globe representing secure authentication workflows"
66
- image_background_color="#e2e8f0"
67
- password_requirements={passwordRequirements}
68
- show_name_field={showNameField}
69
- data_client={dataClient}
70
- alreadyLoggedInMessage={alreadyLoggedInMessage}
71
- showLogoutButton={showLogoutButton}
72
- showReturnHomeButton={showReturnHomeButton}
73
- returnHomeButtonLabel={returnHomeButtonLabel}
74
- returnHomePath={returnHomePath}
75
- signInPath={signInPath}
76
- signInLabel={signInLabel}
77
- urlOnLogon={urlOnLogon}
78
- />
79
- );
80
- }
81
-
@@ -1,29 +0,0 @@
1
- // file_description: render the reset password page shell and mount the reset password layout component within sidebar
2
- // section: imports
3
- import { AuthPageShell } from "../../../components/layouts/shared/components/auth_page_shell";
4
- import { ResetPasswordPageClient } from "./reset_password_page_client";
5
- import { get_reset_password_config } from "../../../lib/reset_password_config.server";
6
-
7
- // section: component
8
- export default function reset_password_page() {
9
- // Read reset password configuration from hazo_auth_config.ini (server-side)
10
- const resetPasswordConfig = get_reset_password_config();
11
-
12
- return (
13
- <AuthPageShell>
14
- <ResetPasswordPageClient
15
- errorMessage={resetPasswordConfig.errorMessage}
16
- successMessage={resetPasswordConfig.successMessage}
17
- loginPath={resetPasswordConfig.loginPath}
18
- forgotPasswordPath={resetPasswordConfig.forgotPasswordPath}
19
- alreadyLoggedInMessage={resetPasswordConfig.alreadyLoggedInMessage}
20
- showLogoutButton={resetPasswordConfig.showLogoutButton}
21
- showReturnHomeButton={resetPasswordConfig.showReturnHomeButton}
22
- returnHomeButtonLabel={resetPasswordConfig.returnHomeButtonLabel}
23
- returnHomePath={resetPasswordConfig.returnHomePath}
24
- passwordRequirements={resetPasswordConfig.passwordRequirements}
25
- />
26
- </AuthPageShell>
27
- );
28
- }
29
-
@@ -1,81 +0,0 @@
1
- // file_description: client component for reset password page that initializes hazo_connect and renders reset password layout
2
- // section: client_directive
3
- "use client";
4
-
5
- // section: imports
6
- import { useEffect, useState } from "react";
7
- import reset_password_layout from "../../../components/layouts/reset_password";
8
- import { createLayoutDataClient } from "../../../components/layouts/shared/data/layout_data_client";
9
- import { create_sqlite_hazo_connect } from "../../../lib/hazo_connect_setup";
10
- import type { LayoutDataClient } from "../../../components/layouts/shared/data/layout_data_client";
11
-
12
- // section: types
13
- type ResetPasswordPageClientProps = {
14
- errorMessage?: string;
15
- successMessage?: string;
16
- loginPath?: string;
17
- forgotPasswordPath?: string;
18
- alreadyLoggedInMessage?: string;
19
- showLogoutButton?: boolean;
20
- showReturnHomeButton?: boolean;
21
- returnHomeButtonLabel?: string;
22
- returnHomePath?: string;
23
- passwordRequirements?: {
24
- minimum_length: number;
25
- require_uppercase: boolean;
26
- require_lowercase: boolean;
27
- require_number: boolean;
28
- require_special: boolean;
29
- };
30
- };
31
-
32
- // section: component
33
- export function ResetPasswordPageClient({
34
- errorMessage,
35
- successMessage,
36
- loginPath,
37
- forgotPasswordPath,
38
- alreadyLoggedInMessage,
39
- showLogoutButton,
40
- showReturnHomeButton,
41
- returnHomeButtonLabel,
42
- returnHomePath,
43
- passwordRequirements,
44
- }: ResetPasswordPageClientProps) {
45
- const [dataClient, setDataClient] = useState<LayoutDataClient<unknown> | null>(null);
46
-
47
- useEffect(() => {
48
- // Initialize hazo_connect on client side
49
- const hazoConnect = create_sqlite_hazo_connect();
50
- const client = createLayoutDataClient(hazoConnect);
51
-
52
- setDataClient(client);
53
- }, []);
54
-
55
- // Show loading state while initializing
56
- if (!dataClient) {
57
- return <div className="cls_reset_password_page_loading text-slate-600">Loading...</div>;
58
- }
59
-
60
- const ResetPasswordLayout = reset_password_layout;
61
-
62
- return (
63
- <ResetPasswordLayout
64
- image_src="/globe.svg"
65
- image_alt="Illustration of a globe representing secure authentication workflows"
66
- image_background_color="#e2e8f0"
67
- data_client={dataClient}
68
- errorMessage={errorMessage}
69
- successMessage={successMessage}
70
- loginPath={loginPath}
71
- forgotPasswordPath={forgotPasswordPath}
72
- alreadyLoggedInMessage={alreadyLoggedInMessage}
73
- showLogoutButton={showLogoutButton}
74
- showReturnHomeButton={showReturnHomeButton}
75
- returnHomeButtonLabel={returnHomeButtonLabel}
76
- returnHomePath={returnHomePath}
77
- password_requirements={passwordRequirements}
78
- />
79
- );
80
- }
81
-
@@ -1,14 +0,0 @@
1
- // file_description: render the user management page shell and mount the user management layout component within sidebar
2
- // section: imports
3
- import { AuthPageShell } from "../../../components/layouts/shared/components/auth_page_shell";
4
- import { UserManagementPageClient } from "./user_management_page_client";
5
-
6
- // section: component
7
- export default function user_management_page() {
8
- return (
9
- <AuthPageShell>
10
- <UserManagementPageClient />
11
- </AuthPageShell>
12
- );
13
- }
14
-
@@ -1,16 +0,0 @@
1
- // file_description: client component for user management page
2
- // section: client_directive
3
- "use client";
4
-
5
- // section: imports
6
- import { UserManagementLayout } from "../../../components/layouts/user_management";
7
-
8
- // section: component
9
- /**
10
- * Client component for user management page
11
- * @returns User Management layout component
12
- */
13
- export function UserManagementPageClient() {
14
- return <UserManagementLayout className="w-full" />;
15
- }
16
-
@@ -1,24 +0,0 @@
1
- // file_description: render the email verification page shell and mount the email verification layout component within sidebar
2
- // section: imports
3
- import { AuthPageShell } from "../../../components/layouts/shared/components/auth_page_shell";
4
- import { VerifyEmailPageClient } from "./verify_email_page_client";
5
- import { get_email_verification_config } from "../../../lib/email_verification_config.server";
6
-
7
- // section: component
8
- export default function verify_email_page() {
9
- // Read email verification configuration from hazo_auth_config.ini (server-side)
10
- const emailVerificationConfig = get_email_verification_config();
11
-
12
- return (
13
- <AuthPageShell>
14
- <VerifyEmailPageClient
15
- alreadyLoggedInMessage={emailVerificationConfig.alreadyLoggedInMessage}
16
- showLogoutButton={emailVerificationConfig.showLogoutButton}
17
- showReturnHomeButton={emailVerificationConfig.showReturnHomeButton}
18
- returnHomeButtonLabel={emailVerificationConfig.returnHomeButtonLabel}
19
- returnHomePath={emailVerificationConfig.returnHomePath}
20
- />
21
- </AuthPageShell>
22
- );
23
- }
24
-
@@ -1,60 +0,0 @@
1
- // file_description: client component for verify email page that initializes hazo_connect and renders email verification layout
2
- // section: client_directive
3
- "use client";
4
-
5
- // section: imports
6
- import { useEffect, useState } from "react";
7
- import email_verification_layout from "../../../components/layouts/email_verification";
8
- import { createLayoutDataClient } from "../../../components/layouts/shared/data/layout_data_client";
9
- import { create_sqlite_hazo_connect } from "../../../lib/hazo_connect_setup";
10
- import type { LayoutDataClient } from "../../../components/layouts/shared/data/layout_data_client";
11
-
12
- // section: types
13
- type VerifyEmailPageClientProps = {
14
- alreadyLoggedInMessage?: string;
15
- showLogoutButton?: boolean;
16
- showReturnHomeButton?: boolean;
17
- returnHomeButtonLabel?: string;
18
- returnHomePath?: string;
19
- };
20
-
21
- // section: component
22
- export function VerifyEmailPageClient({
23
- alreadyLoggedInMessage,
24
- showLogoutButton,
25
- showReturnHomeButton,
26
- returnHomeButtonLabel,
27
- returnHomePath,
28
- }: VerifyEmailPageClientProps) {
29
- const [dataClient, setDataClient] = useState<LayoutDataClient<unknown> | null>(null);
30
-
31
- useEffect(() => {
32
- // Initialize hazo_connect on client side
33
- const hazoConnect = create_sqlite_hazo_connect();
34
- const client = createLayoutDataClient(hazoConnect);
35
-
36
- setDataClient(client);
37
- }, []);
38
-
39
- // Show loading state while initializing
40
- if (!dataClient) {
41
- return <div className="cls_verify_email_page_loading text-slate-600">Loading...</div>;
42
- }
43
-
44
- const EmailVerificationLayout = email_verification_layout;
45
-
46
- return (
47
- <EmailVerificationLayout
48
- image_src="/globe.svg"
49
- image_alt="Illustration of a globe representing secure authentication workflows"
50
- image_background_color="#e2e8f0"
51
- data_client={dataClient}
52
- already_logged_in_message={alreadyLoggedInMessage}
53
- showLogoutButton={showLogoutButton}
54
- showReturnHomeButton={showReturnHomeButton}
55
- returnHomeButtonLabel={returnHomeButtonLabel}
56
- returnHomePath={returnHomePath}
57
- />
58
- );
59
- }
60
-
@@ -1,203 +0,0 @@
1
- // file_description: API route to manage SQLite table data (CRUD operations) for admin UI
2
- import { NextRequest, NextResponse } from "next/server"
3
- import {
4
- getSqliteAdminService,
5
- type RowQueryOptions,
6
- type SqliteFilterOperator,
7
- type SqliteWhereFilter
8
- } from "hazo_connect/server"
9
- import { get_hazo_connect_instance } from "../../../../../lib/hazo_connect_instance.server"
10
-
11
- export const dynamic = "force-dynamic"
12
- const allowedOperators: SqliteFilterOperator[] = [
13
- "eq",
14
- "neq",
15
- "gt",
16
- "gte",
17
- "lt",
18
- "lte",
19
- "like",
20
- "ilike",
21
- "is"
22
- ]
23
-
24
- // Helper function to ensure admin service is initialized
25
- function ensureAdminServiceInitialized() {
26
- // Get singleton hazo_connect instance (initializes admin service if needed)
27
- get_hazo_connect_instance();
28
-
29
- try {
30
- return getSqliteAdminService();
31
- } catch (serviceError) {
32
- const errorMessage = serviceError instanceof Error ? serviceError.message : "Unknown error";
33
- throw new Error(`SQLite Admin Service not available: ${errorMessage}. Make sure enable_admin_ui is set to true in hazo_auth_config.ini.`);
34
- }
35
- }
36
-
37
- export async function GET(request: NextRequest) {
38
- const url = new URL(request.url)
39
- const table = url.searchParams.get("table")
40
- if (!table) {
41
- return NextResponse.json(
42
- { error: "Query parameter 'table' is required." },
43
- { status: 400 }
44
- )
45
- }
46
-
47
- try {
48
- const service = ensureAdminServiceInitialized()
49
- const options = parseRowQueryOptions(url.searchParams)
50
- const page = await service.getTableData(table, options)
51
- return NextResponse.json({ data: page.rows, total: page.total })
52
- } catch (error) {
53
- return toErrorResponse(error, `Failed to fetch data for table '${table}'`)
54
- }
55
- }
56
-
57
- export async function POST(request: NextRequest) {
58
- try {
59
- const service = ensureAdminServiceInitialized()
60
- const payload = await request.json()
61
- const table = payload?.table
62
- const data = payload?.data
63
-
64
- if (!table || typeof data !== "object" || Array.isArray(data)) {
65
- return NextResponse.json(
66
- { error: "Request body must include 'table' and a 'data' object." },
67
- { status: 400 }
68
- )
69
- }
70
-
71
- const inserted = await service.insertRow(table, data)
72
- return NextResponse.json({ data: inserted })
73
- } catch (error) {
74
- return toErrorResponse(error, "Failed to insert row")
75
- }
76
- }
77
-
78
- export async function PATCH(request: NextRequest) {
79
- try {
80
- const service = ensureAdminServiceInitialized()
81
- const payload = await request.json()
82
- const table = payload?.table
83
- const data = payload?.data
84
- const criteria = payload?.criteria
85
-
86
- if (
87
- !table ||
88
- typeof data !== "object" ||
89
- Array.isArray(data) ||
90
- typeof criteria !== "object" ||
91
- criteria === null ||
92
- Array.isArray(criteria)
93
- ) {
94
- return NextResponse.json(
95
- {
96
- error:
97
- "Request body must include 'table', 'data' object, and a 'criteria' object for the rows to update."
98
- },
99
- { status: 400 }
100
- )
101
- }
102
-
103
- const rows = await service.updateRows(table, criteria, data)
104
- return NextResponse.json({ data: rows, updated: rows.length })
105
- } catch (error) {
106
- return toErrorResponse(error, "Failed to update rows")
107
- }
108
- }
109
-
110
- export async function DELETE(request: NextRequest) {
111
- try {
112
- const service = ensureAdminServiceInitialized()
113
- const payload = await request.json()
114
- const table = payload?.table
115
- const criteria = payload?.criteria
116
-
117
- if (
118
- !table ||
119
- typeof criteria !== "object" ||
120
- criteria === null ||
121
- Array.isArray(criteria)
122
- ) {
123
- return NextResponse.json(
124
- {
125
- error:
126
- "Request body must include 'table' and a 'criteria' object for the rows to delete."
127
- },
128
- { status: 400 }
129
- )
130
- }
131
-
132
- const rows = await service.deleteRows(table, criteria)
133
- return NextResponse.json({ data: rows, deleted: rows.length })
134
- } catch (error) {
135
- return toErrorResponse(error, "Failed to delete rows")
136
- }
137
- }
138
-
139
- function parseRowQueryOptions(params: URLSearchParams): RowQueryOptions {
140
- const limitParam = params.get("limit")
141
- const offsetParam = params.get("offset")
142
- const orderBy = params.get("orderBy") ?? undefined
143
- const orderDirection = parseOrderDirection(params.get("orderDirection"))
144
- const filters = parseFilters(params)
145
-
146
- const limit = limitParam ? Number.parseInt(limitParam, 10) : undefined
147
- const offset = offsetParam ? Number.parseInt(offsetParam, 10) : undefined
148
-
149
- return {
150
- limit: Number.isNaN(limit) ? undefined : limit,
151
- offset: Number.isNaN(offset) ? undefined : offset,
152
- order_by: orderBy ?? undefined,
153
- order_direction: orderDirection,
154
- filters: filters.length ? filters : undefined
155
- }
156
- }
157
-
158
- function parseFilters(params: URLSearchParams): SqliteWhereFilter[] {
159
- const filters: SqliteWhereFilter[] = []
160
-
161
- params.forEach((value, key) => {
162
- const match = key.match(/^filter\[(.+?)\](?:\[(.+)\])?$/)
163
- if (!match) {
164
- return
165
- }
166
- const column = match[1]
167
- const operatorValue = (match[2] ?? "eq").toLowerCase()
168
- if (!isAllowedOperator(operatorValue)) {
169
- throw new Error(`Unsupported filter operator '${operatorValue}'`)
170
- }
171
- filters.push({
172
- column,
173
- operator: operatorValue as SqliteFilterOperator,
174
- value
175
- })
176
- })
177
-
178
- return filters
179
- }
180
-
181
- function parseOrderDirection(
182
- direction: string | null
183
- ): "asc" | "desc" | undefined {
184
- if (!direction) {
185
- return undefined
186
- }
187
- const normalized = direction.toLowerCase()
188
- if (normalized === "asc" || normalized === "desc") {
189
- return normalized
190
- }
191
- throw new Error(`Unsupported order direction '${direction}'`)
192
- }
193
-
194
- function isAllowedOperator(value: string): value is SqliteFilterOperator {
195
- return allowedOperators.includes(value as SqliteFilterOperator)
196
- }
197
-
198
- function toErrorResponse(error: unknown, fallback: string) {
199
- const message = error instanceof Error ? error.message : fallback
200
- const status = message.toLowerCase().includes("required") ? 400 : 500
201
- return NextResponse.json({ error: message }, { status })
202
- }
203
-
@@ -1,45 +0,0 @@
1
- // file_description: API route to get SQLite table schema for admin UI
2
- import { NextRequest, NextResponse } from "next/server"
3
- import { getSqliteAdminService } from "hazo_connect/server"
4
- import { get_hazo_connect_instance } from "../../../../../lib/hazo_connect_instance.server"
5
-
6
- export const dynamic = "force-dynamic"
7
-
8
- export async function GET(request: NextRequest) {
9
- const url = new URL(request.url)
10
- const table = url.searchParams.get("table")
11
- if (!table) {
12
- return NextResponse.json(
13
- { error: "Query parameter 'table' is required." },
14
- { status: 400 }
15
- )
16
- }
17
-
18
- try {
19
- // Get singleton hazo_connect instance (initializes admin service if needed)
20
- get_hazo_connect_instance();
21
-
22
- let service;
23
- try {
24
- service = getSqliteAdminService();
25
- } catch (serviceError) {
26
- const errorMessage = serviceError instanceof Error ? serviceError.message : "Unknown error";
27
- return NextResponse.json(
28
- { error: `SQLite Admin Service not available: ${errorMessage}. Make sure enable_admin_ui is set to true in hazo_auth_config.ini.` },
29
- { status: 500 }
30
- );
31
- }
32
-
33
- const schema = await service.getTableSchema(table);
34
- return NextResponse.json({ data: schema });
35
- } catch (error) {
36
- return toErrorResponse(error, `Failed to fetch schema for table '${table}'`);
37
- }
38
- }
39
-
40
- function toErrorResponse(error: unknown, fallback: string) {
41
- const message = error instanceof Error ? error.message : fallback
42
- const status = message.toLowerCase().includes("required") ? 400 : 500
43
- return NextResponse.json({ error: message }, { status })
44
- }
45
-
@@ -1,36 +0,0 @@
1
- // file_description: API route to list SQLite tables for admin UI
2
- import { NextResponse } from "next/server"
3
- import { getSqliteAdminService } from "hazo_connect/server"
4
- import { get_hazo_connect_instance } from "../../../../../lib/hazo_connect_instance.server"
5
-
6
- export const dynamic = "force-dynamic"
7
-
8
- export async function GET() {
9
- try {
10
- // Get singleton hazo_connect instance (initializes admin service if needed)
11
- get_hazo_connect_instance();
12
-
13
- let service;
14
- try {
15
- service = getSqliteAdminService();
16
- } catch (serviceError) {
17
- const errorMessage = serviceError instanceof Error ? serviceError.message : "Unknown error";
18
- return NextResponse.json(
19
- { error: `SQLite Admin Service not available: ${errorMessage}. Make sure enable_admin_ui is set to true in hazo_auth_config.ini.` },
20
- { status: 500 }
21
- );
22
- }
23
-
24
- const tables = await service.listTables();
25
- return NextResponse.json({ data: tables });
26
- } catch (error) {
27
- return toErrorResponse(error, "Failed to list SQLite tables");
28
- }
29
- }
30
-
31
- function toErrorResponse(error: unknown, fallback: string) {
32
- const message = error instanceof Error ? error.message : fallback
33
- const status = message.toLowerCase().includes("required") ? 400 : 500
34
- return NextResponse.json({ error: message }, { status })
35
- }
36
-
@@ -1,51 +0,0 @@
1
- // file_description: SQLite admin UI page that displays the admin client component
2
- // Note: This page fetches data from API routes instead of directly calling admin service
3
- // to avoid SQLite/WASM loading issues in React Server Component context
4
- import { headers } from "next/headers"
5
- import type { TableSummary } from "hazo_connect/ui"
6
- import SqliteAdminClient from "./sqlite-admin-client"
7
-
8
- export const dynamic = "force-dynamic"
9
-
10
- export default async function SqliteAdminPage() {
11
- // Fetch initial tables from API route to avoid SQLite/WASM in RSC context
12
- // API routes run in proper Node.js context where SQLite can work
13
- try {
14
- // Get the host from request headers to construct absolute URL
15
- const headersList = await headers()
16
- const host = headersList.get("host") || "localhost:3000"
17
- const protocol = process.env.NODE_ENV === "production" ? "https" : "http"
18
- const baseUrl = `${protocol}://${host}`
19
-
20
- // Use Next.js internal fetch with absolute URL
21
- const response = await fetch(
22
- `${baseUrl}/hazo_connect/api/sqlite/tables`,
23
- {
24
- cache: "no-store"
25
- }
26
- );
27
-
28
- if (!response.ok) {
29
- const errorData = await response.json().catch(() => ({}));
30
- throw new Error(errorData.error || `Failed to fetch tables: ${response.statusText}`);
31
- }
32
-
33
- const data = await response.json();
34
- const tables: TableSummary[] = data.data || [];
35
-
36
- return <SqliteAdminClient initialTables={tables} />
37
- } catch (error) {
38
- const message =
39
- error instanceof Error ? error.message : "Failed to initialise SQLite admin UI."
40
-
41
- return (
42
- <section className="mx-auto flex max-w-4xl flex-col gap-4 p-6">
43
- <h1 className="text-2xl font-semibold text-slate-900">SQLite Admin</h1>
44
- <p className="rounded-md border border-red-200 bg-red-50 p-4 text-sm text-red-700">
45
- {message}
46
- </p>
47
- </section>
48
- )
49
- }
50
- }
51
-