async function createOrderWithRetry(orderData, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
let response
try {
response = await fetch('https://sandbox.theary.ai/background-check/v1/orders', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_JWT_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify(orderData),
})
} catch (error) {
// Network failure — retry with backoff
if (attempt === maxRetries) throw error
await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000))
continue
}
if (response.ok) {
return await response.json()
}
// Do not retry client errors — fix the request or token instead
if (response.status >= 400 && response.status < 500) {
throw new Error(`Client Error: ${response.status}`)
}
if (attempt === maxRetries) {
throw new Error(`Server Error after ${maxRetries} attempts: ${response.status}`)
}
await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000))
}
}