UNPKG

@xyz/whois

Version:

A powerful TypeScript/JavaScript tool for comprehensive domain analysis, featuring detailed WHOIS data with registration dates, registrars, and domain status. Offers SSL certificate extraction (with PEM support), DNS records, and server details. Includes

103 lines (102 loc) 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getWhoisData = getWhoisData; const index_1 = require("../index"); const patterns_1 = require("./utils/patterns"); const servers_1 = require("./utils/servers"); const cache_1 = require("./utils/cache"); const query_1 = require("./utils/query"); /** * Parses a raw WHOIS response into structured data * @param rawData The raw WHOIS response * @returns Parsed WHOIS data */ function parseWhoisData(rawData) { const result = { rawText: rawData, }; // Parse registrar info result.registrar = (0, patterns_1.findRegistrar)(rawData); result.registrarUrl = (0, patterns_1.findRegistrarUrl)(rawData); result.registrarIanaId = (0, patterns_1.findRegistrarIanaId)(rawData); // Parse dates result.creationDate = (0, patterns_1.findCreationDate)(rawData); result.updatedDate = (0, patterns_1.findUpdatedDate)(rawData); result.expirationDate = (0, patterns_1.findExpirationDate)(rawData); // Parse registrant info result.registrant = { organization: (0, patterns_1.findRegistrantOrganization)(rawData), country: (0, patterns_1.findRegistrantCountry)(rawData), email: (0, patterns_1.findRegistrantEmail)(rawData), }; // Parse status codes const statusCodes = (0, patterns_1.findStatusCodes)(rawData); if (statusCodes.length > 0) { result.statusCodes = statusCodes; } // Parse name servers const nameServers = (0, patterns_1.findNameServers)(rawData); if (nameServers.length > 0) { result.nameServers = nameServers; } // Special handling for reserved domains like example.com if (rawData.includes('IANA') && rawData.includes('RESERVED')) { result.registrar = 'IANA (Reserved Domain)'; if (!result.statusCodes) { result.statusCodes = ['RESERVED-IANA']; } } return result; } /** * Gets WHOIS data for a domain * @param domain The domain to get WHOIS data for * @param useCache Whether to use cached data if available * @param maxReferrals Maximum number of referrals to follow (to prevent infinite loops) * @param debug Whether to enable debug logging * @returns Promise resolving to WHOIS data */ async function getWhoisData(domain, useCache = true, maxReferrals = 3, debug = false) { const formattedDomain = (0, index_1.formatDomain)(domain); if (debug) { console.log(`\n[DEBUG] Getting WHOIS data for domain: ${formattedDomain}`); } // Check cache if (useCache) { const cached = (0, cache_1.getCachedWhoisData)(formattedDomain); if (cached) { if (debug) { console.log('[DEBUG] Using cached WHOIS data'); } return cached; } } try { // Start with the initial WHOIS server const initialServer = (0, servers_1.getWhoisServer)(formattedDomain); if (debug) { console.log(`[DEBUG] Initial WHOIS server: ${initialServer}`); } const response = await (0, query_1.followWhoisReferrals)(formattedDomain, initialServer, maxReferrals, debug); // Parse the combined response data const parsedData = parseWhoisData(response); // Cache the result (0, cache_1.cacheWhoisData)(formattedDomain, parsedData); if (debug) { console.log('\n[DEBUG] Parsed WHOIS data:'); console.log(JSON.stringify(parsedData, null, 2)); } return parsedData; } catch (error) { if (debug) { console.error('[DEBUG] Error getting WHOIS data:', error); } if (error instanceof Error) { throw new Error(`Could not fetch WHOIS data for domain ${formattedDomain}. Details: ${error.message}`); } else { throw new Error(`Could not fetch WHOIS data for domain ${formattedDomain}.`); } } }