import { storeCreateToken, storeGetUserByToken } from "../store"; let tokenCounter = 0; /** Generate a random session token and associate it with a user */ export function issueToken(username: string): { token: string; expires_in: number } { // Use crypto.getRandomValues for uniqueness const bytes = new Uint8Array(16); crypto.getRandomValues(bytes); const hex = Array.from(bytes) .map((b) => b.toString(16).padStart(2, "0")) .join(""); const token = `rct_${tokenCounter++}_${hex}`; storeCreateToken(username, token); return { token, expires_in: 86400 }; } /** Resolve a token to a username. Returns null if invalid. */ export function resolveToken(token: string | undefined): string | null { if (!token) return null; const entry = storeGetUserByToken(token); if (!entry) return null; return entry.username; }