diff --git a/apps/web/package.json b/apps/web/package.json index 3259232..bcef35a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -51,7 +51,6 @@ "embla-carousel-react": "^8.6.0", "i18next": "^25.5.3", "input-otp": "^1.4.2", - "js-cookie": "^3.0.5", "lucide-react": "^0.544.0", "next-themes": "^0.4.6", "nuqs": "^2.7.0", @@ -76,7 +75,6 @@ "@tailwindcss/vite": "^4.1.14", "@tanstack/react-router-devtools": "^1.132.33", "@tanstack/router-plugin": "^1.132.33", - "@types/js-cookie": "^3.0.6", "@types/node": "^24.6.2", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", diff --git a/apps/web/src/lib/auth-storage.ts b/apps/web/src/lib/auth-storage.ts index 8aaf4ce..6a1fad2 100644 --- a/apps/web/src/lib/auth-storage.ts +++ b/apps/web/src/lib/auth-storage.ts @@ -1,4 +1,3 @@ -import Cookies from 'js-cookie'; import { UserProfile } from '@/types'; // Auth storage keys - centralized constants @@ -8,60 +7,44 @@ export const AUTH_KEYS = { USER: 'user', } as const; -// Cookie options -const COOKIE_OPTIONS: Cookies.CookieAttributes = { - path: '/', - sameSite: 'strict', - secure: import.meta.env.PROD, // Only secure in production -}; - -const ACCESS_TOKEN_EXPIRY = 7; // 7 days -const REFRESH_TOKEN_EXPIRY = 30; // 30 days - /** - * Token storage utilities using cookies + * Token storage utilities using localStorage */ export const tokenStorage = { // Get access token getAccessToken: (): string | null => { - return Cookies.get(AUTH_KEYS.ACCESS_TOKEN) || null; + return localStorage.getItem(AUTH_KEYS.ACCESS_TOKEN); }, // Set access token setAccessToken: (token: string): void => { - Cookies.set(AUTH_KEYS.ACCESS_TOKEN, token, { - ...COOKIE_OPTIONS, - expires: ACCESS_TOKEN_EXPIRY, - }); + localStorage.setItem(AUTH_KEYS.ACCESS_TOKEN, token); }, // Remove access token removeAccessToken: (): void => { - Cookies.remove(AUTH_KEYS.ACCESS_TOKEN, { path: '/' }); + localStorage.removeItem(AUTH_KEYS.ACCESS_TOKEN); }, // Get refresh token getRefreshToken: (): string | null => { - return Cookies.get(AUTH_KEYS.REFRESH_TOKEN) || null; + return localStorage.getItem(AUTH_KEYS.REFRESH_TOKEN); }, // Set refresh token setRefreshToken: (token: string): void => { - Cookies.set(AUTH_KEYS.REFRESH_TOKEN, token, { - ...COOKIE_OPTIONS, - expires: REFRESH_TOKEN_EXPIRY, - }); + localStorage.setItem(AUTH_KEYS.REFRESH_TOKEN, token); }, // Remove refresh token removeRefreshToken: (): void => { - Cookies.remove(AUTH_KEYS.REFRESH_TOKEN, { path: '/' }); + localStorage.removeItem(AUTH_KEYS.REFRESH_TOKEN); }, // Get user profile getUser: (): UserProfile | null => { try { - const userStr = Cookies.get(AUTH_KEYS.USER); + const userStr = localStorage.getItem(AUTH_KEYS.USER); return userStr ? JSON.parse(userStr) : null; } catch { return null; @@ -70,15 +53,12 @@ export const tokenStorage = { // Set user profile setUser: (user: UserProfile): void => { - Cookies.set(AUTH_KEYS.USER, JSON.stringify(user), { - ...COOKIE_OPTIONS, - expires: ACCESS_TOKEN_EXPIRY, - }); + localStorage.setItem(AUTH_KEYS.USER, JSON.stringify(user)); }, // Remove user profile removeUser: (): void => { - Cookies.remove(AUTH_KEYS.USER, { path: '/' }); + localStorage.removeItem(AUTH_KEYS.USER); }, // Set all auth data diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6b0934..1c94fbb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -241,9 +241,6 @@ importers: input-otp: specifier: ^1.4.2 version: 1.4.2(react-dom@19.2.0)(react@19.2.0) - js-cookie: - specifier: ^3.0.5 - version: 3.0.5 lucide-react: specifier: ^0.544.0 version: 0.544.0(react@19.2.0) @@ -311,9 +308,6 @@ importers: '@tanstack/router-plugin': specifier: ^1.132.33 version: 1.132.33(@tanstack/react-router@1.132.33)(vite@7.1.9) - '@types/js-cookie': - specifier: ^3.0.6 - version: 3.0.6 '@types/node': specifier: ^24.6.2 version: 24.6.2 @@ -4115,10 +4109,6 @@ packages: resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} dev: false - /@types/js-cookie@3.0.6: - resolution: {integrity: sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==} - dev: true - /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true @@ -6224,11 +6214,6 @@ packages: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} dev: false - /js-cookie@3.0.5: - resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} - engines: {node: '>=14'} - dev: false - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}