@emailcheck/email-validator-js 3.0.1-beta.0 → 3.0.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +176 -24
- package/dist/adapters/lru-adapter.d.ts +2 -2
- package/dist/adapters/redis-adapter.d.ts +4 -4
- package/dist/batch-verifier.d.ts +5 -0
- package/dist/cache-interface.d.ts +23 -16
- package/dist/cache.d.ts +5 -5
- package/dist/check-if-email-exists.d.ts +205 -0
- package/dist/domain-suggester.d.ts +6 -6
- package/dist/{validator.d.ts → email-validator.d.ts} +2 -2
- package/dist/email-verifier-types.d.ts +225 -0
- package/dist/index.d.ts +8 -8
- package/dist/index.esm.js +457 -236
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +460 -238
- package/dist/index.js.map +1 -1
- package/dist/mx-resolver.d.ts +2 -0
- package/dist/name-detector.d.ts +6 -6
- package/dist/serverless/adapters/aws-lambda.cjs.js.map +1 -1
- package/dist/serverless/adapters/aws-lambda.esm.js.map +1 -1
- package/dist/serverless/adapters/cloudflare.cjs.js.map +1 -1
- package/dist/serverless/adapters/cloudflare.esm.js.map +1 -1
- package/dist/serverless/adapters/vercel.cjs.js.map +1 -1
- package/dist/serverless/adapters/vercel.esm.js.map +1 -1
- package/dist/serverless/index.cjs.js.map +1 -1
- package/dist/serverless/index.d.ts +1 -1
- package/dist/serverless/index.esm.js.map +1 -1
- package/dist/serverless/{core.cjs.js → verifier.cjs.js} +1 -1
- package/dist/serverless/verifier.cjs.js.map +1 -0
- package/dist/serverless/{core.esm.js → verifier.esm.js} +1 -1
- package/dist/serverless/verifier.esm.js.map +1 -0
- package/dist/{smtp.d.ts → smtp-verifier.d.ts} +2 -2
- package/dist/types.d.ts +128 -34
- package/dist/whois.d.ts +3 -3
- package/package.json +19 -19
- package/dist/batch.d.ts +0 -5
- package/dist/dns.d.ts +0 -2
- package/dist/serverless/core.cjs.js.map +0 -1
- package/dist/serverless/core.esm.js.map +0 -1
- /package/dist/serverless/{core.d.ts → verifier.d.ts} +0 -0
- /package/dist/serverless/{core.min.js → verifier.min.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../node_modules/string-similarity-js/dist/string-similarity.js","../../src/serverless/core.ts","../../src/serverless/adapters/aws-lambda.ts","../../src/serverless/adapters/cloudflare.ts","../../src/serverless/adapters/vercel.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringSimilarity = void 0;\n/* global exports, Map */\n/**\n * Calculate similarity between two strings\n * @param {string} str1 First string to match\n * @param {string} str2 Second string to match\n * @param {number} [substringLength=2] Optional. Length of substring to be used in calculating similarity. Default 2.\n * @param {boolean} [caseSensitive=false] Optional. Whether you want to consider case in string matching. Default false;\n * @returns Number between 0 and 1, with 0 being a low match score.\n */\nvar stringSimilarity = function (str1, str2, substringLength, caseSensitive) {\n if (substringLength === void 0) { substringLength = 2; }\n if (caseSensitive === void 0) { caseSensitive = false; }\n if (!caseSensitive) {\n str1 = str1.toLowerCase();\n str2 = str2.toLowerCase();\n }\n if (str1.length < substringLength || str2.length < substringLength)\n return 0;\n var map = new Map();\n for (var i = 0; i < str1.length - (substringLength - 1); i++) {\n var substr1 = str1.substr(i, substringLength);\n map.set(substr1, map.has(substr1) ? map.get(substr1) + 1 : 1);\n }\n var match = 0;\n for (var j = 0; j < str2.length - (substringLength - 1); j++) {\n var substr2 = str2.substr(j, substringLength);\n var count = map.has(substr2) ? map.get(substr2) : 0;\n if (count > 0) {\n map.set(substr2, count - 1);\n match++;\n }\n }\n return (match * 2) / (str1.length + str2.length - ((substringLength - 1) * 2));\n};\nexports.stringSimilarity = stringSimilarity;\nexports.default = exports.stringSimilarity;\n//# sourceMappingURL=string-similarity.js.map","/**\n * Core serverless email validator\n * Platform-agnostic implementation without Node.js dependencies\n */\n\n// Import utility functions\nimport { stringSimilarity } from 'string-similarity-js';\n\n// Import full data files for comprehensive validation\n// These are the complete, unminified JSON files\nimport disposableProviders from '../disposable-email-providers.json';\nimport freeProviders from '../free-email-providers.json';\nimport type { DomainSuggesterOptions, EmailValidationResult, ValidateEmailOptions } from '../types';\n\n// Platform-agnostic cache implementation\nexport class EdgeCache<T> {\n private cache = new Map<string, { value: T; expires: number }>();\n private maxSize: number;\n private ttl: number;\n\n constructor(maxSize = 1000, ttl = 3600000) {\n this.maxSize = maxSize;\n this.ttl = ttl;\n }\n\n get(key: string): T | undefined {\n const item = this.cache.get(key);\n if (!item) return undefined;\n if (Date.now() > item.expires) {\n this.cache.delete(key);\n return undefined;\n }\n return item.value;\n }\n\n set(key: string, value: T): void {\n if (this.cache.size >= this.maxSize) {\n // Remove oldest entries\n const entriesToRemove = Math.max(1, Math.floor(this.maxSize * 0.1));\n const keys = Array.from(this.cache.keys()).slice(0, entriesToRemove);\n keys.forEach((key) => this.cache.delete(key));\n }\n this.cache.set(key, {\n value,\n expires: Date.now() + this.ttl,\n });\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\n// Global cache instances\nexport const validationCache = new EdgeCache<EmailValidationResult>(1000);\nexport const mxCache = new EdgeCache<string[]>(500);\n\n// Email validation regex patterns\nconst VALID_EMAIL_REGEX =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n// Common email provider domains for typo detection\nexport const COMMON_DOMAINS = [\n 'gmail.com',\n 'yahoo.com',\n 'hotmail.com',\n 'outlook.com',\n 'icloud.com',\n 'aol.com',\n 'msn.com',\n 'live.com',\n 'ymail.com',\n 'protonmail.com',\n 'zoho.com',\n 'mail.com',\n 'gmx.com',\n 'fastmail.com',\n 'tutanota.com',\n 'qq.com',\n '163.com',\n '126.com',\n 'sina.com',\n 'foxmail.com',\n 'yandex.com',\n 'mail.ru',\n 'rambler.ru',\n 'gmx.de',\n 'web.de',\n 't-online.de',\n 'orange.fr',\n 'wanadoo.fr',\n 'free.fr',\n 'sfr.fr',\n 'laposte.net',\n 'libero.it',\n 'virgilio.it',\n 'alice.it',\n 'tin.it',\n 'bt.com',\n 'btinternet.com',\n 'virginmedia.com',\n 'sky.com',\n 'talktalk.net',\n 'rogers.com',\n 'shaw.ca',\n 'sympatico.ca',\n 'bellsouth.net',\n 'comcast.net',\n 'cox.net',\n 'earthlink.net',\n 'charter.net',\n 'optonline.net',\n 'verizon.net',\n 'att.net',\n 'sbcglobal.net',\n 'me.com',\n 'mac.com',\n 'rocketmail.com',\n];\n\n// Common typo patterns\nconst TYPO_PATTERNS = [\n // Gmail typos\n { pattern: /gmial\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmai\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmil\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.co$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.con$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.cm$/i, replacement: 'gmail.com' },\n { pattern: /gmal\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gnail\\.com$/i, replacement: 'gmail.com' },\n\n // Yahoo typos\n { pattern: /yahooo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaho\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yahoo\\.co$/i, replacement: 'yahoo.com' },\n { pattern: /yaoo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaboo\\.com$/i, replacement: 'yahoo.com' },\n\n // Hotmail typos\n { pattern: /hotmial\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmai\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmil\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmail\\.co$/i, replacement: 'hotmail.com' },\n { pattern: /hormail\\.com$/i, replacement: 'hotmail.com' },\n\n // Outlook typos\n { pattern: /outlok\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outloo\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outlook\\.co$/i, replacement: 'outlook.com' },\n { pattern: /putlook\\.com$/i, replacement: 'outlook.com' },\n\n // iCloud typos\n { pattern: /iclud\\.com$/i, replacement: 'icloud.com' },\n { pattern: /icloud\\.co$/i, replacement: 'icloud.com' },\n { pattern: /icoud\\.com$/i, replacement: 'icloud.com' },\n];\n\n// Platform-agnostic DNS resolution interface\nexport interface DNSResolver {\n resolveMx(domain: string): Promise<Array<{ exchange: string; priority: number }>>;\n\n resolveTxt(domain: string): Promise<string[]>;\n}\n\n// Stub DNS resolver for environments without DNS capabilities\nexport class StubDNSResolver implements DNSResolver {\n async resolveMx(_domain: string): Promise<Array<{ exchange: string; priority: number }>> {\n // Return null to indicate DNS is not available\n return [];\n }\n\n async resolveTxt(_domain: string): Promise<string[]> {\n return [];\n }\n}\n\n// Domain suggestion function\nexport function suggestDomain(domain: string, options?: DomainSuggesterOptions): string | null {\n const threshold = options?.threshold || 2;\n const domains = options?.customDomains || COMMON_DOMAINS;\n\n // Check common typos first\n for (const { pattern, replacement } of TYPO_PATTERNS) {\n if (pattern.test(domain)) {\n return replacement;\n }\n }\n\n // If domain is already in the list of common domains, it's correct\n if (domains.includes(domain)) {\n return null;\n }\n\n // Find closest domain using Levenshtein distance\n let minDistance = Infinity;\n let suggestion: string | null = null;\n\n for (const commonDomain of domains) {\n // Skip if it's the same domain (case-insensitive)\n if (domain.toLowerCase() === commonDomain.toLowerCase()) {\n return null;\n }\n\n // Use string similarity to calculate distance\n const similarity = stringSimilarity(domain.toLowerCase(), commonDomain.toLowerCase());\n const distance = Math.round((1 - similarity) * Math.max(domain.length, commonDomain.length));\n if (distance > 0 && distance <= threshold && distance < minDistance) {\n minDistance = distance;\n suggestion = commonDomain;\n }\n }\n\n return suggestion;\n}\n\n// Core validation function\nexport async function validateEmailCore(\n email: string,\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult> {\n const normalizedEmail = email.toLowerCase().trim();\n\n // Check cache\n if (!options?.skipCache) {\n const cached = validationCache.get(normalizedEmail);\n if (cached) return cached;\n }\n\n const result: EmailValidationResult = {\n valid: false,\n email: normalizedEmail,\n validators: {},\n };\n\n // Syntax validation\n if (options?.validateSyntax !== false) {\n const syntaxValid = VALID_EMAIL_REGEX.test(normalizedEmail);\n result.validators.syntax = { valid: syntaxValid };\n if (!syntaxValid) {\n validationCache.set(normalizedEmail, result);\n return result;\n }\n }\n\n const [local, domain] = normalizedEmail.split('@');\n result.local = local;\n result.domain = domain;\n\n // Typo detection and suggestion\n if (options?.validateTypo !== false) {\n const suggestion = suggestDomain(domain, options?.domainSuggesterOptions);\n result.validators.typo = {\n valid: !suggestion,\n suggestion: suggestion || undefined,\n };\n }\n\n // Disposable email check\n if (options?.validateDisposable !== false) {\n const isDisposable = disposableProviders.includes(domain);\n result.validators.disposable = { valid: !isDisposable };\n }\n\n // Free email check\n if (options?.validateFree !== false) {\n const isFree = freeProviders.includes(domain);\n result.validators.free = { valid: !isFree };\n }\n\n // MX record validation (if DNS resolver is available)\n if (options?.validateMx && options.dnsResolver) {\n try {\n const mxRecords = await options.dnsResolver.resolveMx(domain);\n const hasMx = mxRecords && mxRecords.length > 0;\n result.validators.mx = {\n valid: hasMx,\n records: hasMx ? mxRecords.map((r) => r.exchange) : undefined,\n };\n } catch (error) {\n result.validators.mx = {\n valid: false,\n error: error instanceof Error ? error.message : 'MX validation failed',\n };\n }\n }\n\n // Overall valid status - only syntax, typo, disposable, and MX matter for validity\n // Free provider detection is informational only\n const criticalValidators = ['syntax', 'typo', 'disposable', 'mx'];\n result.valid = criticalValidators.every((key) => {\n const validator = result.validators[key as keyof typeof result.validators];\n return !validator || validator.valid !== false;\n });\n\n // Cache result\n if (!options?.skipCache) {\n validationCache.set(normalizedEmail, result);\n }\n\n return result;\n}\n\n// Batch validation\nexport async function validateEmailBatch(\n emails: string[],\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult[]> {\n // Process in chunks to avoid overwhelming the system\n const chunkSize = options?.batchSize || 10;\n const results: EmailValidationResult[] = [];\n\n for (let i = 0; i < emails.length; i += chunkSize) {\n const chunk = emails.slice(i, i + chunkSize);\n const chunkResults = await Promise.all(chunk.map((email) => validateEmailCore(email, options)));\n results.push(...chunkResults);\n }\n\n return results;\n}\n\n// Export cache control functions\nexport function clearCache(): void {\n validationCache.clear();\n mxCache.clear();\n}\n\n// Export types\nexport type {\n DomainSuggesterOptions,\n EmailValidationResult,\n ValidateEmailOptions,\n} from '../types';\n","/**\n * AWS Lambda adapter for email validation\n * Supports API Gateway and direct Lambda invocation\n */\n\nimport type { EmailValidationResult, ValidateEmailOptions } from '../../types';\nimport { clearCache, validateEmailBatch, validateEmailCore } from '../core';\n\n// AWS Lambda handler types\nexport interface APIGatewayProxyEvent {\n body: string | null;\n headers: { [key: string]: string };\n httpMethod: string;\n path: string;\n queryStringParameters: { [key: string]: string } | null;\n pathParameters: { [key: string]: string } | null;\n}\n\nexport interface APIGatewayProxyResult {\n statusCode: number;\n headers?: { [key: string]: string };\n body: string;\n}\n\nexport interface LambdaContext {\n functionName: string;\n functionVersion: string;\n awsRequestId: string;\n remainingTimeInMillis: number;\n}\n\n// Request/Response types\ninterface ValidateRequest {\n email?: string;\n emails?: string[];\n options?: ValidateEmailOptions;\n}\n\ninterface ValidateResponse {\n success: boolean;\n data?: EmailValidationResult | EmailValidationResult[];\n error?: string;\n}\n\n// API Gateway handler\nexport async function apiGatewayHandler(\n event: APIGatewayProxyEvent,\n _context: LambdaContext\n): Promise<APIGatewayProxyResult> {\n const headers = {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Headers': 'Content-Type',\n 'Access-Control-Allow-Methods': 'POST, OPTIONS',\n };\n\n // Handle CORS preflight\n if (event.httpMethod === 'OPTIONS') {\n return {\n statusCode: 200,\n headers,\n body: '',\n };\n }\n\n try {\n // Parse request body\n const request: ValidateRequest = event.body ? JSON.parse(event.body) : {};\n\n // Validate request\n if (!request.email && !request.emails) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({\n success: false,\n error: 'Email or emails array is required',\n }),\n };\n }\n\n // Single email validation\n if (request.email) {\n const result = await validateEmailCore(request.email, request.options);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({\n success: true,\n data: result,\n }),\n };\n }\n\n // Batch email validation\n if (request.emails) {\n const results = await validateEmailBatch(request.emails, request.options);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({\n success: true,\n data: results,\n }),\n };\n }\n\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({\n success: false,\n error: 'Invalid request',\n }),\n };\n } catch (error) {\n console.error('Lambda error:', error);\n return {\n statusCode: 500,\n headers,\n body: JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n };\n }\n}\n\n// Direct Lambda handler\nexport async function lambdaHandler(event: ValidateRequest, _context: LambdaContext): Promise<ValidateResponse> {\n try {\n // Validate request\n if (!event.email && !event.emails) {\n return {\n success: false,\n error: 'Email or emails array is required',\n };\n }\n\n // Single email validation\n if (event.email) {\n const result = await validateEmailCore(event.email, event.options);\n return {\n success: true,\n data: result,\n };\n }\n\n // Batch email validation\n if (event.emails) {\n const results = await validateEmailBatch(event.emails, event.options);\n return {\n success: true,\n data: results,\n };\n }\n\n return {\n success: false,\n error: 'Invalid request',\n };\n } catch (error) {\n console.error('Lambda error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n };\n }\n}\n\n// Cache management handler\nexport async function cacheHandler(\n event: { action: 'clear' | 'stats' },\n _context: LambdaContext\n): Promise<{ success: boolean; message?: string; stats?: unknown }> {\n switch (event.action) {\n case 'clear':\n clearCache();\n return { success: true, message: 'Cache cleared' };\n case 'stats':\n // Return cache statistics if needed\n return { success: true, message: 'Cache stats not implemented' };\n default:\n return { success: false, message: 'Invalid action' };\n }\n}\n\n// Main handler matching test expectations\nexport async function handler(event: any, _context: any): Promise<any> {\n const headers = {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Headers': 'Content-Type',\n 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n };\n\n // Handle CORS preflight\n if (event.httpMethod === 'OPTIONS') {\n return {\n statusCode: 204,\n headers,\n body: '',\n };\n }\n\n // Handle health check\n if (event.path === '/health' && event.httpMethod === 'GET') {\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({\n status: 'healthy',\n timestamp: new Date().toISOString(),\n }),\n };\n }\n\n // Handle single email validation\n if (event.path === '/validate' && event.httpMethod === 'POST') {\n try {\n let body: any = {};\n\n // Handle base64 encoded body\n if (event.isBase64Encoded) {\n const decoded = Buffer.from(event.body || '', 'base64').toString('utf-8');\n body = JSON.parse(decoded);\n } else {\n body = event.body ? JSON.parse(event.body) : {};\n }\n\n // Check for email\n if (!body.email) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Email is required' }),\n };\n }\n\n // Parse options from query params\n const options: Record<string, any> = {};\n if (event.queryStringParameters) {\n if (event.queryStringParameters.skipCache === 'true') {\n options.skipCache = true;\n }\n if (event.queryStringParameters.validateTypo === 'false') {\n options.validateTypo = false;\n }\n }\n\n const result = await validateEmailCore(body.email, options);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify(result),\n };\n } catch (error) {\n if (error instanceof SyntaxError) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Invalid request body' }),\n };\n }\n console.error('Validation error:', error);\n return {\n statusCode: 500,\n headers,\n body: JSON.stringify({ error: 'Internal server error' }),\n };\n }\n }\n\n // Handle batch validation\n if (event.path === '/validate/batch' && event.httpMethod === 'POST') {\n try {\n let body: any = {};\n\n // Handle base64 encoded body\n if (event.isBase64Encoded) {\n const decoded = Buffer.from(event.body || '', 'base64').toString('utf-8');\n body = JSON.parse(decoded);\n } else {\n body = event.body ? JSON.parse(event.body) : {};\n }\n\n // Check for emails array\n if (!body.emails || !Array.isArray(body.emails)) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Emails array is required' }),\n };\n }\n\n if (body.emails.length === 0) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Emails array is required' }),\n };\n }\n\n if (body.emails.length > 100) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Maximum 100 emails allowed per batch' }),\n };\n }\n\n const results = await validateEmailBatch(body.emails);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({ results }),\n };\n } catch (error) {\n console.error('Batch validation error:', error);\n return {\n statusCode: 500,\n headers,\n body: JSON.stringify({ error: 'Internal server error' }),\n };\n }\n }\n\n // Handle unsupported methods\n if (\n (event.path === '/validate' || event.path === '/validate/batch') &&\n event.httpMethod !== 'POST' &&\n event.httpMethod !== 'OPTIONS'\n ) {\n return {\n statusCode: 405,\n headers,\n body: JSON.stringify({ error: 'Method not allowed' }),\n };\n }\n\n // Handle unknown routes\n return {\n statusCode: 404,\n headers,\n body: JSON.stringify({ error: 'Not found' }),\n };\n}\n\n// Export handlers\nexport default {\n apiGatewayHandler,\n lambdaHandler,\n cacheHandler,\n handler,\n};\n","/**\n * Cloudflare Workers adapter for email validation\n * Supports Workers, Pages Functions, and Durable Objects\n */\n\nimport type { EmailValidationResult, ValidateEmailOptions } from '../../types';\nimport { EdgeCache, validateEmailBatch, validateEmailCore } from '../core';\n\n// Cloudflare Workers types\n\n// KVNamespace interface for TypeScript\ninterface KVNamespace {\n get<T = unknown>(key: string, type?: 'text' | 'json' | 'arrayBuffer' | 'stream'): Promise<T | null>;\n\n put(key: string, value: string | ArrayBuffer | ReadableStream, options?: { expirationTtl?: number }): Promise<void>;\n\n delete(key: string): Promise<void>;\n}\n\n// DurableObject interfaces\ninterface DurableObjectNamespace {\n idFromName(name: string): DurableObjectId;\n\n get(id: DurableObjectId): DurableObjectStub;\n}\n\ninterface DurableObjectId {\n toString(): string;\n}\n\ninterface DurableObjectStub {\n fetch(request: Request): Promise<Response>;\n}\n\ninterface DurableObjectState {\n storage: DurableObjectStorage;\n}\n\ninterface DurableObjectStorage {\n get<T = unknown>(key: string): Promise<T | undefined>;\n\n put<T = unknown>(key: string, value: T): Promise<void>;\n\n delete(key: string): Promise<void>;\n}\n\nexport interface CloudflareRequest extends Request {\n cf?: {\n country?: string;\n colo?: string;\n timezone?: string;\n };\n}\n\nexport interface CloudflareEnv {\n // KV namespace for caching\n EMAIL_CACHE?: KVNamespace;\n // Durable Object namespace\n EMAIL_VALIDATOR?: DurableObjectNamespace;\n\n // Environment variables\n [key: string]: unknown;\n}\n\nexport interface CloudflareContext {\n waitUntil(promise: Promise<unknown>): void;\n\n passThroughOnException(): void;\n}\n\n// Request types\ninterface ValidateRequest {\n email?: string;\n emails?: string[];\n options?: ValidateEmailOptions;\n}\n\n// KV-based cache implementation\nclass KVCache<T> {\n constructor(\n private kv: KVNamespace,\n private ttl: number = 3600\n ) {}\n\n async get(key: string): Promise<T | undefined> {\n const value = await this.kv.get(key, 'json');\n return value as T | undefined;\n }\n\n async set(key: string, value: T): Promise<void> {\n await this.kv.put(key, JSON.stringify(value), {\n expirationTtl: this.ttl,\n });\n }\n\n async delete(key: string): Promise<void> {\n await this.kv.delete(key);\n }\n}\n\n// Cloudflare Workers handler\nasync function workerHandler(\n request: CloudflareRequest,\n env: CloudflareEnv,\n ctx: CloudflareContext\n): Promise<Response> {\n // Set up KV cache if available\n let kvCache: KVCache<EmailValidationResult> | undefined;\n if (env.EMAIL_CACHE) {\n kvCache = new KVCache(env.EMAIL_CACHE);\n }\n\n // Handle CORS\n if (request.method === 'OPTIONS') {\n return new Response(null, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type',\n },\n });\n }\n\n try {\n let requestData: ValidateRequest;\n\n // Parse request based on method\n if (request.method === 'GET') {\n const url = new URL(request.url);\n const email = url.searchParams.get('email');\n const emails = url.searchParams.get('emails');\n\n requestData = {\n email: email || undefined,\n emails: emails ? emails.split(',') : undefined,\n options: {\n validateMx: url.searchParams.get('validateMx') === 'true',\n validateSMTP: url.searchParams.get('validateSMTP') === 'true',\n validateTypo: url.searchParams.get('validateTypo') !== 'false',\n validateDisposable: url.searchParams.get('validateDisposable') !== 'false',\n validateFree: url.searchParams.get('validateFree') !== 'false',\n },\n };\n } else if (request.method === 'POST') {\n requestData = await request.json();\n } else {\n return new Response(JSON.stringify({ success: false, error: 'Method not allowed' }), {\n status: 405,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Validate request\n if (!requestData.email && !requestData.emails) {\n return new Response(JSON.stringify({ success: false, error: 'Email or emails array is required' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Check KV cache for single email\n if (requestData.email && kvCache && !requestData.options?.skipCache) {\n const cached = await kvCache.get(`email:${requestData.email}`);\n if (cached) {\n return new Response(JSON.stringify({ success: true, data: cached, cached: true }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n 'CF-Cache-Status': 'HIT',\n },\n });\n }\n }\n\n // Single email validation\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n\n // Store in KV cache\n if (kvCache && !requestData.options?.skipCache) {\n ctx.waitUntil(kvCache.set(`email:${requestData.email}`, result));\n }\n\n return new Response(JSON.stringify({ success: true, data: result }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n 'CF-Cache-Status': 'MISS',\n },\n });\n }\n\n // Batch email validation\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n\n // Store each result in KV cache\n if (kvCache && !requestData.options?.skipCache) {\n const cachePromises = results.map((result, index) => {\n if (requestData.emails && requestData.emails[index]) {\n return kvCache.set(`email:${requestData.emails[index]}`, result);\n }\n return Promise.resolve();\n });\n ctx.waitUntil(Promise.all(cachePromises));\n }\n\n return new Response(JSON.stringify({ success: true, data: results }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n },\n });\n }\n\n return new Response(JSON.stringify({ success: false, error: 'Invalid request' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('Cloudflare Workers error:', error);\n return new Response(\n JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n }\n}\n\n// Durable Object for stateful validation\nexport class EmailValidatorDO {\n private state: DurableObjectState;\n private env: CloudflareEnv;\n private cache: EdgeCache<any>;\n\n constructor(state: DurableObjectState, env: CloudflareEnv) {\n this.state = state;\n this.env = env;\n this.cache = new EdgeCache(1000, 3600000);\n }\n\n async fetch(request: Request): Promise<Response> {\n const url = new URL(request.url);\n const path = url.pathname;\n\n switch (path) {\n case '/validate':\n return this.handleValidation(request);\n case '/cache/clear':\n return this.handleCacheClear();\n case '/cache/stats':\n return this.handleCacheStats();\n default:\n return new Response('Not found', { status: 404 });\n }\n }\n\n private async handleValidation(request: Request): Promise<Response> {\n try {\n const requestData: ValidateRequest = await request.json();\n\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n return new Response(JSON.stringify({ success: true, data: result }), {\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n return new Response(JSON.stringify({ success: true, data: results }), {\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n return new Response(JSON.stringify({ success: false, error: 'Invalid request' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n }\n\n private async handleCacheClear(): Promise<Response> {\n this.cache.clear();\n return new Response(JSON.stringify({ success: true, message: 'Cache cleared' }), {\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n private async handleCacheStats(): Promise<Response> {\n return new Response(\n JSON.stringify({\n success: true,\n stats: {\n size: this.cache.size(),\n },\n }),\n { headers: { 'Content-Type': 'application/json' } }\n );\n }\n}\n\n// Export handlers and Durable Object\nexport default {\n fetch: workerHandler,\n workerHandler,\n EmailValidatorDO,\n};\n\nexport { workerHandler };\n","/**\n * Vercel Edge Function adapter for email validation\n * Supports both Edge Runtime and Node.js runtime\n */\n\nimport type { ValidateEmailOptions } from '../../types';\nimport { validateEmailBatch, validateEmailCore } from '../core';\n\n// Vercel Request/Response types\nexport interface VercelRequest {\n method: string;\n url: string;\n headers: Headers;\n body?: unknown;\n query?: { [key: string]: string | string[] };\n}\n\nexport interface VercelResponse {\n status: (code: number) => VercelResponse;\n json: (data: unknown) => void;\n send: (data: unknown) => void;\n}\n\n// Request types\ninterface ValidateRequest {\n email?: string;\n emails?: string[];\n options?: ValidateEmailOptions;\n}\n\n// Edge Runtime handler\nexport async function edgeHandler(request: Request): Promise<Response> {\n // Handle CORS\n if (request.method === 'OPTIONS') {\n return new Response(null, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type',\n },\n });\n }\n\n try {\n let requestData: ValidateRequest;\n\n // Parse request based on method\n if (request.method === 'GET') {\n const url = new URL(request.url);\n const email = url.searchParams.get('email');\n const emails = url.searchParams.get('emails');\n\n requestData = {\n email: email || undefined,\n emails: emails ? emails.split(',') : undefined,\n options: {\n validateMx: url.searchParams.get('validateMx') === 'true',\n validateSMTP: url.searchParams.get('validateSMTP') === 'true',\n validateTypo: url.searchParams.get('validateTypo') !== 'false',\n validateDisposable: url.searchParams.get('validateDisposable') !== 'false',\n validateFree: url.searchParams.get('validateFree') !== 'false',\n },\n };\n } else if (request.method === 'POST') {\n requestData = await request.json();\n } else {\n return new Response(JSON.stringify({ success: false, error: 'Method not allowed' }), {\n status: 405,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Validate request\n if (!requestData.email && !requestData.emails) {\n return new Response(JSON.stringify({ success: false, error: 'Email or emails array is required' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Single email validation\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n return new Response(JSON.stringify({ success: true, data: result }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n },\n });\n }\n\n // Batch email validation\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n return new Response(JSON.stringify({ success: true, data: results }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n },\n });\n }\n\n return new Response(JSON.stringify({ success: false, error: 'Invalid request' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('Vercel Edge error:', error);\n return new Response(\n JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n }\n}\n\n// Node.js Runtime handler\nexport async function nodeHandler(req: VercelRequest, res: VercelResponse): Promise<void> {\n // Handle CORS\n if (req.method === 'OPTIONS') {\n res.status(200).send('');\n return;\n }\n\n try {\n let requestData: ValidateRequest;\n\n // Parse request based on method\n if (req.method === 'GET') {\n requestData = {\n email: req.query?.email as string | undefined,\n emails: req.query?.emails ? (req.query.emails as string).split(',') : undefined,\n options: {\n validateMx: req.query?.validateMx === 'true',\n validateSMTP: req.query?.validateSMTP === 'true',\n validateTypo: req.query?.validateTypo !== 'false',\n validateDisposable: req.query?.validateDisposable !== 'false',\n validateFree: req.query?.validateFree !== 'false',\n },\n };\n } else if (req.method === 'POST') {\n requestData = req.body as ValidateRequest;\n } else {\n res.status(405).json({ success: false, error: 'Method not allowed' });\n return;\n }\n\n // Validate request\n if (!requestData.email && !requestData.emails) {\n res.status(400).json({\n success: false,\n error: 'Email or emails array is required',\n });\n return;\n }\n\n // Single email validation\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n res.status(200).json({ success: true, data: result });\n return;\n }\n\n // Batch email validation\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n res.status(200).json({ success: true, data: results });\n return;\n }\n\n res.status(400).json({ success: false, error: 'Invalid request' });\n } catch (error) {\n console.error('Vercel Node error:', error);\n res.status(500).json({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n });\n }\n}\n\n// Export config for Vercel\nexport const config = {\n runtime: 'edge', // or 'nodejs'\n regions: ['iad1'], // Specify regions if needed\n};\n\n// Main handler that matches test expectations\nexport async function handler(request: Request): Promise<Response> {\n const url = new URL(request.url);\n const pathname = url.pathname;\n\n // Handle CORS preflight\n if (request.method === 'OPTIONS') {\n return new Response(null, {\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type',\n },\n });\n }\n\n const corsHeaders = {\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'no-store, max-age=0',\n 'X-Powered-By': 'Vercel Edge Functions',\n };\n\n try {\n // Health check endpoint\n if (pathname === '/api/health' && request.method === 'GET') {\n return new Response(\n JSON.stringify({\n status: 'healthy',\n platform: 'vercel',\n timestamp: new Date().toISOString(),\n }),\n {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n }\n );\n }\n\n // Single email validation\n if (pathname === '/api/validate' && request.method === 'POST') {\n // Check content type\n const contentType = request.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n return new Response(JSON.stringify({ error: 'Content-Type must be application/json' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n let body: any;\n try {\n body = await request.json();\n } catch {\n return new Response(JSON.stringify({ error: 'Invalid request body' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (!body.email) {\n return new Response(JSON.stringify({ error: 'Email is required' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Parse options from query params\n const options: Partial<ValidateEmailOptions> = {};\n if (url.searchParams.has('skipCache')) {\n options.skipCache = url.searchParams.get('skipCache') === 'true';\n }\n if (url.searchParams.has('validateTypo')) {\n options.validateTypo = url.searchParams.get('validateTypo') === 'true';\n }\n\n const result = await validateEmailCore(body.email, options);\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Batch validation\n if (pathname === '/api/validate/batch' && request.method === 'POST') {\n // Check content type\n const contentType = request.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n return new Response(JSON.stringify({ error: 'Content-Type must be application/json' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n let body: any;\n try {\n body = await request.json();\n } catch {\n return new Response(JSON.stringify({ error: 'Invalid request body' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (!body.emails || !Array.isArray(body.emails)) {\n return new Response(JSON.stringify({ error: 'Emails array is required' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (body.emails.length === 0) {\n return new Response(JSON.stringify({ error: 'Emails array is required' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (body.emails.length > 100) {\n return new Response(JSON.stringify({ error: 'Maximum 100 emails allowed per batch' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Parse options from query params\n const options: Record<string, any> = {};\n if (url.searchParams.has('batchSize')) {\n const batchSizeParam = url.searchParams.get('batchSize');\n if (batchSizeParam) {\n options.batchSize = parseInt(batchSizeParam, 10);\n }\n }\n\n const results = await validateEmailBatch(body.emails, options);\n return new Response(JSON.stringify({ results }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Method not allowed\n if (\n (pathname === '/api/validate' || pathname === '/api/validate/batch') &&\n request.method !== 'POST' &&\n request.method !== 'OPTIONS'\n ) {\n return new Response(JSON.stringify({ error: 'Method not allowed' }), {\n status: 405,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Not found\n return new Response(JSON.stringify({ error: 'Not found' }), {\n status: 404,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n } catch (error) {\n console.error('Handler error:', error);\n return new Response(JSON.stringify({ error: 'Internal server error' }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n}\n\n// Export handlers\nexport default {\n edgeHandler,\n nodeHandler,\n handler,\n};\n"],"names":["exports","key","__async","stringSimilarity","handler"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../node_modules/string-similarity-js/dist/string-similarity.js","../../src/serverless/verifier.ts","../../src/serverless/adapters/aws-lambda.ts","../../src/serverless/adapters/cloudflare.ts","../../src/serverless/adapters/vercel.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stringSimilarity = void 0;\n/* global exports, Map */\n/**\n * Calculate similarity between two strings\n * @param {string} str1 First string to match\n * @param {string} str2 Second string to match\n * @param {number} [substringLength=2] Optional. Length of substring to be used in calculating similarity. Default 2.\n * @param {boolean} [caseSensitive=false] Optional. Whether you want to consider case in string matching. Default false;\n * @returns Number between 0 and 1, with 0 being a low match score.\n */\nvar stringSimilarity = function (str1, str2, substringLength, caseSensitive) {\n if (substringLength === void 0) { substringLength = 2; }\n if (caseSensitive === void 0) { caseSensitive = false; }\n if (!caseSensitive) {\n str1 = str1.toLowerCase();\n str2 = str2.toLowerCase();\n }\n if (str1.length < substringLength || str2.length < substringLength)\n return 0;\n var map = new Map();\n for (var i = 0; i < str1.length - (substringLength - 1); i++) {\n var substr1 = str1.substr(i, substringLength);\n map.set(substr1, map.has(substr1) ? map.get(substr1) + 1 : 1);\n }\n var match = 0;\n for (var j = 0; j < str2.length - (substringLength - 1); j++) {\n var substr2 = str2.substr(j, substringLength);\n var count = map.has(substr2) ? map.get(substr2) : 0;\n if (count > 0) {\n map.set(substr2, count - 1);\n match++;\n }\n }\n return (match * 2) / (str1.length + str2.length - ((substringLength - 1) * 2));\n};\nexports.stringSimilarity = stringSimilarity;\nexports.default = exports.stringSimilarity;\n//# sourceMappingURL=string-similarity.js.map","/**\n * Core serverless email validator\n * Platform-agnostic implementation without Node.js dependencies\n */\n\n// Import utility functions\nimport { stringSimilarity } from 'string-similarity-js';\n\n// Import full data files for comprehensive validation\n// These are the complete, unminified JSON files\nimport disposableProviders from '../disposable-email-providers.json';\nimport freeProviders from '../free-email-providers.json';\nimport type { DomainSuggesterOptions, EmailValidationResult, ValidateEmailOptions } from '../types';\n\n// Platform-agnostic cache implementation\nexport class EdgeCache<T> {\n private cache = new Map<string, { value: T; expires: number }>();\n private maxSize: number;\n private ttl: number;\n\n constructor(maxSize = 1000, ttl = 3600000) {\n this.maxSize = maxSize;\n this.ttl = ttl;\n }\n\n get(key: string): T | undefined {\n const item = this.cache.get(key);\n if (!item) return undefined;\n if (Date.now() > item.expires) {\n this.cache.delete(key);\n return undefined;\n }\n return item.value;\n }\n\n set(key: string, value: T): void {\n if (this.cache.size >= this.maxSize) {\n // Remove oldest entries\n const entriesToRemove = Math.max(1, Math.floor(this.maxSize * 0.1));\n const keys = Array.from(this.cache.keys()).slice(0, entriesToRemove);\n keys.forEach((key) => this.cache.delete(key));\n }\n this.cache.set(key, {\n value,\n expires: Date.now() + this.ttl,\n });\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n size(): number {\n return this.cache.size;\n }\n}\n\n// Global cache instances\nexport const validationCache = new EdgeCache<EmailValidationResult>(1000);\nexport const mxCache = new EdgeCache<string[]>(500);\n\n// Email validation regex patterns\nconst VALID_EMAIL_REGEX =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n// Common email provider domains for typo detection\nexport const COMMON_DOMAINS = [\n 'gmail.com',\n 'yahoo.com',\n 'hotmail.com',\n 'outlook.com',\n 'icloud.com',\n 'aol.com',\n 'msn.com',\n 'live.com',\n 'ymail.com',\n 'protonmail.com',\n 'zoho.com',\n 'mail.com',\n 'gmx.com',\n 'fastmail.com',\n 'tutanota.com',\n 'qq.com',\n '163.com',\n '126.com',\n 'sina.com',\n 'foxmail.com',\n 'yandex.com',\n 'mail.ru',\n 'rambler.ru',\n 'gmx.de',\n 'web.de',\n 't-online.de',\n 'orange.fr',\n 'wanadoo.fr',\n 'free.fr',\n 'sfr.fr',\n 'laposte.net',\n 'libero.it',\n 'virgilio.it',\n 'alice.it',\n 'tin.it',\n 'bt.com',\n 'btinternet.com',\n 'virginmedia.com',\n 'sky.com',\n 'talktalk.net',\n 'rogers.com',\n 'shaw.ca',\n 'sympatico.ca',\n 'bellsouth.net',\n 'comcast.net',\n 'cox.net',\n 'earthlink.net',\n 'charter.net',\n 'optonline.net',\n 'verizon.net',\n 'att.net',\n 'sbcglobal.net',\n 'me.com',\n 'mac.com',\n 'rocketmail.com',\n];\n\n// Common typo patterns\nconst TYPO_PATTERNS = [\n // Gmail typos\n { pattern: /gmial\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmai\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmil\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.co$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.con$/i, replacement: 'gmail.com' },\n { pattern: /gmail\\.cm$/i, replacement: 'gmail.com' },\n { pattern: /gmal\\.com$/i, replacement: 'gmail.com' },\n { pattern: /gnail\\.com$/i, replacement: 'gmail.com' },\n\n // Yahoo typos\n { pattern: /yahooo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaho\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yahoo\\.co$/i, replacement: 'yahoo.com' },\n { pattern: /yaoo\\.com$/i, replacement: 'yahoo.com' },\n { pattern: /yaboo\\.com$/i, replacement: 'yahoo.com' },\n\n // Hotmail typos\n { pattern: /hotmial\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmai\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmil\\.com$/i, replacement: 'hotmail.com' },\n { pattern: /hotmail\\.co$/i, replacement: 'hotmail.com' },\n { pattern: /hormail\\.com$/i, replacement: 'hotmail.com' },\n\n // Outlook typos\n { pattern: /outlok\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outloo\\.com$/i, replacement: 'outlook.com' },\n { pattern: /outlook\\.co$/i, replacement: 'outlook.com' },\n { pattern: /putlook\\.com$/i, replacement: 'outlook.com' },\n\n // iCloud typos\n { pattern: /iclud\\.com$/i, replacement: 'icloud.com' },\n { pattern: /icloud\\.co$/i, replacement: 'icloud.com' },\n { pattern: /icoud\\.com$/i, replacement: 'icloud.com' },\n];\n\n// Platform-agnostic DNS resolution interface\nexport interface DNSResolver {\n resolveMx(domain: string): Promise<Array<{ exchange: string; priority: number }>>;\n\n resolveTxt(domain: string): Promise<string[]>;\n}\n\n// Stub DNS resolver for environments without DNS capabilities\nexport class StubDNSResolver implements DNSResolver {\n async resolveMx(_domain: string): Promise<Array<{ exchange: string; priority: number }>> {\n // Return null to indicate DNS is not available\n return [];\n }\n\n async resolveTxt(_domain: string): Promise<string[]> {\n return [];\n }\n}\n\n// Domain suggestion function\nexport function suggestDomain(domain: string, options?: DomainSuggesterOptions): string | null {\n const threshold = options?.threshold || 2;\n const domains = options?.customDomains || COMMON_DOMAINS;\n\n // Check common typos first\n for (const { pattern, replacement } of TYPO_PATTERNS) {\n if (pattern.test(domain)) {\n return replacement;\n }\n }\n\n // If domain is already in the list of common domains, it's correct\n if (domains.includes(domain)) {\n return null;\n }\n\n // Find closest domain using Levenshtein distance\n let minDistance = Infinity;\n let suggestion: string | null = null;\n\n for (const commonDomain of domains) {\n // Skip if it's the same domain (case-insensitive)\n if (domain.toLowerCase() === commonDomain.toLowerCase()) {\n return null;\n }\n\n // Use string similarity to calculate distance\n const similarity = stringSimilarity(domain.toLowerCase(), commonDomain.toLowerCase());\n const distance = Math.round((1 - similarity) * Math.max(domain.length, commonDomain.length));\n if (distance > 0 && distance <= threshold && distance < minDistance) {\n minDistance = distance;\n suggestion = commonDomain;\n }\n }\n\n return suggestion;\n}\n\n// Core validation function\nexport async function validateEmailCore(\n email: string,\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult> {\n const normalizedEmail = email.toLowerCase().trim();\n\n // Check cache\n if (!options?.skipCache) {\n const cached = validationCache.get(normalizedEmail);\n if (cached) return cached;\n }\n\n const result: EmailValidationResult = {\n valid: false,\n email: normalizedEmail,\n validators: {},\n };\n\n // Syntax validation\n if (options?.validateSyntax !== false) {\n const syntaxValid = VALID_EMAIL_REGEX.test(normalizedEmail);\n result.validators.syntax = { valid: syntaxValid };\n if (!syntaxValid) {\n validationCache.set(normalizedEmail, result);\n return result;\n }\n }\n\n const [local, domain] = normalizedEmail.split('@');\n result.local = local;\n result.domain = domain;\n\n // Typo detection and suggestion\n if (options?.validateTypo !== false) {\n const suggestion = suggestDomain(domain, options?.domainSuggesterOptions);\n result.validators.typo = {\n valid: !suggestion,\n suggestion: suggestion || undefined,\n };\n }\n\n // Disposable email check\n if (options?.validateDisposable !== false) {\n const isDisposable = disposableProviders.includes(domain);\n result.validators.disposable = { valid: !isDisposable };\n }\n\n // Free email check\n if (options?.validateFree !== false) {\n const isFree = freeProviders.includes(domain);\n result.validators.free = { valid: !isFree };\n }\n\n // MX record validation (if DNS resolver is available)\n if (options?.validateMx && options.dnsResolver) {\n try {\n const mxRecords = await options.dnsResolver.resolveMx(domain);\n const hasMx = mxRecords && mxRecords.length > 0;\n result.validators.mx = {\n valid: hasMx,\n records: hasMx ? mxRecords.map((r) => r.exchange) : undefined,\n };\n } catch (error) {\n result.validators.mx = {\n valid: false,\n error: error instanceof Error ? error.message : 'MX validation failed',\n };\n }\n }\n\n // Overall valid status - only syntax, typo, disposable, and MX matter for validity\n // Free provider detection is informational only\n const criticalValidators = ['syntax', 'typo', 'disposable', 'mx'];\n result.valid = criticalValidators.every((key) => {\n const validator = result.validators[key as keyof typeof result.validators];\n return !validator || validator.valid !== false;\n });\n\n // Cache result\n if (!options?.skipCache) {\n validationCache.set(normalizedEmail, result);\n }\n\n return result;\n}\n\n// Batch validation\nexport async function validateEmailBatch(\n emails: string[],\n options?: ValidateEmailOptions & { dnsResolver?: DNSResolver }\n): Promise<EmailValidationResult[]> {\n // Process in chunks to avoid overwhelming the system\n const chunkSize = options?.batchSize || 10;\n const results: EmailValidationResult[] = [];\n\n for (let i = 0; i < emails.length; i += chunkSize) {\n const chunk = emails.slice(i, i + chunkSize);\n const chunkResults = await Promise.all(chunk.map((email) => validateEmailCore(email, options)));\n results.push(...chunkResults);\n }\n\n return results;\n}\n\n// Export cache control functions\nexport function clearCache(): void {\n validationCache.clear();\n mxCache.clear();\n}\n\n// Export types\nexport type {\n DomainSuggesterOptions,\n EmailValidationResult,\n ValidateEmailOptions,\n} from '../types';\n","/**\n * AWS Lambda adapter for email validation\n * Supports API Gateway and direct Lambda invocation\n */\n\nimport type { EmailValidationResult, ValidateEmailOptions } from '../../types';\nimport { clearCache, validateEmailBatch, validateEmailCore } from '../verifier';\n\n// AWS Lambda handler types\nexport interface APIGatewayProxyEvent {\n body: string | null;\n headers: { [key: string]: string };\n httpMethod: string;\n path: string;\n queryStringParameters: { [key: string]: string } | null;\n pathParameters: { [key: string]: string } | null;\n}\n\nexport interface APIGatewayProxyResult {\n statusCode: number;\n headers?: { [key: string]: string };\n body: string;\n}\n\nexport interface LambdaContext {\n functionName: string;\n functionVersion: string;\n awsRequestId: string;\n remainingTimeInMillis: number;\n}\n\n// Request/Response types\ninterface ValidateRequest {\n email?: string;\n emails?: string[];\n options?: ValidateEmailOptions;\n}\n\ninterface ValidateResponse {\n success: boolean;\n data?: EmailValidationResult | EmailValidationResult[];\n error?: string;\n}\n\n// API Gateway handler\nexport async function apiGatewayHandler(\n event: APIGatewayProxyEvent,\n _context: LambdaContext\n): Promise<APIGatewayProxyResult> {\n const headers = {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Headers': 'Content-Type',\n 'Access-Control-Allow-Methods': 'POST, OPTIONS',\n };\n\n // Handle CORS preflight\n if (event.httpMethod === 'OPTIONS') {\n return {\n statusCode: 200,\n headers,\n body: '',\n };\n }\n\n try {\n // Parse request body\n const request: ValidateRequest = event.body ? JSON.parse(event.body) : {};\n\n // Validate request\n if (!request.email && !request.emails) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({\n success: false,\n error: 'Email or emails array is required',\n }),\n };\n }\n\n // Single email validation\n if (request.email) {\n const result = await validateEmailCore(request.email, request.options);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({\n success: true,\n data: result,\n }),\n };\n }\n\n // Batch email validation\n if (request.emails) {\n const results = await validateEmailBatch(request.emails, request.options);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({\n success: true,\n data: results,\n }),\n };\n }\n\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({\n success: false,\n error: 'Invalid request',\n }),\n };\n } catch (error) {\n console.error('Lambda error:', error);\n return {\n statusCode: 500,\n headers,\n body: JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n };\n }\n}\n\n// Direct Lambda handler\nexport async function lambdaHandler(event: ValidateRequest, _context: LambdaContext): Promise<ValidateResponse> {\n try {\n // Validate request\n if (!event.email && !event.emails) {\n return {\n success: false,\n error: 'Email or emails array is required',\n };\n }\n\n // Single email validation\n if (event.email) {\n const result = await validateEmailCore(event.email, event.options);\n return {\n success: true,\n data: result,\n };\n }\n\n // Batch email validation\n if (event.emails) {\n const results = await validateEmailBatch(event.emails, event.options);\n return {\n success: true,\n data: results,\n };\n }\n\n return {\n success: false,\n error: 'Invalid request',\n };\n } catch (error) {\n console.error('Lambda error:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n };\n }\n}\n\n// Cache management handler\nexport async function cacheHandler(\n event: { action: 'clear' | 'stats' },\n _context: LambdaContext\n): Promise<{ success: boolean; message?: string; stats?: unknown }> {\n switch (event.action) {\n case 'clear':\n clearCache();\n return { success: true, message: 'Cache cleared' };\n case 'stats':\n // Return cache statistics if needed\n return { success: true, message: 'Cache stats not implemented' };\n default:\n return { success: false, message: 'Invalid action' };\n }\n}\n\n// Main handler matching test expectations\nexport async function handler(event: any, _context: any): Promise<any> {\n const headers = {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Headers': 'Content-Type',\n 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n };\n\n // Handle CORS preflight\n if (event.httpMethod === 'OPTIONS') {\n return {\n statusCode: 204,\n headers,\n body: '',\n };\n }\n\n // Handle health check\n if (event.path === '/health' && event.httpMethod === 'GET') {\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({\n status: 'healthy',\n timestamp: new Date().toISOString(),\n }),\n };\n }\n\n // Handle single email validation\n if (event.path === '/validate' && event.httpMethod === 'POST') {\n try {\n let body: any = {};\n\n // Handle base64 encoded body\n if (event.isBase64Encoded) {\n const decoded = Buffer.from(event.body || '', 'base64').toString('utf-8');\n body = JSON.parse(decoded);\n } else {\n body = event.body ? JSON.parse(event.body) : {};\n }\n\n // Check for email\n if (!body.email) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Email is required' }),\n };\n }\n\n // Parse options from query params\n const options: Record<string, any> = {};\n if (event.queryStringParameters) {\n if (event.queryStringParameters.skipCache === 'true') {\n options.skipCache = true;\n }\n if (event.queryStringParameters.validateTypo === 'false') {\n options.validateTypo = false;\n }\n }\n\n const result = await validateEmailCore(body.email, options);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify(result),\n };\n } catch (error) {\n if (error instanceof SyntaxError) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Invalid request body' }),\n };\n }\n console.error('Validation error:', error);\n return {\n statusCode: 500,\n headers,\n body: JSON.stringify({ error: 'Internal server error' }),\n };\n }\n }\n\n // Handle batch validation\n if (event.path === '/validate/batch' && event.httpMethod === 'POST') {\n try {\n let body: any = {};\n\n // Handle base64 encoded body\n if (event.isBase64Encoded) {\n const decoded = Buffer.from(event.body || '', 'base64').toString('utf-8');\n body = JSON.parse(decoded);\n } else {\n body = event.body ? JSON.parse(event.body) : {};\n }\n\n // Check for emails array\n if (!body.emails || !Array.isArray(body.emails)) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Emails array is required' }),\n };\n }\n\n if (body.emails.length === 0) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Emails array is required' }),\n };\n }\n\n if (body.emails.length > 100) {\n return {\n statusCode: 400,\n headers,\n body: JSON.stringify({ error: 'Maximum 100 emails allowed per batch' }),\n };\n }\n\n const results = await validateEmailBatch(body.emails);\n return {\n statusCode: 200,\n headers,\n body: JSON.stringify({ results }),\n };\n } catch (error) {\n console.error('Batch validation error:', error);\n return {\n statusCode: 500,\n headers,\n body: JSON.stringify({ error: 'Internal server error' }),\n };\n }\n }\n\n // Handle unsupported methods\n if (\n (event.path === '/validate' || event.path === '/validate/batch') &&\n event.httpMethod !== 'POST' &&\n event.httpMethod !== 'OPTIONS'\n ) {\n return {\n statusCode: 405,\n headers,\n body: JSON.stringify({ error: 'Method not allowed' }),\n };\n }\n\n // Handle unknown routes\n return {\n statusCode: 404,\n headers,\n body: JSON.stringify({ error: 'Not found' }),\n };\n}\n\n// Export handlers\nexport default {\n apiGatewayHandler,\n lambdaHandler,\n cacheHandler,\n handler,\n};\n","/**\n * Cloudflare Workers adapter for email validation\n * Supports Workers, Pages Functions, and Durable Objects\n */\n\nimport type { EmailValidationResult, ValidateEmailOptions } from '../../types';\nimport { EdgeCache, validateEmailBatch, validateEmailCore } from '../verifier';\n\n// Cloudflare Workers types\n\n// KVNamespace interface for TypeScript\ninterface KVNamespace {\n get<T = unknown>(key: string, type?: 'text' | 'json' | 'arrayBuffer' | 'stream'): Promise<T | null>;\n\n put(key: string, value: string | ArrayBuffer | ReadableStream, options?: { expirationTtl?: number }): Promise<void>;\n\n delete(key: string): Promise<void>;\n}\n\n// DurableObject interfaces\ninterface DurableObjectNamespace {\n idFromName(name: string): DurableObjectId;\n\n get(id: DurableObjectId): DurableObjectStub;\n}\n\ninterface DurableObjectId {\n toString(): string;\n}\n\ninterface DurableObjectStub {\n fetch(request: Request): Promise<Response>;\n}\n\ninterface DurableObjectState {\n storage: DurableObjectStorage;\n}\n\ninterface DurableObjectStorage {\n get<T = unknown>(key: string): Promise<T | undefined>;\n\n put<T = unknown>(key: string, value: T): Promise<void>;\n\n delete(key: string): Promise<void>;\n}\n\nexport interface CloudflareRequest extends Request {\n cf?: {\n country?: string;\n colo?: string;\n timezone?: string;\n };\n}\n\nexport interface CloudflareEnv {\n // KV namespace for caching\n EMAIL_CACHE?: KVNamespace;\n // Durable Object namespace\n EMAIL_VALIDATOR?: DurableObjectNamespace;\n\n // Environment variables\n [key: string]: unknown;\n}\n\nexport interface CloudflareContext {\n waitUntil(promise: Promise<unknown>): void;\n\n passThroughOnException(): void;\n}\n\n// Request types\ninterface ValidateRequest {\n email?: string;\n emails?: string[];\n options?: ValidateEmailOptions;\n}\n\n// KV-based cache implementation\nclass KVCache<T> {\n constructor(\n private kv: KVNamespace,\n private ttl: number = 3600\n ) {}\n\n async get(key: string): Promise<T | undefined> {\n const value = await this.kv.get(key, 'json');\n return value as T | undefined;\n }\n\n async set(key: string, value: T): Promise<void> {\n await this.kv.put(key, JSON.stringify(value), {\n expirationTtl: this.ttl,\n });\n }\n\n async delete(key: string): Promise<void> {\n await this.kv.delete(key);\n }\n}\n\n// Cloudflare Workers handler\nasync function workerHandler(\n request: CloudflareRequest,\n env: CloudflareEnv,\n ctx: CloudflareContext\n): Promise<Response> {\n // Set up KV cache if available\n let kvCache: KVCache<EmailValidationResult> | undefined;\n if (env.EMAIL_CACHE) {\n kvCache = new KVCache(env.EMAIL_CACHE);\n }\n\n // Handle CORS\n if (request.method === 'OPTIONS') {\n return new Response(null, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type',\n },\n });\n }\n\n try {\n let requestData: ValidateRequest;\n\n // Parse request based on method\n if (request.method === 'GET') {\n const url = new URL(request.url);\n const email = url.searchParams.get('email');\n const emails = url.searchParams.get('emails');\n\n requestData = {\n email: email || undefined,\n emails: emails ? emails.split(',') : undefined,\n options: {\n validateMx: url.searchParams.get('validateMx') === 'true',\n validateSMTP: url.searchParams.get('validateSMTP') === 'true',\n validateTypo: url.searchParams.get('validateTypo') !== 'false',\n validateDisposable: url.searchParams.get('validateDisposable') !== 'false',\n validateFree: url.searchParams.get('validateFree') !== 'false',\n },\n };\n } else if (request.method === 'POST') {\n requestData = await request.json();\n } else {\n return new Response(JSON.stringify({ success: false, error: 'Method not allowed' }), {\n status: 405,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Validate request\n if (!requestData.email && !requestData.emails) {\n return new Response(JSON.stringify({ success: false, error: 'Email or emails array is required' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Check KV cache for single email\n if (requestData.email && kvCache && !requestData.options?.skipCache) {\n const cached = await kvCache.get(`email:${requestData.email}`);\n if (cached) {\n return new Response(JSON.stringify({ success: true, data: cached, cached: true }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n 'CF-Cache-Status': 'HIT',\n },\n });\n }\n }\n\n // Single email validation\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n\n // Store in KV cache\n if (kvCache && !requestData.options?.skipCache) {\n ctx.waitUntil(kvCache.set(`email:${requestData.email}`, result));\n }\n\n return new Response(JSON.stringify({ success: true, data: result }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n 'CF-Cache-Status': 'MISS',\n },\n });\n }\n\n // Batch email validation\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n\n // Store each result in KV cache\n if (kvCache && !requestData.options?.skipCache) {\n const cachePromises = results.map((result, index) => {\n if (requestData.emails && requestData.emails[index]) {\n return kvCache.set(`email:${requestData.emails[index]}`, result);\n }\n return Promise.resolve();\n });\n ctx.waitUntil(Promise.all(cachePromises));\n }\n\n return new Response(JSON.stringify({ success: true, data: results }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n },\n });\n }\n\n return new Response(JSON.stringify({ success: false, error: 'Invalid request' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('Cloudflare Workers error:', error);\n return new Response(\n JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n }\n}\n\n// Durable Object for stateful validation\nexport class EmailValidatorDO {\n private state: DurableObjectState;\n private env: CloudflareEnv;\n private cache: EdgeCache<any>;\n\n constructor(state: DurableObjectState, env: CloudflareEnv) {\n this.state = state;\n this.env = env;\n this.cache = new EdgeCache(1000, 3600000);\n }\n\n async fetch(request: Request): Promise<Response> {\n const url = new URL(request.url);\n const path = url.pathname;\n\n switch (path) {\n case '/validate':\n return this.handleValidation(request);\n case '/cache/clear':\n return this.handleCacheClear();\n case '/cache/stats':\n return this.handleCacheStats();\n default:\n return new Response('Not found', { status: 404 });\n }\n }\n\n private async handleValidation(request: Request): Promise<Response> {\n try {\n const requestData: ValidateRequest = await request.json();\n\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n return new Response(JSON.stringify({ success: true, data: result }), {\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n return new Response(JSON.stringify({ success: true, data: results }), {\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n return new Response(JSON.stringify({ success: false, error: 'Invalid request' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n return new Response(\n JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n { status: 500, headers: { 'Content-Type': 'application/json' } }\n );\n }\n }\n\n private async handleCacheClear(): Promise<Response> {\n this.cache.clear();\n return new Response(JSON.stringify({ success: true, message: 'Cache cleared' }), {\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n private async handleCacheStats(): Promise<Response> {\n return new Response(\n JSON.stringify({\n success: true,\n stats: {\n size: this.cache.size(),\n },\n }),\n { headers: { 'Content-Type': 'application/json' } }\n );\n }\n}\n\n// Export handlers and Durable Object\nexport default {\n fetch: workerHandler,\n workerHandler,\n EmailValidatorDO,\n};\n\nexport { workerHandler };\n","/**\n * Vercel Edge Function adapter for email validation\n * Supports both Edge Runtime and Node.js runtime\n */\n\nimport type { ValidateEmailOptions } from '../../types';\nimport { validateEmailBatch, validateEmailCore } from '../verifier';\n\n// Vercel Request/Response types\nexport interface VercelRequest {\n method: string;\n url: string;\n headers: Headers;\n body?: unknown;\n query?: { [key: string]: string | string[] };\n}\n\nexport interface VercelResponse {\n status: (code: number) => VercelResponse;\n json: (data: unknown) => void;\n send: (data: unknown) => void;\n}\n\n// Request types\ninterface ValidateRequest {\n email?: string;\n emails?: string[];\n options?: ValidateEmailOptions;\n}\n\n// Edge Runtime handler\nexport async function edgeHandler(request: Request): Promise<Response> {\n // Handle CORS\n if (request.method === 'OPTIONS') {\n return new Response(null, {\n status: 200,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type',\n },\n });\n }\n\n try {\n let requestData: ValidateRequest;\n\n // Parse request based on method\n if (request.method === 'GET') {\n const url = new URL(request.url);\n const email = url.searchParams.get('email');\n const emails = url.searchParams.get('emails');\n\n requestData = {\n email: email || undefined,\n emails: emails ? emails.split(',') : undefined,\n options: {\n validateMx: url.searchParams.get('validateMx') === 'true',\n validateSMTP: url.searchParams.get('validateSMTP') === 'true',\n validateTypo: url.searchParams.get('validateTypo') !== 'false',\n validateDisposable: url.searchParams.get('validateDisposable') !== 'false',\n validateFree: url.searchParams.get('validateFree') !== 'false',\n },\n };\n } else if (request.method === 'POST') {\n requestData = await request.json();\n } else {\n return new Response(JSON.stringify({ success: false, error: 'Method not allowed' }), {\n status: 405,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Validate request\n if (!requestData.email && !requestData.emails) {\n return new Response(JSON.stringify({ success: false, error: 'Email or emails array is required' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n }\n\n // Single email validation\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n return new Response(JSON.stringify({ success: true, data: result }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n },\n });\n }\n\n // Batch email validation\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n return new Response(JSON.stringify({ success: true, data: results }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'public, max-age=3600',\n },\n });\n }\n\n return new Response(JSON.stringify({ success: false, error: 'Invalid request' }), {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n });\n } catch (error) {\n console.error('Vercel Edge error:', error);\n return new Response(\n JSON.stringify({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n }\n}\n\n// Node.js Runtime handler\nexport async function nodeHandler(req: VercelRequest, res: VercelResponse): Promise<void> {\n // Handle CORS\n if (req.method === 'OPTIONS') {\n res.status(200).send('');\n return;\n }\n\n try {\n let requestData: ValidateRequest;\n\n // Parse request based on method\n if (req.method === 'GET') {\n requestData = {\n email: req.query?.email as string | undefined,\n emails: req.query?.emails ? (req.query.emails as string).split(',') : undefined,\n options: {\n validateMx: req.query?.validateMx === 'true',\n validateSMTP: req.query?.validateSMTP === 'true',\n validateTypo: req.query?.validateTypo !== 'false',\n validateDisposable: req.query?.validateDisposable !== 'false',\n validateFree: req.query?.validateFree !== 'false',\n },\n };\n } else if (req.method === 'POST') {\n requestData = req.body as ValidateRequest;\n } else {\n res.status(405).json({ success: false, error: 'Method not allowed' });\n return;\n }\n\n // Validate request\n if (!requestData.email && !requestData.emails) {\n res.status(400).json({\n success: false,\n error: 'Email or emails array is required',\n });\n return;\n }\n\n // Single email validation\n if (requestData.email) {\n const result = await validateEmailCore(requestData.email, requestData.options);\n res.status(200).json({ success: true, data: result });\n return;\n }\n\n // Batch email validation\n if (requestData.emails) {\n const results = await validateEmailBatch(requestData.emails, requestData.options);\n res.status(200).json({ success: true, data: results });\n return;\n }\n\n res.status(400).json({ success: false, error: 'Invalid request' });\n } catch (error) {\n console.error('Vercel Node error:', error);\n res.status(500).json({\n success: false,\n error: error instanceof Error ? error.message : 'Internal server error',\n });\n }\n}\n\n// Export config for Vercel\nexport const config = {\n runtime: 'edge', // or 'nodejs'\n regions: ['iad1'], // Specify regions if needed\n};\n\n// Main handler that matches test expectations\nexport async function handler(request: Request): Promise<Response> {\n const url = new URL(request.url);\n const pathname = url.pathname;\n\n // Handle CORS preflight\n if (request.method === 'OPTIONS') {\n return new Response(null, {\n status: 204,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type',\n },\n });\n }\n\n const corsHeaders = {\n 'Access-Control-Allow-Origin': '*',\n 'Cache-Control': 'no-store, max-age=0',\n 'X-Powered-By': 'Vercel Edge Functions',\n };\n\n try {\n // Health check endpoint\n if (pathname === '/api/health' && request.method === 'GET') {\n return new Response(\n JSON.stringify({\n status: 'healthy',\n platform: 'vercel',\n timestamp: new Date().toISOString(),\n }),\n {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n }\n );\n }\n\n // Single email validation\n if (pathname === '/api/validate' && request.method === 'POST') {\n // Check content type\n const contentType = request.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n return new Response(JSON.stringify({ error: 'Content-Type must be application/json' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n let body: any;\n try {\n body = await request.json();\n } catch {\n return new Response(JSON.stringify({ error: 'Invalid request body' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (!body.email) {\n return new Response(JSON.stringify({ error: 'Email is required' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Parse options from query params\n const options: Partial<ValidateEmailOptions> = {};\n if (url.searchParams.has('skipCache')) {\n options.skipCache = url.searchParams.get('skipCache') === 'true';\n }\n if (url.searchParams.has('validateTypo')) {\n options.validateTypo = url.searchParams.get('validateTypo') === 'true';\n }\n\n const result = await validateEmailCore(body.email, options);\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Batch validation\n if (pathname === '/api/validate/batch' && request.method === 'POST') {\n // Check content type\n const contentType = request.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n return new Response(JSON.stringify({ error: 'Content-Type must be application/json' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n let body: any;\n try {\n body = await request.json();\n } catch {\n return new Response(JSON.stringify({ error: 'Invalid request body' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (!body.emails || !Array.isArray(body.emails)) {\n return new Response(JSON.stringify({ error: 'Emails array is required' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (body.emails.length === 0) {\n return new Response(JSON.stringify({ error: 'Emails array is required' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n if (body.emails.length > 100) {\n return new Response(JSON.stringify({ error: 'Maximum 100 emails allowed per batch' }), {\n status: 400,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Parse options from query params\n const options: Record<string, any> = {};\n if (url.searchParams.has('batchSize')) {\n const batchSizeParam = url.searchParams.get('batchSize');\n if (batchSizeParam) {\n options.batchSize = parseInt(batchSizeParam, 10);\n }\n }\n\n const results = await validateEmailBatch(body.emails, options);\n return new Response(JSON.stringify({ results }), {\n status: 200,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Method not allowed\n if (\n (pathname === '/api/validate' || pathname === '/api/validate/batch') &&\n request.method !== 'POST' &&\n request.method !== 'OPTIONS'\n ) {\n return new Response(JSON.stringify({ error: 'Method not allowed' }), {\n status: 405,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n\n // Not found\n return new Response(JSON.stringify({ error: 'Not found' }), {\n status: 404,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n } catch (error) {\n console.error('Handler error:', error);\n return new Response(JSON.stringify({ error: 'Internal server error' }), {\n status: 500,\n headers: {\n 'Content-Type': 'application/json',\n ...corsHeaders,\n },\n });\n }\n}\n\n// Export handlers\nexport default {\n edgeHandler,\n nodeHandler,\n handler,\n};\n"],"names":["exports","key","__async","stringSimilarity","handler"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -6,4 +6,4 @@ export type { DomainSuggesterOptions, EmailValidationResult, ValidateEmailOption
|
|
|
6
6
|
export { default as awsLambda } from './adapters/aws-lambda';
|
|
7
7
|
export { default as cloudflare, EmailValidatorDO } from './adapters/cloudflare';
|
|
8
8
|
export { default as vercel } from './adapters/vercel';
|
|
9
|
-
export { COMMON_DOMAINS, clearCache, type DNSResolver, EdgeCache, StubDNSResolver, suggestDomain, validateEmailBatch, validateEmailCore, validateEmailCore as validateEmail, } from './
|
|
9
|
+
export { COMMON_DOMAINS, clearCache, type DNSResolver, EdgeCache, StubDNSResolver, suggestDomain, validateEmailBatch, validateEmailCore, validateEmailCore as validateEmail, } from './verifier';
|