File size: 1,861 Bytes
9d2d895 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import { establishWmKeySession } from '@/services/wm-session';
export type BrowserSessionKeyName = 'wm-widget-key' | 'wm-pro-key';
function safeLocalStorageGet(name: BrowserSessionKeyName): string {
try { return localStorage.getItem(name) ?? ''; } catch { return ''; }
}
function safeLocalStorageRemove(name: BrowserSessionKeyName): void {
try { localStorage.removeItem(name); } catch { /* ignore */ }
}
function safeReadableCookieGet(name: BrowserSessionKeyName): string {
try {
const prefix = `${name}=`;
const match = document.cookie.split(';').map(c => c.trim()).find(c => c.startsWith(prefix));
return match ? decodeURIComponent(match.slice(prefix.length)).trim() : '';
} catch {
return '';
}
}
function clearLegacyReadableCookie(name: BrowserSessionKeyName): void {
try {
document.cookie = `${name}=; domain=.worldmonitor.app; path=/; max-age=0; SameSite=Lax; Secure`;
document.cookie = `${name}=; path=/; max-age=0; SameSite=Lax; Secure`;
} catch {
// ignore
}
}
export function readLegacySessionKey(name: BrowserSessionKeyName): string {
return safeLocalStorageGet(name).trim() || safeReadableCookieGet(name);
}
export function clearLegacyKeyStorage(name: BrowserSessionKeyName): void {
safeLocalStorageRemove(name);
clearLegacyReadableCookie(name);
}
export async function migrateLegacyKeysToHttpOnlySession(keys: {
widgetKey?: string;
proKey?: string;
}): Promise<boolean> {
const widgetKey = keys.widgetKey?.trim() ?? '';
const proKey = keys.proKey?.trim() ?? '';
if (!widgetKey && !proKey) return false;
const ok = await establishWmKeySession({
...(widgetKey ? { widgetKey } : {}),
...(proKey ? { proKey } : {}),
});
if (!ok) return false;
if (widgetKey) clearLegacyKeyStorage('wm-widget-key');
if (proKey) clearLegacyKeyStorage('wm-pro-key');
return true;
}
|