import "server-only";
import { createHmac, randomBytes } from "node:crypto";

/** Token de sesión: 32 bytes aleatorios (256 bits) en base64url. Solo vive en la cookie. */
export function generateSessionToken(): string {
  return randomBytes(32).toString("base64url");
}

/**
 * Lo que se guarda en la base de datos: HMAC-SHA256(token, SESSION_SECRET).
 * Si la base de datos se filtra, los hashes no sirven para suplantar sesiones.
 */
export function hashSessionToken(token: string, secret: string): string {
  return createHmac("sha256", secret).update(token).digest("hex");
}

/** Formato válido de un token antes de consultarlo (descarta basura sin tocar la BD). */
export function isWellFormedToken(token: string): boolean {
  return /^[A-Za-z0-9_-]{43}$/.test(token);
}
