/** * Generic Domain Detection * Detects personal/generic email providers (gmail, yahoo, etc.) */ export const GENERIC_EMAIL_DOMAINS = [ // Major providers 'gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com', 'live.com', 'msn.com', // Apple 'icloud.com', 'me.com', 'mac.com', // Other providers 'aol.com', 'protonmail.com', 'mail.com', 'yandex.com', 'zoho.com', 'gmx.com', 'fastmail.com', // ISP-based 'comcast.net', 'verizon.net', 'att.net', 'sbcglobal.net', 'bellsouth.net', 'cox.net', // International 'qq.com', '163.com', '126.com', 'web.de', 't-online.de', ] as const; export type GenericEmailDomain = (typeof GENERIC_EMAIL_DOMAINS)[number]; export function extractDomainFromEmail(email: string): string | null { if (!email || !email.includes('@')) return null; return email.split('@')[1]?.toLowerCase() || null; } export function normalizeDomain(domain: string): string { return ( domain ?.toLowerCase() .replace(/^https?:\/\//, '') .replace(/^www\./, '') .split('/')[0] .trim() || '' ); } export function isGenericDomain(domain: string): boolean { const normalized = normalizeDomain(domain); return GENERIC_EMAIL_DOMAINS.includes(normalized as GenericEmailDomain); } export function hasGenericEmailDomain(email: string): boolean { const domain = extractDomainFromEmail(email); return domain ? isGenericDomain(domain) : false; } export function isGenericWebsiteDomain(website: string): boolean { return isGenericDomain(normalizeDomain(website)); }