INNER CODE UNIT · JavaScript
fetchIcon
ImranR98/apps.obtainium.imranr.dev · scripts/validate_icons.js:40
async function fetchIcon(url) {
let lastError
for (let attempt = 1; attempt <= ATTEMPTS; attempt++) {
const controller = new AbortController()
const timeout = setTimeout(() => controller.abort(), TIMEOUT_MS)
try {
const response = await fetch(url, {
signal: controller.signal,
headers: { 'User-Agent': USER_AGENT, 'Accept': 'image/*' }
})
if (!response.ok) {
const inconclusive =
response.status === 403 || response.status === 408 || response.status === 429 || response.status >= 500
if (inconclusive && attempt < ATTEMPTS) {
lastError = new Error(`HTTP ${response.status}`)
await new Promise(resolve => setTimeout(resolve, 500 * attempt))
continue
}