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
@@ -0,0 +1,184 @@
1
+ // file_description: route and page generation logic for hazo_auth
2
+ // This module creates API route files and page files in consuming projects
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+ // section: constants
6
+ const ROUTES = [
7
+ { name: "login", path: "api/hazo_auth/login", method: "POST", export_name: "loginPOST" },
8
+ { name: "register", path: "api/hazo_auth/register", method: "POST", export_name: "registerPOST" },
9
+ { name: "logout", path: "api/hazo_auth/logout", method: "POST", export_name: "logoutPOST" },
10
+ { name: "me", path: "api/hazo_auth/me", method: "GET", export_name: "meGET" },
11
+ { name: "forgot_password", path: "api/hazo_auth/forgot_password", method: "POST", export_name: "forgotPasswordPOST" },
12
+ { name: "reset_password", path: "api/hazo_auth/reset_password", method: "POST", export_name: "resetPasswordPOST" },
13
+ { name: "verify_email", path: "api/hazo_auth/verify_email", method: "GET", export_name: "verifyEmailGET" },
14
+ { name: "resend_verification", path: "api/hazo_auth/resend_verification", method: "POST", export_name: "resendVerificationPOST" },
15
+ { name: "update_user", path: "api/hazo_auth/update_user", method: "PATCH", export_name: "updateUserPATCH" },
16
+ { name: "change_password", path: "api/hazo_auth/change_password", method: "POST", export_name: "changePasswordPOST" },
17
+ { name: "upload_profile_picture", path: "api/hazo_auth/upload_profile_picture", method: "POST", export_name: "uploadProfilePicturePOST" },
18
+ { name: "remove_profile_picture", path: "api/hazo_auth/remove_profile_picture", method: "DELETE", export_name: "removeProfilePictureDELETE" },
19
+ { name: "library_photos", path: "api/hazo_auth/library_photos", method: "GET", export_name: "libraryPhotosGET" },
20
+ { name: "library_photo", path: "api/hazo_auth/library_photo/[category]/[filename]", method: "GET", export_name: "libraryPhotoGET" },
21
+ { name: "get_auth", path: "api/hazo_auth/get_auth", method: "POST", export_name: "getAuthPOST" },
22
+ { name: "validate_reset_token", path: "api/hazo_auth/validate_reset_token", method: "GET", export_name: "validateResetTokenGET" },
23
+ { name: "profile_picture_filename", path: "api/hazo_auth/profile_picture/[filename]", method: "GET", export_name: "profilePictureFilenameGET" },
24
+ { name: "invalidate_cache", path: "api/hazo_auth/invalidate_cache", method: "POST", export_name: "invalidateCachePOST" },
25
+ ];
26
+ const PAGES = [
27
+ { name: "login", path: "hazo_auth/login", component_name: "LoginPage", import_path: "hazo_auth/pages/login" },
28
+ { name: "register", path: "hazo_auth/register", component_name: "RegisterPage", import_path: "hazo_auth/pages/register" },
29
+ { name: "forgot_password", path: "hazo_auth/forgot_password", component_name: "ForgotPasswordPage", import_path: "hazo_auth/pages/forgot_password" },
30
+ { name: "reset_password", path: "hazo_auth/reset_password", component_name: "ResetPasswordPage", import_path: "hazo_auth/pages/reset_password" },
31
+ { name: "verify_email", path: "hazo_auth/verify_email", component_name: "VerifyEmailPage", import_path: "hazo_auth/pages/verify_email" },
32
+ { name: "my_settings", path: "hazo_auth/my_settings", component_name: "MySettingsPage", import_path: "hazo_auth/pages/my_settings" },
33
+ ];
34
+ // Note: The import_path uses "hazo_auth/pages/*" which maps to dist/page_components/* in package.json exports
35
+ // section: helpers
36
+ function get_project_root() {
37
+ return process.cwd();
38
+ }
39
+ function find_app_dir(project_root) {
40
+ const possible_dirs = [
41
+ path.join(project_root, "app"),
42
+ path.join(project_root, "src", "app"),
43
+ ];
44
+ for (const dir of possible_dirs) {
45
+ if (fs.existsSync(dir)) {
46
+ return dir;
47
+ }
48
+ }
49
+ return null;
50
+ }
51
+ function ensure_dir(dir_path) {
52
+ if (!fs.existsSync(dir_path)) {
53
+ fs.mkdirSync(dir_path, { recursive: true });
54
+ }
55
+ }
56
+ function file_exists(filepath) {
57
+ return fs.existsSync(filepath);
58
+ }
59
+ function generate_route_content(route) {
60
+ return `// Generated by hazo_auth - do not edit manually
61
+ // Route: /${route.path}
62
+ // Method: ${route.method}
63
+ export { ${route.export_name} as ${route.method} } from "hazo_auth/server/routes";
64
+ `;
65
+ }
66
+ function generate_page_content(page) {
67
+ return `// Generated by hazo_auth - do not edit manually
68
+ // Page: /${page.path}
69
+ import { ${page.component_name} } from "${page.import_path}";
70
+
71
+ export default ${page.component_name};
72
+ `;
73
+ }
74
+ // section: api_route_generation
75
+ function generate_api_routes(app_dir, project_root) {
76
+ let created = 0;
77
+ let skipped = 0;
78
+ let errors = 0;
79
+ console.log("\x1b[1m📡 Generating API routes...\x1b[0m\n");
80
+ for (const route of ROUTES) {
81
+ const route_dir = path.join(app_dir, route.path);
82
+ const route_file = path.join(route_dir, "route.ts");
83
+ if (file_exists(route_file)) {
84
+ console.log(`\x1b[33m[SKIP]\x1b[0m ${route.path}/route.ts (already exists)`);
85
+ skipped++;
86
+ continue;
87
+ }
88
+ try {
89
+ ensure_dir(route_dir);
90
+ const content = generate_route_content(route);
91
+ fs.writeFileSync(route_file, content, "utf-8");
92
+ console.log(`\x1b[32m[CREATE]\x1b[0m ${route.path}/route.ts`);
93
+ created++;
94
+ }
95
+ catch (err) {
96
+ console.log(`\x1b[31m[ERROR]\x1b[0m ${route.path}/route.ts - ${err instanceof Error ? err.message : "Unknown error"}`);
97
+ errors++;
98
+ }
99
+ }
100
+ return { created, skipped, errors };
101
+ }
102
+ // section: page_generation
103
+ function generate_page_routes(app_dir, project_root) {
104
+ let created = 0;
105
+ let skipped = 0;
106
+ let errors = 0;
107
+ console.log("\n\x1b[1m📄 Generating page routes...\x1b[0m\n");
108
+ for (const page of PAGES) {
109
+ const page_dir = path.join(app_dir, page.path);
110
+ const page_file = path.join(page_dir, "page.tsx");
111
+ if (file_exists(page_file)) {
112
+ console.log(`\x1b[33m[SKIP]\x1b[0m ${page.path}/page.tsx (already exists)`);
113
+ skipped++;
114
+ continue;
115
+ }
116
+ try {
117
+ ensure_dir(page_dir);
118
+ const content = generate_page_content(page);
119
+ fs.writeFileSync(page_file, content, "utf-8");
120
+ console.log(`\x1b[32m[CREATE]\x1b[0m ${page.path}/page.tsx`);
121
+ created++;
122
+ }
123
+ catch (err) {
124
+ console.log(`\x1b[31m[ERROR]\x1b[0m ${page.path}/page.tsx - ${err instanceof Error ? err.message : "Unknown error"}`);
125
+ errors++;
126
+ }
127
+ }
128
+ return { created, skipped, errors };
129
+ }
130
+ // section: main
131
+ export function generate_routes(options = {}) {
132
+ const { dir, pages = false, all = false } = options;
133
+ const project_root = get_project_root();
134
+ const include_pages = pages || all;
135
+ console.log("\n\x1b[1m🐸 hazo_auth Route Generator\x1b[0m");
136
+ console.log("=".repeat(50));
137
+ console.log(`Project root: ${project_root}`);
138
+ console.log(`Mode: ${include_pages ? "API routes + Pages" : "API routes only"}\n`);
139
+ const app_dir = dir
140
+ ? path.join(project_root, dir)
141
+ : find_app_dir(project_root);
142
+ if (!app_dir) {
143
+ console.error("\x1b[31mError: Could not find app directory.\x1b[0m");
144
+ console.log("Try specifying it with: npx hazo_auth generate-routes --dir=src/app");
145
+ process.exit(1);
146
+ }
147
+ if (!fs.existsSync(app_dir)) {
148
+ console.error(`\x1b[31mError: App directory not found: ${app_dir}\x1b[0m`);
149
+ process.exit(1);
150
+ }
151
+ console.log(`App directory: ${app_dir.replace(project_root, ".")}\n`);
152
+ // Generate API routes
153
+ const api_result = generate_api_routes(app_dir, project_root);
154
+ // Generate pages if requested
155
+ let page_result = { created: 0, skipped: 0, errors: 0 };
156
+ if (include_pages) {
157
+ page_result = generate_page_routes(app_dir, project_root);
158
+ }
159
+ // Summary
160
+ const total_created = api_result.created + page_result.created;
161
+ const total_skipped = api_result.skipped + page_result.skipped;
162
+ const total_errors = api_result.errors + page_result.errors;
163
+ console.log("\n" + "=".repeat(50));
164
+ console.log("\x1b[1mSummary:\x1b[0m");
165
+ console.log(` \x1b[32m✓ Created: ${total_created}\x1b[0m (${api_result.created} routes, ${page_result.created} pages)`);
166
+ console.log(` \x1b[33m⊘ Skipped: ${total_skipped}\x1b[0m`);
167
+ if (total_errors > 0) {
168
+ console.log(` \x1b[31m✗ Errors: ${total_errors}\x1b[0m`);
169
+ }
170
+ console.log();
171
+ if (total_created > 0) {
172
+ console.log("\x1b[32m🦊 Generation complete!\x1b[0m");
173
+ console.log("\nNext steps:");
174
+ console.log(" 1. Run `npm run dev` to start your development server");
175
+ console.log(" 2. Test API: `curl http://localhost:3000/api/hazo_auth/me`");
176
+ if (include_pages) {
177
+ console.log(" 3. Visit http://localhost:3000/hazo_auth/login to test pages");
178
+ }
179
+ console.log();
180
+ }
181
+ else if (total_skipped === ROUTES.length + (include_pages ? PAGES.length : 0)) {
182
+ console.log("\x1b[33m🦊 All files already exist. No changes made.\x1b[0m\n");
183
+ }
184
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env node
2
+ // file_description: main CLI entry point for hazo_auth commands
3
+ // This file is the bin entry for the hazo_auth package
4
+ // section: imports
5
+ import { run_validation } from "./validate.js";
6
+ import { generate_routes } from "./generate.js";
7
+ import { handle_init } from "./init.js";
8
+ // section: constants
9
+ const VERSION = "1.6.0";
10
+ const HELP_TEXT = `
11
+ \x1b[1m🐸 hazo_auth CLI v${VERSION}\x1b[0m
12
+
13
+ Usage: hazo_auth <command> [options]
14
+
15
+ Commands:
16
+ init Initialize hazo_auth in your project (creates directories, copies config)
17
+ validate Check your hazo_auth setup and configuration
18
+ generate-routes Generate API route files and pages in your project
19
+
20
+ Options:
21
+ --help, -h Show this help message
22
+ --version, -v Show version number
23
+
24
+ Examples:
25
+ npx hazo_auth init
26
+ npx hazo_auth validate
27
+ npx hazo_auth generate-routes
28
+ npx hazo_auth generate-routes --pages
29
+ npx hazo_auth generate-routes --all --dir=src/app
30
+
31
+ Documentation:
32
+ https://github.com/your-repo/hazo_auth/blob/main/SETUP_CHECKLIST.md
33
+
34
+ 🦊
35
+ `;
36
+ // section: helpers
37
+ function parse_args() {
38
+ const argv = process.argv.slice(2);
39
+ const result = { args: [] };
40
+ for (const arg of argv) {
41
+ if (arg === "--help" || arg === "-h") {
42
+ result.help = true;
43
+ }
44
+ else if (arg === "--version" || arg === "-v") {
45
+ result.version = true;
46
+ }
47
+ else if (!arg.startsWith("-") && !result.command) {
48
+ result.command = arg;
49
+ }
50
+ else {
51
+ result.args.push(arg);
52
+ }
53
+ }
54
+ return result;
55
+ }
56
+ function show_help() {
57
+ console.log(HELP_TEXT);
58
+ }
59
+ function show_version() {
60
+ console.log(`hazo_auth v${VERSION}`);
61
+ }
62
+ // section: command_handlers
63
+ async function handle_validate() {
64
+ const summary = run_validation();
65
+ process.exit(summary.failed > 0 ? 1 : 0);
66
+ }
67
+ function handle_generate_routes(args) {
68
+ const options = {};
69
+ for (const arg of args) {
70
+ if (arg.startsWith("--dir=")) {
71
+ options.dir = arg.replace("--dir=", "");
72
+ }
73
+ else if (arg === "--pages") {
74
+ options.pages = true;
75
+ }
76
+ else if (arg === "--all") {
77
+ options.all = true;
78
+ }
79
+ else if (arg === "--help" || arg === "-h") {
80
+ console.log(`
81
+ hazo_auth generate-routes
82
+
83
+ Generate API route files and page files in your Next.js project.
84
+
85
+ Usage:
86
+ hazo_auth generate-routes [options]
87
+
88
+ Options:
89
+ --dir=<path> Specify the app directory (default: auto-detect)
90
+ --pages Generate page routes in addition to API routes
91
+ --all Generate everything (API routes + pages)
92
+ --help, -h Show this help message
93
+
94
+ Examples:
95
+ hazo_auth generate-routes # API routes only
96
+ hazo_auth generate-routes --pages # API routes + pages
97
+ hazo_auth generate-routes --all # Same as --pages
98
+ hazo_auth generate-routes --dir=src/app # Specify app directory
99
+ `);
100
+ return;
101
+ }
102
+ }
103
+ generate_routes(options);
104
+ }
105
+ // section: main
106
+ async function main() {
107
+ const { command, args, help, version } = parse_args();
108
+ if (version) {
109
+ show_version();
110
+ return;
111
+ }
112
+ // Show main help only if no command specified
113
+ if (!command) {
114
+ show_help();
115
+ return;
116
+ }
117
+ // If help is requested but command exists, pass help to command handler
118
+ // Commands can show their own help
119
+ if (help) {
120
+ args.push("--help");
121
+ }
122
+ switch (command) {
123
+ case "init":
124
+ if (help) {
125
+ console.log(`
126
+ hazo_auth init
127
+
128
+ Initialize hazo_auth in your project.
129
+
130
+ Actions:
131
+ - Creates public/profile_pictures/library/ directory
132
+ - Creates public/profile_pictures/uploads/ directory
133
+ - Creates data/ directory (for SQLite)
134
+ - Copies hazo_auth_config.ini and hazo_notify_config.ini
135
+ - Copies profile picture library images
136
+ - Creates .env.local.example template
137
+ `);
138
+ return;
139
+ }
140
+ handle_init();
141
+ break;
142
+ case "validate":
143
+ if (help) {
144
+ console.log(`
145
+ hazo_auth validate
146
+
147
+ Check your hazo_auth setup and configuration.
148
+
149
+ This command verifies:
150
+ - Config files exist and are readable
151
+ - Required config values are set
152
+ - Environment variables are configured
153
+ - Database connection works
154
+ - Required directories exist
155
+ `);
156
+ return;
157
+ }
158
+ await handle_validate();
159
+ break;
160
+ case "generate-routes":
161
+ handle_generate_routes(args);
162
+ break;
163
+ default:
164
+ console.error(`\x1b[31mUnknown command: ${command}\x1b[0m\n`);
165
+ console.log("Run 'hazo_auth --help' for usage information.");
166
+ process.exit(1);
167
+ }
168
+ }
169
+ // Run main
170
+ main().catch((error) => {
171
+ console.error("\x1b[31mError:\x1b[0m", error.message);
172
+ process.exit(1);
173
+ });
@@ -0,0 +1,2 @@
1
+ export declare function handle_init(): void;
2
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAqIA,wBAAgB,WAAW,IAAI,IAAI,CAkHlC"}
@@ -0,0 +1,201 @@
1
+ // file_description: init command for hazo_auth
2
+ // Creates directories and copies config files to consuming projects
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+ // section: constants
6
+ const REQUIRED_DIRECTORIES = [
7
+ "public/profile_pictures/library",
8
+ "public/profile_pictures/uploads",
9
+ "data",
10
+ ];
11
+ const CONFIG_FILES = [
12
+ { source: "hazo_auth_config.example.ini", target: "hazo_auth_config.ini" },
13
+ { source: "hazo_notify_config.example.ini", target: "hazo_notify_config.ini" },
14
+ ];
15
+ // section: helpers
16
+ function get_project_root() {
17
+ return process.cwd();
18
+ }
19
+ function get_package_root() {
20
+ // When running from node_modules, we need to find the hazo_auth package root
21
+ // When running in development, use the current directory
22
+ // Check if we're in node_modules
23
+ const parts = __dirname.split(path.sep);
24
+ const node_modules_index = parts.lastIndexOf("node_modules");
25
+ if (node_modules_index !== -1) {
26
+ // We're in node_modules/hazo_auth/dist/cli
27
+ return parts.slice(0, node_modules_index + 2).join(path.sep);
28
+ }
29
+ // Development mode - go up from src/cli or dist/cli
30
+ return path.resolve(__dirname, "..", "..");
31
+ }
32
+ function ensure_dir(dir_path) {
33
+ if (!fs.existsSync(dir_path)) {
34
+ fs.mkdirSync(dir_path, { recursive: true });
35
+ return true;
36
+ }
37
+ return false;
38
+ }
39
+ function copy_file_if_not_exists(source, target) {
40
+ if (fs.existsSync(target)) {
41
+ return "skipped";
42
+ }
43
+ if (!fs.existsSync(source)) {
44
+ return "error";
45
+ }
46
+ try {
47
+ fs.copyFileSync(source, target);
48
+ return "created";
49
+ }
50
+ catch (_a) {
51
+ return "error";
52
+ }
53
+ }
54
+ function copy_directory(source, target) {
55
+ let copied = 0;
56
+ if (!fs.existsSync(source)) {
57
+ return 0;
58
+ }
59
+ ensure_dir(target);
60
+ const items = fs.readdirSync(source);
61
+ for (const item of items) {
62
+ const source_path = path.join(source, item);
63
+ const target_path = path.join(target, item);
64
+ const stat = fs.statSync(source_path);
65
+ if (stat.isDirectory()) {
66
+ copied += copy_directory(source_path, target_path);
67
+ }
68
+ else if (!fs.existsSync(target_path)) {
69
+ fs.copyFileSync(source_path, target_path);
70
+ copied++;
71
+ }
72
+ }
73
+ return copied;
74
+ }
75
+ function create_gitkeep(dir_path) {
76
+ const gitkeep_path = path.join(dir_path, ".gitkeep");
77
+ if (!fs.existsSync(gitkeep_path)) {
78
+ const files = fs.readdirSync(dir_path);
79
+ if (files.length === 0) {
80
+ fs.writeFileSync(gitkeep_path, "# This file keeps the empty directory in git\n");
81
+ }
82
+ }
83
+ }
84
+ function create_env_template(project_root) {
85
+ const env_example_path = path.join(project_root, ".env.local.example");
86
+ if (fs.existsSync(env_example_path)) {
87
+ return false;
88
+ }
89
+ const content = `# hazo_auth environment variables
90
+ # Copy this file to .env.local and fill in the values
91
+
92
+ # Required for email functionality (email verification, password reset)
93
+ ZEPTOMAIL_API_KEY=your_zeptomail_api_key_here
94
+
95
+ # Optional: Database path (defaults to data/hazo_auth.sqlite)
96
+ # HAZO_AUTH_DB_PATH=./data/hazo_auth.sqlite
97
+ `;
98
+ fs.writeFileSync(env_example_path, content);
99
+ return true;
100
+ }
101
+ // section: main
102
+ export function handle_init() {
103
+ const project_root = get_project_root();
104
+ const package_root = get_package_root();
105
+ console.log("\n\x1b[1m🐸 hazo_auth Initialization\x1b[0m");
106
+ console.log("=".repeat(50));
107
+ console.log(`Project root: ${project_root}`);
108
+ console.log(`Package root: ${package_root}\n`);
109
+ const result = {
110
+ directories_created: [],
111
+ files_copied: [],
112
+ skipped: [],
113
+ errors: [],
114
+ };
115
+ // Step 1: Create directories
116
+ console.log("\x1b[1m📁 Creating directories...\x1b[0m\n");
117
+ for (const dir of REQUIRED_DIRECTORIES) {
118
+ const full_path = path.join(project_root, dir);
119
+ if (ensure_dir(full_path)) {
120
+ console.log(`\x1b[32m[CREATE]\x1b[0m ${dir}/`);
121
+ result.directories_created.push(dir);
122
+ }
123
+ else {
124
+ console.log(`\x1b[33m[EXISTS]\x1b[0m ${dir}/`);
125
+ result.skipped.push(dir);
126
+ }
127
+ }
128
+ // Step 2: Copy config files
129
+ console.log("\n\x1b[1m📄 Copying config files...\x1b[0m\n");
130
+ for (const config of CONFIG_FILES) {
131
+ const source_path = path.join(package_root, config.source);
132
+ const target_path = path.join(project_root, config.target);
133
+ const status = copy_file_if_not_exists(source_path, target_path);
134
+ if (status === "created") {
135
+ console.log(`\x1b[32m[CREATE]\x1b[0m ${config.target}`);
136
+ result.files_copied.push(config.target);
137
+ }
138
+ else if (status === "skipped") {
139
+ console.log(`\x1b[33m[EXISTS]\x1b[0m ${config.target}`);
140
+ result.skipped.push(config.target);
141
+ }
142
+ else {
143
+ console.log(`\x1b[31m[ERROR]\x1b[0m ${config.target} - source not found: ${source_path}`);
144
+ result.errors.push(config.target);
145
+ }
146
+ }
147
+ // Step 3: Copy profile picture library
148
+ console.log("\n\x1b[1m🖼️ Copying profile picture library...\x1b[0m\n");
149
+ const library_source = path.join(package_root, "public", "profile_pictures", "library");
150
+ const library_target = path.join(project_root, "public", "profile_pictures", "library");
151
+ if (fs.existsSync(library_source)) {
152
+ const copied_count = copy_directory(library_source, library_target);
153
+ if (copied_count > 0) {
154
+ console.log(`\x1b[32m[COPY]\x1b[0m ${copied_count} library images`);
155
+ result.files_copied.push(`${copied_count} library images`);
156
+ }
157
+ else {
158
+ console.log(`\x1b[33m[EXISTS]\x1b[0m Library images already present`);
159
+ result.skipped.push("library images");
160
+ }
161
+ }
162
+ else {
163
+ console.log(`\x1b[33m[SKIP]\x1b[0m Library not found at: ${library_source}`);
164
+ result.skipped.push("library images (source not found)");
165
+ }
166
+ // Step 4: Create .gitkeep files for empty directories
167
+ console.log("\n\x1b[1m📌 Creating .gitkeep files...\x1b[0m\n");
168
+ const empty_dirs = ["public/profile_pictures/uploads", "data"];
169
+ for (const dir of empty_dirs) {
170
+ const full_path = path.join(project_root, dir);
171
+ if (fs.existsSync(full_path)) {
172
+ create_gitkeep(full_path);
173
+ console.log(`\x1b[32m[CREATE]\x1b[0m ${dir}/.gitkeep`);
174
+ }
175
+ }
176
+ // Step 5: Create .env.local.example template
177
+ console.log("\n\x1b[1m🔑 Creating environment template...\x1b[0m\n");
178
+ if (create_env_template(project_root)) {
179
+ console.log(`\x1b[32m[CREATE]\x1b[0m .env.local.example`);
180
+ result.files_copied.push(".env.local.example");
181
+ }
182
+ else {
183
+ console.log(`\x1b[33m[EXISTS]\x1b[0m .env.local.example`);
184
+ result.skipped.push(".env.local.example");
185
+ }
186
+ // Summary
187
+ console.log("\n" + "=".repeat(50));
188
+ console.log("\x1b[1mSummary:\x1b[0m");
189
+ console.log(` \x1b[32m✓ Created:\x1b[0m ${result.directories_created.length} directories, ${result.files_copied.length} files`);
190
+ console.log(` \x1b[33m⊘ Skipped:\x1b[0m ${result.skipped.length} items`);
191
+ if (result.errors.length > 0) {
192
+ console.log(` \x1b[31m✗ Errors:\x1b[0m ${result.errors.length}`);
193
+ }
194
+ console.log("\n\x1b[32m🦊 Initialization complete!\x1b[0m");
195
+ console.log("\nNext steps:");
196
+ console.log(" 1. Edit \x1b[36mhazo_auth_config.ini\x1b[0m with your settings");
197
+ console.log(" 2. Copy \x1b[36m.env.local.example\x1b[0m to \x1b[36m.env.local\x1b[0m and add your API keys");
198
+ console.log(" 3. Run \x1b[36mnpx hazo_auth generate-routes --pages\x1b[0m to generate routes and pages");
199
+ console.log(" 4. Run \x1b[36mnpx hazo_auth validate\x1b[0m to check your setup");
200
+ console.log();
201
+ }
@@ -0,0 +1,15 @@
1
+ type CheckStatus = "pass" | "fail" | "warn";
2
+ type CheckResult = {
3
+ name: string;
4
+ status: CheckStatus;
5
+ message: string;
6
+ };
7
+ export type ValidationSummary = {
8
+ passed: number;
9
+ failed: number;
10
+ warnings: number;
11
+ results: CheckResult[];
12
+ };
13
+ export declare function run_validation(): ValidationSummary;
14
+ export {};
15
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AA4dF,wBAAgB,cAAc,IAAI,iBAAiB,CAqElD"}