diff --git a/frontend/src/lib/config/logger.ts b/frontend/src/lib/config/logger.ts new file mode 100644 index 0000000..f0fe656 --- /dev/null +++ b/frontend/src/lib/config/logger.ts @@ -0,0 +1,27 @@ +// So far let's keep it simple and log to console + +/* eslint-disable @typescript-eslint/no-explicit-any */ + +interface Logger { + debug(...args: any[]): void; + info(...args: any[]): void; + warn(...args: any[]): void; + error(...args: any[]): void; +} + +class ConsoleLogger implements Logger { + debug(...args: any[]): void { + console.debug(...args); + } + info(...args: any[]): void { + console.info(...args); + } + warn(...args: any[]): void { + console.warn(...args); + } + error(...args: any[]): void { + console.error(...args); + } +} + +export const logger: Logger = new ConsoleLogger(); diff --git a/frontend/src/routes/user/login/LoginForm.svelte b/frontend/src/routes/user/login/LoginForm.svelte index 025bca3..ff03d96 100644 --- a/frontend/src/routes/user/login/LoginForm.svelte +++ b/frontend/src/routes/user/login/LoginForm.svelte @@ -13,6 +13,7 @@ import { cfg } from '$lib/config/config'; import { userStore } from '$lib/stores'; import type { UserWithTokenResponse } from '$lib/schemas/types'; + import { logger } from '$lib/config/logger'; let { goto2fa } = $props(); @@ -47,6 +48,7 @@ } toast.error('Login failed, please try again later.'); + logger.error('Login error:', error); } finally { form.data.password = ''; } diff --git a/frontend/src/routes/user/login/TwoFaForm.svelte b/frontend/src/routes/user/login/TwoFaForm.svelte index 330109f..fcdac71 100644 --- a/frontend/src/routes/user/login/TwoFaForm.svelte +++ b/frontend/src/routes/user/login/TwoFaForm.svelte @@ -11,6 +11,7 @@ import { Input } from '$lib/components/ui/input'; import { Button } from '$lib/components/ui/button'; import { Spinner } from '$lib/components/ui/spinner'; + import { logger } from '$lib/config/logger'; const { sessionToken } = $props(); @@ -42,6 +43,7 @@ } toast.error('Login failed, please try again later.'); + logger.error('2FA Login error:', error); } } } diff --git a/frontend/src/routes/user/oauth-callback-google/+page.svelte b/frontend/src/routes/user/oauth-callback-google/+page.svelte index 32428a7..d081d8f 100644 --- a/frontend/src/routes/user/oauth-callback-google/+page.svelte +++ b/frontend/src/routes/user/oauth-callback-google/+page.svelte @@ -5,6 +5,7 @@ import { userStore } from '$lib/stores'; import { getUserProfile } from '$lib/service/authApiService'; import { toast } from 'svelte-sonner'; + import { logger } from '$lib/config/logger'; onMount(async () => { const token = page.url.searchParams.get('token'); @@ -17,13 +18,15 @@ userStore.login({ ...user, token }); toast.success('Successfully logged in with Google OAuth!'); goto('/', { replaceState: true }); - } catch { + } catch (error) { toast.error('Failed to log in with Google OAuth, please try again.'); + logger.error('OAuth login error:', error); userStore.logout(); goto('/user/login', { replaceState: true }); } } else { toast.error('Failed to log in with Google OAuth, please try again.'); + logger.error('OAuth callback missing token parameter'); goto('/user/login', { replaceState: true }); } }); diff --git a/frontend/src/routes/user/profile/Friends.svelte b/frontend/src/routes/user/profile/Friends.svelte index c5bfece..1b4919e 100644 --- a/frontend/src/routes/user/profile/Friends.svelte +++ b/frontend/src/routes/user/profile/Friends.svelte @@ -14,6 +14,7 @@ import { defaults, setError, superForm } from 'sveltekit-superforms'; import { zod4 } from 'sveltekit-superforms/adapters'; import { userStore } from '$lib/stores'; + import { logger } from '$lib/config/logger'; let friends: GetFriendsResponse = []; let users: UsersResponse = []; @@ -21,7 +22,8 @@ onMount(async () => { try { [users, friends] = await Promise.all([getAllUsers(), getFriends()]); - } catch { + } catch (error) { + logger.error('Failed to load friends list:', error); toast.error('Failed to load friends list'); } }); @@ -49,12 +51,12 @@ friends = await getFriends(); } catch (error) { - console.error(error); if (error instanceof AuthError && (error.status === 400 || error.status === 404)) { setError(form, 'username', 'Invalid username'); return; } + logger.error('Failed to add friend:', error); toast.error('Failed to add friend, please try again later.'); } } diff --git a/frontend/src/routes/user/profile/ProfileTitle.svelte b/frontend/src/routes/user/profile/ProfileTitle.svelte index 79f65f0..5dc50e1 100644 --- a/frontend/src/routes/user/profile/ProfileTitle.svelte +++ b/frontend/src/routes/user/profile/ProfileTitle.svelte @@ -16,6 +16,7 @@ import { Spinner } from '$lib/components/ui/spinner'; import type { UpdateUserRequest } from '$lib/schemas/types'; import { fly } from 'svelte/transition'; + import { logger } from '$lib/config/logger'; let editing = false; @@ -51,6 +52,7 @@ return; } + logger.error('Avatar update failed:', error); toast.error('Avatar update failed, please try again later.'); } } diff --git a/frontend/src/routes/user/register/RegisterForm.svelte b/frontend/src/routes/user/register/RegisterForm.svelte index e95ceaf..55807ca 100644 --- a/frontend/src/routes/user/register/RegisterForm.svelte +++ b/frontend/src/routes/user/register/RegisterForm.svelte @@ -37,6 +37,7 @@ return; } + console.error('Registration error:', error); toast.error('Registration failed, please try again later.'); } finally { form.data.password = ''; diff --git a/frontend/src/routes/user/settings/ChangePasswordForm.svelte b/frontend/src/routes/user/settings/ChangePasswordForm.svelte index 2a69284..daa6c86 100644 --- a/frontend/src/routes/user/settings/ChangePasswordForm.svelte +++ b/frontend/src/routes/user/settings/ChangePasswordForm.svelte @@ -11,6 +11,7 @@ import { Input } from '$lib/components/ui/input'; import { Button } from '$lib/components/ui/button'; import { Spinner } from '$lib/components/ui/spinner'; + import { logger } from '$lib/config/logger'; const { form, constraints, errors, enhance, submitting } = superForm( defaults(zod4(UpdateUserPasswordFormSchema)), @@ -25,7 +26,6 @@ try { const user = await updatePassword(payload); - console.log(user); toast.success('Password updated successfully! Redirecting to home page...'); userStore.login(user); @@ -34,12 +34,12 @@ goto('/'); }, 0); } catch (error) { - console.error(error); if (error instanceof AuthError && error.status === 401) { setError(form, 'oldPassword', 'Invalid password'); return; } + logger.error('Password update failed:', error); toast.error('Login failed, please try again later.'); } finally { form.data.oldPassword = ''; diff --git a/frontend/src/routes/user/settings/DeleteAccount.svelte b/frontend/src/routes/user/settings/DeleteAccount.svelte index 6f49a0b..3f86e07 100644 --- a/frontend/src/routes/user/settings/DeleteAccount.svelte +++ b/frontend/src/routes/user/settings/DeleteAccount.svelte @@ -6,6 +6,7 @@ import { buttonVariants } from '$lib/components/ui/button/button.svelte'; import * as AlertDialog from '$lib/components/ui/alert-dialog/index.js'; import { Spinner } from '$lib/components/ui/spinner'; + import { logger } from '$lib/config/logger'; let deleting = false; @@ -17,7 +18,8 @@ toast.success('Account deleted successfully, navigating to home page...'); goto('/'); - } catch { + } catch (error) { + logger.error('Failed to delete account:', error); toast.error('Failed to delete account. Please try again.'); } finally { deleting = false; diff --git a/frontend/src/routes/user/settings/DisableTwoFa.svelte b/frontend/src/routes/user/settings/DisableTwoFa.svelte index 7a25e93..9272e68 100644 --- a/frontend/src/routes/user/settings/DisableTwoFa.svelte +++ b/frontend/src/routes/user/settings/DisableTwoFa.svelte @@ -10,6 +10,7 @@ import { Input } from '$lib/components/ui/input'; import { Button } from '$lib/components/ui/button'; import { Spinner } from '$lib/components/ui/spinner'; + import { logger } from '$lib/config/logger'; const { closeShowTwoFaForm } = $props(); @@ -34,6 +35,7 @@ return; } + logger.error('Disabling 2FA error:', error); toast.error('Disabling 2FA failed, please try again later.'); } finally { form.data.password = ''; diff --git a/frontend/src/routes/user/settings/Logout.svelte b/frontend/src/routes/user/settings/Logout.svelte index e12d520..bafec1a 100644 --- a/frontend/src/routes/user/settings/Logout.svelte +++ b/frontend/src/routes/user/settings/Logout.svelte @@ -2,6 +2,7 @@ import { goto } from '$app/navigation'; import { Button } from '$lib/components/ui/button'; import Spinner from '$lib/components/ui/spinner/spinner.svelte'; + import { logger } from '$lib/config/logger'; import { logoutUser } from '$lib/service/authApiService'; import { userStore } from '$lib/stores'; import { toast } from 'svelte-sonner'; @@ -14,10 +15,11 @@ await logoutUser(); toast.success('Logged out successfully, redirecting to home page...'); - } catch { + } catch (error) { toast.warning( 'Failed to log out on server, try to log out locally, redirecting to home page...' ); + logger.error('Logout error:', error); } finally { userStore.logout(); logoutInProgress = false; diff --git a/frontend/src/routes/user/settings/TwoFaConfirmForm.svelte b/frontend/src/routes/user/settings/TwoFaConfirmForm.svelte index 2007efc..5d15f93 100644 --- a/frontend/src/routes/user/settings/TwoFaConfirmForm.svelte +++ b/frontend/src/routes/user/settings/TwoFaConfirmForm.svelte @@ -13,6 +13,7 @@ import { Input } from '$lib/components/ui/input'; import { Button } from '$lib/components/ui/button'; import { Spinner } from '$lib/components/ui/spinner'; + import { logger } from '$lib/config/logger'; const { twoFaSetupData, closeShowTwoFaForm } = $props(); @@ -50,6 +51,7 @@ return; } + logger.error('Enabling 2FA error:', error); toast.error('Enabling 2FA failed, please try again later.'); } finally { form.data.twoFaCode = ''; diff --git a/frontend/src/routes/user/settings/TwoFaSetup.svelte b/frontend/src/routes/user/settings/TwoFaSetup.svelte index 327d302..295d41d 100644 --- a/frontend/src/routes/user/settings/TwoFaSetup.svelte +++ b/frontend/src/routes/user/settings/TwoFaSetup.svelte @@ -7,6 +7,7 @@ import type { TwoFaSetupResponse } from '$lib/schemas/types'; import TwoFaConfirmForm from './TwoFaConfirmForm.svelte'; import { fly } from 'svelte/transition'; + import { logger } from '$lib/config/logger'; $: twoFaEnabled = $userStore.user?.twoFa ?? false; let showTwoFaForm = false; @@ -15,7 +16,8 @@ const twoFaHandler = async () => { try { twoFaSetupData = await startTwoFaSetup(); - } catch { + } catch (error) { + logger.error('Failed to start 2FA setup:', error); toast.error('Failed to start 2FA setup, please try again later.'); } };