Skip to content

Commit 52e5a08

Browse files
committed
feat: Improve error handling
1 parent d35adac commit 52e5a08

2 files changed

Lines changed: 41 additions & 13 deletions

File tree

src/lib/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import config from "../config.json";
22

33
export * from "./utils";
44

5-
export const USER_AGENT_PREFIX = "Livemap/";
5+
export const USER_AGENT_TEXT = "Livemap";
66

77
export const MAP_SIZE = 850;
88

src/routes/servers/[serverAcro]/+page.server.ts

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { error } from "@sveltejs/kit";
2+
import { constants } from "http2";
23
import {
3-
USER_AGENT_PREFIX,
4+
USER_AGENT_TEXT,
45
getIcon,
56
getIconPopup,
67
secrets,
@@ -20,13 +21,45 @@ export async function load({ fetch, params: { serverAcro }, request: { headers }
2021

2122
if (!serverObj) return error(404, `Unknown server key "/servers/${serverAcro}"`);
2223

23-
const dssRes = await fetch(
24-
serverObj.url + Feeds.dedicatedServerStats(serverObj.code, DSSExtension.JSON),
25-
{ headers: { "User-Agent": `${USER_AGENT_PREFIX}DSS` } }
26-
);
27-
const dss: DSSResponse = await dssRes.json();
24+
const dss = await (async () => {
25+
const res = await fetch(
26+
serverObj.url + Feeds.dedicatedServerStats(serverObj.code, DSSExtension.JSON),
27+
{
28+
signal: AbortSignal.timeout(5_000),
29+
headers: { "User-Agent": USER_AGENT_TEXT }
30+
}
31+
).catch(err => console.log("DSS Fetch error:", err.message));
2832

29-
if (!dss.slots) return error(500, "Insufficient DSS data");
33+
if (!res || res.status !== constants.HTTP_STATUS_OK) return null;
34+
35+
const data: DSSResponse | void = await res.json().catch(err => console.log("DSS Parse error:", err.message));
36+
37+
if (!data?.slots) return null;
38+
39+
return data;
40+
})();
41+
42+
const csg = await (async () => {
43+
if (!dss) return null;
44+
45+
const res = await fetch(
46+
serverObj.url + Feeds.dedicatedServerSavegame(serverObj.code, DSSFile.CareerSavegame),
47+
{
48+
signal: AbortSignal.timeout(5_000),
49+
headers: { "User-Agent": USER_AGENT_TEXT }
50+
}
51+
).catch(err => console.log("CSG Fetch error:", err.message));
52+
53+
if (!res || res.status !== constants.HTTP_STATUS_OK) return null;
54+
55+
const body = await res.text().catch(err => console.log("CSG Parse error:", err.message));
56+
57+
if (!body) return null;
58+
59+
return getSavegameData(xml2js(body, { compact: true }) as FSCSG);
60+
})();
61+
62+
if (!dss || !csg) return error(500, `${serverObj.name} not responding`);
3063

3164
const vehicles = dss.vehicles.map(vehicle => ({
3265
name: vehicle.name,
@@ -38,11 +71,6 @@ export async function load({ fetch, params: { serverAcro }, request: { headers }
3871
icon: getIcon(vehicle),
3972
popup: getIconPopup(vehicle)
4073
}));
41-
const csgRes = await fetch(
42-
serverObj.url + Feeds.dedicatedServerSavegame(serverObj.code, DSSFile.CareerSavegame),
43-
{ headers: { "User-Agent": `${USER_AGENT_PREFIX}CSG` } }
44-
);
45-
const csg = getSavegameData(xml2js(await csgRes.text(), { compact: true }) as FSCSG);
4674

4775
return {
4876
dss: {

0 commit comments

Comments
 (0)