async function apiRequest(url, headers, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
const resp = await fetch(url, { headers });
if (resp.status === 429) {
const { errors } = await resp.json();
const retryAfter = errors[0]?.retry_after_seconds ?? 60;
await new Promise((r) => setTimeout(r, retryAfter * 1000));
continue;
}
if (resp.status >= 500) {
await new Promise((r) => setTimeout(r, 2 ** attempt * 1000));
continue;
}
return resp.json();
}
throw new Error("Max retries exceeded");
}