in src/data/source.ts [230:252]
async function fetchSource(source: UrlSource, signal: AbortSignal): Promise<FetchedSource> {
try {
let response = await fetch(source.url, { signal });
// Retry fetches as long as 202 status is returned.
while (response.status === 202) {
source.setStatus({ message: "querying database" });
await new Promise(resolve => setTimeout(resolve, RETRY_TIME_MS));
response = await fetch(source.url, { signal });
}
source.setStatus({ message: "downloading" });
const data: Pings = await response.json();
if (data.crashid.length === 0) {
source.setStatus({ success: false, message: "not available" });
return { source };
}
source.setStatus({ message: "downloaded" });
const etag = response.headers.get("ETag") ?? undefined;
return { source, data, etag };
} catch (error) {
source.setStatus({ success: false, message: `failed: ${error}` });
return { source };
}
}