mirror of
https://github.com/wukko/cobalt.git
synced 2025-03-25 18:54:53 +01:00
74 lines
2 KiB
TypeScript
74 lines
2 KiB
TypeScript
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;
|
|
}
|