import { Button, CircularProgress } from "@mui/material"; import { request } from "@/services/response"; import Cookies from "js-cookie"; import { toast } from "react-toastify"; import { handleTimeExpiresToken } from "@/helper"; function SendReq({ loading, setLoading, code, setIsSendMsg, setStep, setIsError, uuid, }) { const handleReq = async () => { setLoading(true); try { const res = await fetch("/api/auth/token", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ uuid, code: code.join("") }), }); const response = await res.json(); if (response.access_token) { handleSetCookie(response); } else { setLoading(false); setIsError(true); const message = response?.errors?.[0]?.message || "کد تأیید نادرست یا منقضی شده است."; toast.error(message); } } catch { setLoading(false); setIsError(true); toast.error("خطا در برقراری ارتباط. دوباره تلاش کنید."); } }; const handleSetCookie = (response) => { const expiresTime = handleTimeExpiresToken(response.expires_in); const hostname = window.location.hostname; const isHttps = window.location.protocol === "https:"; const isLocalhost = hostname.includes("localhost"); // تنظیمات پایه let cookieOptions = { path: "/", sameSite: "lax", expires: expiresTime.accessTokenExpires, }; // اگر روی دامنه اصلی و https بود if (!isLocalhost && isHttps) { cookieOptions = { ...cookieOptions, secure: true, domain: ".nobat724.com", }; } Cookies.set("access_token", response.access_token, cookieOptions); Cookies.set("refresh_token", response.refresh_token, { ...cookieOptions, expires: expiresTime.refreshTokenExpires, }); Cookies.set("uuid", uuid, { ...cookieOptions, expires: expiresTime.refreshTokenExpires, }); getInfo(response.access_token, cookieOptions); }; const getInfo = (token, cookieOptions) => { request .getUserInfo({ headers: { Authorization: `Bearer ${token}`, }, }) .then((res) => { setLoading(false); if (res && res.uuid) { Cookies.set("userInfo", JSON.stringify(res), cookieOptions); // اگر در صفحه appointment هستیم، به مرحله 3 (Detail) می‌رویم if (setStep) { setStep(3); } else { window.location.pathname = "/"; } } }) .catch(() => { setLoading(false); setIsError(true); }); }; return ( ); } export default SendReq;