async function makeApiRequest() {
try {
const response = await fetch('https://api.paystub.dev/companies', {
headers: {
'Authorization': `Bearer ${token}`
}
});
const data = await response.json();
if (!response.ok) {
switch (response.status) {
case 401:
// Handle authentication error
handleAuthError();
break;
case 403:
// Handle authorization error
handleForbiddenError();
break;
case 422:
// Handle validation errors
handleValidationErrors(data.errors);
break;
case 429:
// Handle rate limit
await handleRateLimit(response.headers);
break;
default:
// Handle other errors
handleGenericError(data.message);
}
return;
}
return data;
} catch (error) {
// Handle network errors
handleNetworkError(error);
}
}
function handleValidationErrors(errors) {
for (const [field, messages] of Object.entries(errors)) {
console.error(`${field}: ${messages.join(', ')}`);
}
}
async function handleRateLimit(headers) {
const resetTime = headers.get('X-RateLimit-Reset');
const waitTime = Math.max(0, resetTime - Math.floor(Date.now() / 1000));
console.warn(`Rate limit exceeded. Waiting ${waitTime} seconds...`);
await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
}