fix: no double fetch and caching

This commit is contained in:
TrèsAbhi committed 2023-11-07 18:58:19 -06:00
1 parent 6600bba58c
commit fbde9ec64f
4 files changed
+243 -120

No files matched your search

+23
View File
@@ -0,0 +1,23 @@
import { LeagueTop } from '../../commands/ratings';
import { Region } from '../../constants/regions';
import { patientFetch } from '../blitzkrieg/patientFetch';
import { withCORSProxy } from '../blitzkrieg/withCORSProxy';
import regionToRegionSubdomain from './regionToRegionSubdomain';
export async function getRatingsLeague(
region: Region,
league: number,
usePatientFetcher = false,
) {
const fetcher = usePatientFetcher ? patientFetch : fetch;
const response = await fetcher(
withCORSProxy(
`https://${regionToRegionSubdomain(
region,
)}.wotblitz.com/en/api/rating-leaderboards/league/${league}/top/`,
),
);
const json = (await response.json()) as LeagueTop;
return json;
}
+14
View File
@@ -0,0 +1,14 @@
export async function patientFetch(url: string, timeout = 1 * 60 * 1000) {
let patientResponse: Response;
while (patientResponse! === undefined) {
try {
patientResponse = await fetch(url);
} catch (error) {
console.warn(`Failed to fetch ${url}; retrying in ${timeout}ms...`);
await new Promise((resolve) => setTimeout(resolve, timeout));
}
}
return patientResponse;
}