// 本地存储封装 — token / 通用 KV // Logan.Li import { useUserStore } from '@/store'; export const STORAGE_KEYS = { token: 'token', theme: 'aiops-theme', user: 'user-storage', /** API 访问密钥明文(本机 localStorage,生成/重新生成后写入,吊销时清除)// Logan.Li */ apiAccessKey: 'aiops_api_access_key', } as const; export function getItem(key: string): string | null { if (typeof window === 'undefined') return null; try { return localStorage.getItem(key); } catch { return null; } } export function setItem(key: string, value: string): void { if (typeof window === 'undefined') return; try { localStorage.setItem(key, value); } catch { /* ignore quota errors */ } } export function removeItem(key: string): void { if (typeof window === 'undefined') return; try { localStorage.removeItem(key); } catch { /* ignore */ } } /** 读取 JWT — zustand 优先,localStorage 兜底 // Logan.Li */ export function getToken(): string { return useUserStore.getState().token || getItem(STORAGE_KEYS.token) || ''; } export function setToken(token: string): void { setItem(STORAGE_KEYS.token, token); useUserStore.getState().setToken(token); } export function clearToken(): void { removeItem(STORAGE_KEYS.token); useUserStore.getState().setToken(null); } /** 本机缓存的 API 密钥明文(用于 CI/CD curl 自动填入)// Logan.Li */ export function getSessionApiAccessKey(): string { const cached = getItem(STORAGE_KEYS.apiAccessKey); if (cached) return cached; // 迁移旧版 sessionStorage 缓存 // Logan.Li if (typeof window === 'undefined') return ''; try { const legacy = sessionStorage.getItem(STORAGE_KEYS.apiAccessKey); if (legacy) { setItem(STORAGE_KEYS.apiAccessKey, legacy); sessionStorage.removeItem(STORAGE_KEYS.apiAccessKey); return legacy; } } catch { /* ignore */ } return ''; } export function setSessionApiAccessKey(token: string): void { if (token) setItem(STORAGE_KEYS.apiAccessKey, token); else removeItem(STORAGE_KEYS.apiAccessKey); if (typeof window === 'undefined') return; try { sessionStorage.removeItem(STORAGE_KEYS.apiAccessKey); } catch { /* ignore */ } }