11import { error } from "@sveltejs/kit" ;
2+ import { constants } from "http2" ;
23import {
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