refactor: standardize import quotes and improve cookie management in auth storage

This commit is contained in:
Estifo77
2026-07-22 14:46:38 +03:00
parent a76549b018
commit 7191bc6791
3 changed files with 109 additions and 73 deletions

View File

@@ -1,35 +1,45 @@
import Cookies from 'js-cookie';
const COOKIE_EXPIRES_DAYS = 7; // ponytail: cookie lifetime knob; JWT expiry + refresh govern real auth
import Cookies from "js-cookie";
const rememberMe = localStorage.getItem("rememberMe") === "true";
const COOKIE_EXPIRES_DAYS = rememberMe ? 15 : 1;
interface Backend {
get(k: string): string | null;
set(k: string, v: string): void;
remove(k: string): void;
}
const localBackend: Backend = {
const localStore: Backend = {
get: (k) => localStorage.getItem(k),
set: (k, v) => localStorage.setItem(k, v),
remove: (k) => localStorage.removeItem(k),
};
const cookieBackend: Backend = {
const cookieStore: Backend = {
get: (k) => Cookies.get(k) ?? null,
// ponytail: 4KB/cookie cap — auth-user/current-profile JSON must stay under it
set: (k, v) =>
Cookies.set(k, v, { path: '/', secure: true, sameSite: 'strict', expires: COOKIE_EXPIRES_DAYS }),
remove: (k) => Cookies.remove(k, { path: '/' }),
Cookies.set(k, v, {
path: "/",
secure: true,
sameSite: "strict",
expires: COOKIE_EXPIRES_DAYS,
}),
remove: (k) => Cookies.remove(k, { path: "/" }),
};
const AUTH_KEY_NAMES = ['auth-token', 'refresh-token', 'auth-user', 'profile-id', 'current-profile'];
const AUTH_KEY_NAMES = [
"auth-token",
"refresh-token",
"auth-user",
"profile-id",
"current-profile",
];
let _prefix = 'ema-auth';
let backend: Backend = localBackend;
let _prefix = "ema-auth";
let backend: Backend = localStore;
export function configureAuthStorage(prefix: string, useCookies = false) {
_prefix = prefix;
backend = useCookies ? cookieBackend : localBackend;
backend = useCookies ? cookieStore : localStore;
if (useCookies) {
// one-time cleanup: drop pre-migration localStorage leftovers so tokens live in cookies only
AUTH_KEY_NAMES.forEach((k) => localStorage.removeItem(`${prefix}-${k}`));
@@ -41,41 +51,40 @@ function key(k: string) {
}
export const authStorage = {
getToken: () => backend.get(key('auth-token')) ?? undefined,
setToken: (token: string) => backend.set(key('auth-token'), token),
getRefreshToken: () => backend.get(key('refresh-token')) ?? undefined,
setRefreshToken: (t: string) => backend.set(key('refresh-token'), t),
getToken: () => backend.get(key("auth-token")) ?? undefined,
setToken: (token: string) => backend.set(key("auth-token"), token),
getRefreshToken: () => backend.get(key("refresh-token")) ?? undefined,
setRefreshToken: (t: string) => backend.set(key("refresh-token"), t),
getUser: <T = unknown>(): T | null => {
try {
return JSON.parse(backend.get(key('auth-user')) ?? 'null') as T | null;
return JSON.parse(backend.get(key("auth-user")) ?? "null") as T | null;
} catch {
return null;
}
},
setUser: <T>(u: T) => backend.set(key('auth-user'), JSON.stringify(u)),
getProfileId: () => backend.get(key('profile-id')) ?? undefined,
setProfileId: (id: string) => backend.set(key('profile-id'), id),
setUser: <T>(u: T) => backend.set(key("auth-user"), JSON.stringify(u)),
getProfileId: () => backend.get(key("profile-id")) ?? undefined,
setProfileId: (id: string) => backend.set(key("profile-id"), id),
getProfile: <T = unknown>(): T | null => {
try {
return JSON.parse(backend.get(key('current-profile')) ?? 'null') as T | null;
return JSON.parse(
backend.get(key("current-profile")) ?? "null",
) as T | null;
} catch {
return null;
}
},
setProfile: <T>(p: T) => backend.set(key('current-profile'), JSON.stringify(p)),
removeProfile: () => backend.remove(key('current-profile')),
setProfile: <T>(p: T) =>
backend.set(key("current-profile"), JSON.stringify(p)),
removeProfile: () => backend.remove(key("current-profile")),
clear: () => {
[key('auth-token'), key('refresh-token'), key('auth-user'), key('profile-id'), key('current-profile')].forEach((k) =>
backend.remove(k),
);
Cookies.remove('auth-token', { path: '/' });
[
key("auth-token"),
key("refresh-token"),
key("auth-user"),
key("profile-id"),
key("current-profile"),
].forEach((k) => backend.remove(k));
Cookies.remove("auth-token", { path: "/" });
},
};
export const clearAllCookies = () => {
const cookies = Cookies.get();
Object.keys(cookies).forEach((name) => {
Cookies.remove(name);
Cookies.remove(name, { path: '/' });
});
};