import { beforeUnloadHandler } from "../app.js"; import { showError } from "../utils/error.js"; // Configuración: Cambia estos números para que sean únicos para tu proyecto const OFFSET = 99887766; // Un número grande para asegurar longitud mínima const CLAVE = 836295738; // Tu "secreto" para el XOR const desencriptar = (hash) => { // 1. Revertimos el string y volvemos a base 10 const baseNum = parseInt(hash.split('').reverse().join(''), 12); // 2. Aplicamos XOR (es reversible) y restamos el Offset return (baseNum ^ CLAVE) - OFFSET; }; function getTableFromUrl() { const params = new URLSearchParams(window.location.search); const table = params.get("table"); console.log(table); return Number(desencriptar(table)); } async function login(email, pin) { const response = await fetch("/api/users/login", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email, pin }) // Enviamos table si el back lo requiere en login }); if (response.status == 420) { window.removeEventListener("beforeunload", beforeUnloadHandler); window.location.replace("/"); } if (response.status === 401 || response.status === 429 || response.status === 404) { const errorData = await response.json(); const msg = errorData.message || "Error de autenticación"; const attempts = errorData.data?.attempts_remaining ? ` Intentos restantes: ${errorData.data.attempts_remaining}` : ""; showError(`${msg}.${attempts}`); throw new Error(msg); } else if (response.status != 200) { const errorData = await response.json(); showError(errorData.message || "Error desconocido"); throw new Error(errorData.message); } const JSONdata = await response.json(); const userData = JSONdata.data; if (!userData || !userData.token) { showError("Error al iniciar sesión, Intenta mas tarde."); throw new Error("Error al iniciar sesión."); } return userData; } async function guestLogin() { try { const response = await fetch("/api/users/guest"); const data = await response.json(); if (!data.success || !data.data || !data.data.token) { throw new Error("Error al generar sesión de invitado"); } return data.data; // Retorna { token: "..." } } catch (e) { console.error(e); showError("No se pudo iniciar como invitado."); throw e; } } async function existsTable(table) { const responseTableExists = await fetch(`/api/store/tables/exists?q=${table}`, { method: "GET", headers: { "Content-Type": "application/json" } }); const data = (await responseTableExists.json()).data.exists; return data; } export { login, existsTable, guestLogin, getTableFromUrl };