UNPKG

@mikkelscheike/email-provider-links

Version:

TypeScript library for email provider detection with 140 providers (259 domains), concurrent DNS resolution, alias normalization, and HTTPS login URL validation for login and password reset flows

71 lines 2.43 kB
"use strict"; /** * Provider Data Schema * * This represents the compressed format for provider data * designed to reduce file size and improve parsing performance. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.TXT_PATTERN_COMPRESSION = void 0; exports.compressTxtPattern = compressTxtPattern; exports.decompressTxtPattern = decompressTxtPattern; exports.validateProvider = validateProvider; /** * Common TXT pattern prefixes that can be compressed */ exports.TXT_PATTERN_COMPRESSION = { 'v=spf1 include:': 'spf:', 'v=spf1 ': 'spf1:', 'google-site-verification=': 'gsv:', 'MS=ms': 'ms', 'zoho-verification=': 'zv:', 'mailgun-verification=': 'mv:' }; /** * Compress TXT patterns by removing common prefixes */ function compressTxtPattern(pattern) { for (const [prefix, compressed] of Object.entries(exports.TXT_PATTERN_COMPRESSION)) { if (pattern.startsWith(prefix)) { return compressed + pattern.substring(prefix.length); } } return pattern; } /** * Decompress TXT patterns by restoring prefixes */ function decompressTxtPattern(compressed) { for (const [prefix, compressedPrefix] of Object.entries(exports.TXT_PATTERN_COMPRESSION)) { if (compressed.startsWith(compressedPrefix)) { return prefix + compressed.substring(compressedPrefix.length); } } return compressed; } /** * Validation schema for providers */ function validateProvider(provider) { const errors = []; if (!provider.id || typeof provider.id !== 'string') { errors.push('Provider ID is required and must be a string'); } if (!provider.companyProvider || typeof provider.companyProvider !== 'string') { errors.push('Company provider is required and must be a string'); } if (provider.loginUrl !== null && (typeof provider.loginUrl !== 'string' || !provider.loginUrl.startsWith('https://'))) { errors.push('Login URL must be null or a string starting with HTTPS'); } if (provider.domains && !Array.isArray(provider.domains)) { errors.push('Domains must be an array'); } if (provider.mx && !Array.isArray(provider.mx)) { errors.push('MX patterns must be an array'); } if (provider.txt && !Array.isArray(provider.txt)) { errors.push('TXT patterns must be an array'); } return errors; } //# sourceMappingURL=schema.js.map