async function validateEmailSafely(email) {
try {
const response = await fetch('https://api.gtmapis.com/v1/validate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.GTMAPIS_API_KEY
},
body: JSON.stringify({ email })
});
// Handle HTTP errors
if (!response.ok) {
switch (response.status) {
case 400:
throw new Error('Invalid request format');
case 401:
throw new Error('Invalid API key - check your credentials');
case 429:
const retryAfter = response.headers.get('Retry-After') || 60;
throw new Error(`Rate limited - retry after ${retryAfter}s`);
case 500:
throw new Error('Server error - please retry');
case 503:
throw new Error('Service unavailable - try again later');
default:
throw new Error(`HTTP ${response.status}`);
}
}
const result = await response.json();
// Handle validation results
switch (result.result) {
case 'valid':
return { status: 'success', data: result };
case 'valid_role_based':
return {
status: 'warning',
message: 'Role-based email (info@, support@)',
data: result
};
case 'risky':
return {
status: 'warning',
message: 'Catch-all domain - cannot verify mailbox',
data: result
};
case 'invalid':
return {
status: 'error',
message: result.reason || 'Invalid email',
data: result
};
case 'unknown':
return {
status: 'warning',
message: 'Cannot verify - server restrictions',
data: result
};
default:
return {
status: 'error',
message: 'Unexpected result type',
data: result
};
}
} catch (error) {
// Network or parsing errors
console.error('Validation error:', error);
return {
status: 'error',
message: error.message,
data: null
};
}
}
// Usage
const result = await validateEmailSafely('john@company.com');
if (result.status === 'success') {
// Email is valid
console.log('Valid email:', result.data.email);
} else if (result.status === 'warning') {
// Email has issues but may be usable
console.warn(result.message, result.data);
} else {
// Email is invalid or error occurred
console.error(result.message);
}