import { API_BASE, clearAccessToken, persistAccessTokenFromURL, } from "./api.js?v=20260324e"; import { initI18n, t } from "./i18n-20260324d.js"; const forms = document.querySelectorAll("[data-auth-form]"); const statusNode = document.querySelector("[data-auth-page-status]"); const resetTokenBox = document.querySelector("[data-reset-token-box]"); const resetTokenLink = document.querySelector("[data-reset-token-link]"); initI18n(); persistAccessTokenFromURL(); function setStatus(message, isError = false) { if (!statusNode) { return; } statusNode.textContent = message; statusNode.style.borderColor = isError ? "rgba(255, 123, 123, 0.32)" : "rgba(124, 242, 199, 0.18)"; statusNode.style.background = isError ? "rgba(255, 123, 123, 0.08)" : "rgba(124, 242, 199, 0.06)"; } async function request(path, payload) { const response = await fetch(`${API_BASE}${path}`, { method: "POST", credentials: "include", headers: { "Content-Type": "application/json", }, body: JSON.stringify(payload), }); const contentType = response.headers.get("content-type") || ""; const body = contentType.includes("application/json") ? await response.json() : await response.text(); if (!response.ok) { throw new Error(typeof body === "string" ? body : body.error || t("authPages.request_failed")); } return body; } function storeAndRedirect(payload) { const accessToken = payload?.tokens?.accessToken; if (accessToken) { window.sessionStorage.setItem("switchy_access_token", accessToken); } else { clearAccessToken(); } window.location.href = "/dashboard/"; } forms.forEach((form) => { form.addEventListener("submit", async (event) => { event.preventDefault(); const mode = form.dataset.authForm; const formData = new FormData(form); const values = Object.fromEntries(formData.entries()); try { if (mode === "login") { const payload = await request("/auth/login", values); storeAndRedirect(payload); return; } if (mode === "register") { const payload = await request("/auth/register", values); storeAndRedirect(payload); return; } if (mode === "forgot-password") { const payload = await request("/auth/forgot-password", { email: values.email }); setStatus(t("authPages.reset_link_ready")); if (payload.resetToken && resetTokenBox && resetTokenLink) { resetTokenBox.hidden = false; resetTokenLink.href = `/reset-password/?token=${encodeURIComponent(payload.resetToken)}`; resetTokenLink.textContent = t("authPages.open_reset_form"); } return; } if (mode === "reset-password") { const url = new URL(window.location.href); const token = url.searchParams.get("token") || values.token; await request("/auth/reset-password", { token, newPassword: values.newPassword }); setStatus(t("authPages.password_updated")); } } catch (error) { setStatus(error.message, true); } }); });