From 22b16a7ac26f7705896a80b53bf5d2a7b3968e47 Mon Sep 17 00:00:00 2001 From: Cooldude2606 <25043174+Cooldude2606@users.noreply.github.com> Date: Mon, 1 Jun 2026 00:13:57 +0100 Subject: [PATCH] Small refactor of verifyToken effect --- plugins/player_auth/web/index.tsx | 114 +++++++++++++++++------------- 1 file changed, 65 insertions(+), 49 deletions(-) diff --git a/plugins/player_auth/web/index.tsx b/plugins/player_auth/web/index.tsx index 835242c0..2148d0e1 100644 --- a/plugins/player_auth/web/index.tsx +++ b/plugins/player_auth/web/index.tsx @@ -21,26 +21,27 @@ function LoginForm(props: LoginFormProps) { useEffect(() => { let cancelled = false; - - async function load() { - let response = await fetch(`${webRoot}api/player_auth/servers`); - if (!response.ok) { - if (!cancelled) { - setServers([]); - const err = new Error(await response.text()); - notifyErrorHandler("Error retrieving servers")(err); + async function loadServers() { + try { + const response = await fetch(`${webRoot}api/player_auth/servers`); + if (!response.ok) { + throw new Error(`Bad server response: ${response.status}`); } - return; - } - const json = await response.json(); - if (!cancelled) { - setServers(json.map((s: any) => PlayerAuthServer.fromJSON(s))); + const data = await response.json(); + if (!cancelled) { + setServers(data); + } + } catch (err) { + if (!cancelled && err instanceof Error) { + setServers([]); + notifyErrorHandler("Error fetching servers")(err); + } } } - load(); - const interval = setInterval(load, 15 * 1000); + loadServers(); + const interval = setInterval(loadServers, 15 * 1000); return () => { cancelled = true; @@ -49,42 +50,57 @@ function LoginForm(props: LoginFormProps) { }, []); useEffect(() => { - if (verifyToken) { - let checkLoop = setInterval(() => { - (async () => { - let response = await fetch(`${webRoot}api/player_auth/verify`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - verify_token: verifyToken, - verify_code: verifyCode, - player_code: playerCode, - }), - }); - if (!response.ok) { - throw new Error(`Bad server response: ${response.status}`); - } - let json = await response.json(); - if (json.error) { - // While there are other possibilites the most likely - // cause of an error response here is that the code expired. - setPlayerCodeError("Code expired"); - setVerifyToken(null); - clearInterval(checkLoop); - return; - } - if (json.verified) { - props.setToken(json.token); - } - })().catch(err => { - clearInterval(checkLoop); - notifyErrorHandler("Error verifying code")(err); - }); - }, 2 * 1000); - return () => { clearInterval(checkLoop); }; + if (!verifyToken) { + return undefined; } - return undefined; + let cancelled = false; + async function verify() { + try { + const response = await fetch(`${webRoot}api/player_auth/verify`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + verify_token: verifyToken, + verify_code: verifyCode, + player_code: playerCode, + }), + }); + + if (!response.ok) { + throw new Error(`Bad server response: ${response.status}`); + } + + const json = await response.json(); + if (cancelled) { + return; + } + + if (json.error) { + setPlayerCodeError("Code expired"); + setVerifyToken(null); + clearInterval(interval); + return; + } + + if (json.verified) { + props.setToken(json.token); + } + } catch (err) { + if (!cancelled && err instanceof Error) { + clearInterval(interval); + notifyErrorHandler("Error verifying code")(err); + } + } + } + + verify(); + const interval = setInterval(verify, 2 * 1000); + + return () => { + cancelled = true; + clearInterval(interval); + }; }, [verifyToken]); if (!servers) {