async function createPaymentWithRetry(paymentData, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await fetch('/transactions/payment/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': process.env.ORAFI_API_KEY
},
body: JSON.stringify(paymentData)
});
if (response.ok) {
return await response.json();
}
const error = await response.json();
// Don't retry client errors
if (response.status >= 400 && response.status < 500) {
throw new Error(`Client error: ${error.message}`);
}
// Retry server errors
if (attempt === maxRetries) {
throw new Error(`Max retries exceeded: ${error.message}`);
}
// Exponential backoff
await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));
} catch (error) {
if (attempt === maxRetries) {
throw error;
}
await new Promise(resolve => setTimeout(resolve, Math.pow(2, attempt) * 1000));
}
}
}