import { IPlayerPayload, IPlayerStatsPayload } from "../types/player.js"; const STEAM_API_KEY = process.env.STEAM_APIKEY; const fetchFuckingSteamApi = (url: string) => { let retries = 0; return new Promise((res, rej) => { const req = () => { if (retries > 5) { throw new Error("request failed to api steam"); } fetch(url, { signal: AbortSignal.timeout(10000) }).then(x => x.json()) .then(x => res(x)) .catch(() => { console.log("STEAM request failed! ", url.replace(STEAM_API_KEY!, "[XXX]"), retries); retries++; setTimeout(() => req(), 1000); }); }; req(); }); }; export class PlayerUtil { public static async getPlayer(steamId: number | string) { const data = await fetchFuckingSteamApi(`https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=${ STEAM_API_KEY }&format=json&steamids=${ steamId }`) as IPlayerPayload; if (!data.response.players) { return; } return data.response.players[ 0 ]; } public static async getPlayerStats(steamId: string) { const data = await fetchFuckingSteamApi(`http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=1422130&key=${ STEAM_API_KEY }&steamid=${ steamId }`) as IPlayerStatsPayload; if (!data.playerstats?.stats) { return; } return data.playerstats; } }