Files
pistation/apps/web-client/src/lib/session.ts
T
SirBlob 18384c0cbc Add web client
Join screen, room with screen and camera sharing, live annotation,
whiteboard, and the admin panel for kiosks, widgets and branding.
2026-08-09 17:09:16 -04:00

61 lines
1.4 KiB
TypeScript

import type { JoinResponse } from "@pistation/shared-types";
import { browser } from "$app/environment";
const SESSION_KEY = "pistation.session";
const ADMIN_KEY = "pistation.admin";
export type StoredSession = JoinResponse;
export function saveSession(session: StoredSession): void {
if (!browser) return;
sessionStorage.setItem(SESSION_KEY, JSON.stringify(session));
}
export function loadSession(): StoredSession | null {
if (!browser) return null;
const raw = sessionStorage.getItem(SESSION_KEY);
if (!raw) return null;
try {
return JSON.parse(raw) as StoredSession;
} catch {
return null;
}
}
export function clearSession(): void {
if (!browser) return;
sessionStorage.removeItem(SESSION_KEY);
}
export interface StoredAdmin {
accessToken: string;
email: string;
expiresAt: number;
}
export function saveAdmin(admin: StoredAdmin): void {
if (!browser) return;
localStorage.setItem(ADMIN_KEY, JSON.stringify(admin));
}
export function loadAdmin(): StoredAdmin | null {
if (!browser) return null;
const raw = localStorage.getItem(ADMIN_KEY);
if (!raw) return null;
try {
const admin = JSON.parse(raw) as StoredAdmin;
if (admin.expiresAt <= Date.now()) {
localStorage.removeItem(ADMIN_KEY);
return null;
}
return admin;
} catch {
return null;
}
}
export function clearAdmin(): void {
if (!browser) return;
localStorage.removeItem(ADMIN_KEY);
}