Spaces:
Paused
Paused
| import { browser } from "$app/environment"; | |
| import { get } from "svelte/store"; | |
| import { currentApiURL } from "$lib/api/api-url"; | |
| import { turnstileCreated, turnstileEnabled, turnstileSolved } from "$lib/state/turnstile"; | |
| import cachedInfo from "$lib/state/server-info"; | |
| import type { CobaltServerInfoResponse, CobaltErrorResponse, CobaltServerInfo } from "$lib/types/api"; | |
| export type CobaltServerInfoCache = { | |
| info: CobaltServerInfo, | |
| origin: string, | |
| } | |
| const request = async () => { | |
| const apiEndpoint = `${currentApiURL()}/`; | |
| const response: CobaltServerInfoResponse = await fetch(apiEndpoint, { | |
| redirect: "manual", | |
| signal: AbortSignal.timeout(10000), | |
| }) | |
| .then(r => r.json()) | |
| .catch((e) => { | |
| if (e?.message?.includes("timed out")) { | |
| return { | |
| status: "error", | |
| error: { | |
| code: "error.api.timed_out" | |
| } | |
| } as CobaltErrorResponse | |
| } | |
| }); | |
| return response; | |
| } | |
| // reload the page if turnstile is now disabled, but was previously loaded and not solved | |
| const reloadIfTurnstileDisabled = () => { | |
| if (browser && !get(turnstileEnabled) && get(turnstileCreated) && !get(turnstileSolved)) { | |
| window.location.reload(); | |
| } | |
| } | |
| export const getServerInfo = async () => { | |
| const cache = get(cachedInfo); | |
| if (cache && cache.origin === currentApiURL()) { | |
| reloadIfTurnstileDisabled(); | |
| return true | |
| } | |
| const freshInfo = await request(); | |
| if (!freshInfo || !("cobalt" in freshInfo)) { | |
| return false; | |
| } | |
| if (!("status" in freshInfo)) { | |
| cachedInfo.set({ | |
| info: freshInfo, | |
| origin: currentApiURL(), | |
| }); | |
| // reload the page if turnstile sitekey changed | |
| if (browser && get(turnstileEnabled) && cache && cache?.info?.cobalt?.turnstileSitekey !== freshInfo?.cobalt?.turnstileSitekey) { | |
| window.location.reload(); | |
| } | |
| reloadIfTurnstileDisabled(); | |
| return true; | |
| } | |
| return false; | |
| } | |