{"version":3,"sources":["jsdelivr-header.js","/npm/domain-info-fetcher@3.0.0/dist/index.js"],"names":[],"mappings":"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","file":"/npm/domain-info-fetcher@3.0.0/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/domain-info-fetcher@3.0.0/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n    o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n    var ownKeys = function(o) {\n        ownKeys = Object.getOwnPropertyNames || function (o) {\n            var ar = [];\n            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n            return ar;\n        };\n        return ownKeys(o);\n    };\n    return function (mod) {\n        if (mod && mod.__esModule) return mod;\n        var result = {};\n        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n        __setModuleDefault(result, mod);\n        return result;\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dateToTimestamp = exports.checkDomain = exports.getRootDomain = exports.extractSubdomain = exports.formatDomain = void 0;\nexports.fetchDomainInfo = fetchDomainInfo;\nconst https = __importStar(require(\"https\"));\nconst dns = __importStar(require(\"dns\"));\nconst utils_1 = require(\"./src/utils\");\n// Default request options\nconst DEFAULT_OPTIONS = {\n    timeout: 10000, // 10 seconds\n    followRedirects: true,\n    maxRedirects: 5,\n};\n/**\n * Formats a given domain to `example.com` format.\n * @param domain The domain to format.\n * @returns The formatted domain.\n */\n// formatDomain moved to ./src/utils and imported above\n/**\n * Extracts the subdomain from a given domain.\n * @param domain The domain to extract the subdomain from.\n * @returns The subdomain or null if no subdomain is present.\n */\n// extractSubdomain moved to ./src/utils and imported above\n/**\n * Gets the root domain (e.g., example.com) from a domain that may include a subdomain.\n * @param domain The domain to extract the root domain from.\n * @returns The root domain.\n */\n// getRootDomain moved to ./src/utils and imported above\n/**\n * Checks if the given domain is valid.\n * @param domain The domain to check.\n * @returns True if the domain is valid, false otherwise.\n */\n// checkDomain moved to ./src/utils and imported above\n/**\n * converts a date string to a timestamp\n * @param dateString\n * @returns timestamp\n */\n// dateToTimestamp moved to ./src/utils and imported above\n/**\n * Extracts SSL data from the given certificate.\n * @param cert The certificate object\n * @returns An object containing the SSL data.\n */\nfunction extractSslData(cert) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n    const validToTimestamp = (0, utils_1.dateToTimestamp)(cert.valid_to);\n    const validFromTimestamp = (0, utils_1.dateToTimestamp)(cert.valid_from);\n    // Extract human-readable subject and issuer information\n    const subjectCN = typeof ((_a = cert.subject) === null || _a === void 0 ? void 0 : _a.CN) === \"string\"\n        ? cert.subject.CN\n        : typeof ((_b = cert.subject) === null || _b === void 0 ? void 0 : _b.commonName) === \"string\"\n            ? cert.subject.commonName\n            : Array.isArray((_c = cert.subject) === null || _c === void 0 ? void 0 : _c.CN)\n                ? cert.subject.CN.join(\", \")\n                : Object.values(cert.subject || {})\n                    .map((v) => (Array.isArray(v) ? v.join(\", \") : v))\n                    .join(\", \");\n    // Prioritize Organization (O) for issuer information, falling back to CN if not available\n    const issuerCN = typeof ((_d = cert.issuer) === null || _d === void 0 ? void 0 : _d.O) === \"string\"\n        ? cert.issuer.O\n        : typeof ((_e = cert.issuer) === null || _e === void 0 ? void 0 : _e.organizationName) === \"string\"\n            ? cert.issuer.organizationName\n            : typeof ((_f = cert.issuer) === null || _f === void 0 ? void 0 : _f.CN) === \"string\"\n                ? cert.issuer.CN\n                : typeof ((_g = cert.issuer) === null || _g === void 0 ? void 0 : _g.commonName) === \"string\"\n                    ? cert.issuer.commonName\n                    : Array.isArray((_h = cert.issuer) === null || _h === void 0 ? void 0 : _h.O)\n                        ? cert.issuer.O.join(\", \")\n                        : Array.isArray((_j = cert.issuer) === null || _j === void 0 ? void 0 : _j.CN)\n                            ? cert.issuer.CN.join(\", \")\n                            : Object.values(cert.issuer || {})\n                                .map((v) => (Array.isArray(v) ? v.join(\", \") : v))\n                                .join(\", \");\n    // Extract certificates in PEM format if available\n    let certificate = undefined;\n    let intermediateCertificate = undefined;\n    let rootCertificate = undefined;\n    try {\n        // The main certificate PEM\n        if (cert.raw) {\n            certificate = `-----BEGIN CERTIFICATE-----\\n${(_k = cert.raw\n                .toString(\"base64\")\n                .match(/.{1,64}/g)) === null || _k === void 0 ? void 0 : _k.join(\"\\n\")}\\n-----END CERTIFICATE-----`;\n        }\n        // Try to extract intermediate and root certificates if available\n        if (cert.issuerCertificate) {\n            const intermediate = cert.issuerCertificate;\n            if (intermediate.raw) {\n                intermediateCertificate = `-----BEGIN CERTIFICATE-----\\n${(_l = intermediate.raw\n                    .toString(\"base64\")\n                    .match(/.{1,64}/g)) === null || _l === void 0 ? void 0 : _l.join(\"\\n\")}\\n-----END CERTIFICATE-----`;\n            }\n            // Root certificate (if chain available)\n            if (intermediate.issuerCertificate &&\n                intermediate.issuerCertificate.raw) {\n                rootCertificate = `-----BEGIN CERTIFICATE-----\\n${(_m = intermediate.issuerCertificate.raw\n                    .toString(\"base64\")\n                    .match(/.{1,64}/g)) === null || _m === void 0 ? void 0 : _m.join(\"\\n\")}\\n-----END CERTIFICATE-----`;\n            }\n        }\n    }\n    catch {\n        // Silently handle certificate extraction errors\n        // This ensures backward compatibility - if certificate extraction fails,\n        // we'll still return the existing fields\n    }\n    return {\n        // Original fields (for backward compatibility)\n        subject: cert.subject,\n        issuer: cert.issuer,\n        valid: validToTimestamp > Date.now(),\n        validFrom: validFromTimestamp,\n        validTo: validToTimestamp,\n        // New certificate fields\n        certificate,\n        intermediateCertificate,\n        rootCertificate,\n        // Human-readable details\n        details: {\n            subject: subjectCN,\n            issuer: issuerCN,\n            validFrom: new Date(validFromTimestamp),\n            validTo: new Date(validToTimestamp),\n        },\n    };\n}\n/**\n * Fetches SSL, server, and DNS data for the given domain.\n * @param domain The domain to fetch the information for.\n * @param options Optional request configuration\n * @returns A Promise that resolves to an object containing the SSL, server, and DNS data.\n */\nasync function fetchDomainInfo(domain, options) {\n    if (!domain) {\n        throw new Error(\"Domain name cannot be empty\");\n    }\n    if (!(0, utils_1.checkDomain)(domain)) {\n        throw new Error(\"Invalid domain name\");\n    }\n    const mergedOptions = { ...DEFAULT_OPTIONS, ...options };\n    const formattedDomain = (0, utils_1.formatDomain)(domain);\n    // Include WHOIS data in the Promise.all array\n    const [sslData, serverData, dnsData, httpStatus, whoisData,] = await Promise.all([\n        getSslData(formattedDomain, mergedOptions).catch((error) => {\n            // Enhance error message with more specific details\n            let errorMessage = \"Could not fetch SSL data for domain \" + domain;\n            if (error.code) {\n                errorMessage += \". Error code: \" + error.code;\n            }\n            if (error.message) {\n                errorMessage += \". Details: \" + error.message;\n            }\n            throw new Error(errorMessage);\n        }),\n        getServerData(formattedDomain, mergedOptions).catch((error) => {\n            // Enhance error message with more specific details\n            let errorMessage = \"Could not fetch server data for domain \" + domain;\n            if (error.code) {\n                errorMessage += \". Error code: \" + error.code;\n            }\n            if (error.message) {\n                errorMessage += \". Details: \" + error.message;\n            }\n            throw new Error(errorMessage);\n        }),\n        getDnsData(formattedDomain).catch((error) => {\n            // Enhance error message with more specific details\n            let errorMessage = \"Could not fetch DNS data for domain \" + domain;\n            if (error.code) {\n                errorMessage += \". Error code: \" + error.code;\n            }\n            if (error.message) {\n                errorMessage += \". Details: \" + error.message;\n            }\n            throw new Error(errorMessage);\n        }),\n        getHttpStatus(formattedDomain, mergedOptions),\n        // Add WHOIS data fetch, but make it optional\n        Promise.resolve().then(() => __importStar(require(\"./src/whois\"))).then((whoisModule) => whoisModule.getWhoisData(formattedDomain).catch((error) => {\n            // Log the error but don't fail the whole request\n            console.warn(`WHOIS data fetch failed: ${error.message}`);\n            return undefined;\n        }))\n            .catch(() => undefined), // Make WHOIS data optional\n    ]);\n    if (!sslData) {\n        throw new Error(\"Could not fetch SSL data for domain \" +\n            domain +\n            \". The SSL certificate may be invalid or the domain may not support HTTPS.\");\n    }\n    return { sslData, serverData, dnsData, httpStatus, whoisData };\n}\n/**\n * Retrieves SSL data for the given domain.\n * @param domain The domain to fetch the SSL data for.\n * @param options Request configuration options\n * @returns A Promise that resolves to an object containing the SSL data.\n */\nasync function getSslData(domain, options = DEFAULT_OPTIONS) {\n    return new Promise((resolve, reject) => {\n        const req = https\n            .request(`https://${domain}`, {\n            method: \"HEAD\",\n            timeout: options.timeout,\n            headers: options.headers || {},\n        }, (res) => {\n            const socket = res.socket;\n            const cert = socket.getPeerCertificate(true);\n            resolve(extractSslData(cert));\n            socket.destroy();\n        })\n            .on(\"error\", (error) => {\n            reject(error);\n        });\n        req.end();\n    });\n}\n/**\n * Retrieves server data for the given domain.\n * @param domain The domain to fetch the server data for.\n * @param options Request configuration options\n * @returns A Promise that resolves to a string containing the server data.\n */\nasync function getServerData(domain, options = DEFAULT_OPTIONS) {\n    return new Promise((resolve, reject) => {\n        const req = https\n            .request(`https://${domain}`, {\n            method: \"HEAD\",\n            timeout: options.timeout,\n            headers: options.headers || {},\n            agent: false, // Disable connection pooling\n        }, (res) => {\n            const serverHeaderValue = res.headers[\"server\"];\n            const result = Array.isArray(serverHeaderValue)\n                ? serverHeaderValue[0]\n                : serverHeaderValue;\n            // Ensure socket is destroyed\n            if (res.socket) {\n                res.socket.destroy();\n            }\n            resolve(result);\n        })\n            .on(\"error\", (error) => {\n            reject(error);\n        });\n        req.end();\n    });\n}\n/**\n * Retrieves DNS data for the given domain.\n * @param domain The domain to fetch the DNS data for.\n * @returns A Promise that resolves to an object containing the DNS data.\n */\nasync function getDnsData(domain) {\n    const subdomain = (0, utils_1.extractSubdomain)(domain);\n    const rootDomain = (0, utils_1.getRootDomain)(domain);\n    // For a subdomain, we primarily want A and CNAME records of the subdomain itself\n    if (subdomain) {\n        try {\n            const A = await getARecords(domain);\n            const CNAME = await getCNameRecord(domain);\n            // For other DNS records, we typically want the root domain information\n            const TXT = await getTxtRecords(rootDomain);\n            const MX = await getMxRecords(rootDomain);\n            const NS = await getNsRecords(rootDomain);\n            const SOA = await getSoaRecord(rootDomain);\n            return { A, CNAME, TXT, MX, NS, SOA };\n        }\n        catch (error) {\n            // If looking up the subdomain fails, fall back to the root domain\n            console.error(`Error fetching subdomain DNS data: ${error instanceof Error ? error.message : String(error)}`);\n            console.log(`Falling back to root domain ${rootDomain}`);\n        }\n    }\n    // Standard lookup for root domain or fallback\n    const A = await getARecords(domain);\n    const CNAME = await getCNameRecord(domain);\n    const TXT = await getTxtRecords(domain);\n    const MX = await getMxRecords(domain);\n    const NS = await getNsRecords(domain);\n    const SOA = await getSoaRecord(domain);\n    return { A, CNAME, TXT, MX, NS, SOA };\n}\n/**\n * Retrieves A records for the given domain.\n * @param domain The domain to fetch the A records for.\n * @returns A Promise that resolves to an array of strings containing the A records.\n */\nfunction getARecords(domain) {\n    return new Promise((resolve, reject) => {\n        dns.resolve4(domain, (error, addresses) => {\n            if (error) {\n                reject(error);\n            }\n            else {\n                resolve(addresses);\n            }\n        });\n    });\n}\n/**\n * Retrieves CNAME record for the given domain.\n * @param domain The domain to fetch the CNAME record for.\n * @returns A Promise that resolves to a string containing the CNAME record.\n */\nfunction getCNameRecord(domain) {\n    return new Promise((resolve, reject) => {\n        dns.resolveCname(domain, (error, addresses) => {\n            if (error) {\n                if (error.code === \"ENODATA\") {\n                    resolve(null);\n                }\n                else {\n                    reject(error);\n                }\n            }\n            else {\n                resolve(addresses[0]);\n            }\n        });\n    });\n}\n/**\n * Retrieves TXT records for the given domain.\n * @param domain The domain to fetch the TXT records for.\n * @returns A Promise that resolves to an array of strings containing the TXT records.\n */\nfunction getTxtRecords(domain) {\n    return new Promise((resolve, reject) => {\n        dns.resolveTxt(domain, (error, records) => {\n            if (error) {\n                reject(error);\n            }\n            else {\n                const flattenedRecords = records.flat();\n                resolve(flattenedRecords);\n            }\n        });\n    });\n}\n/**\n * Retrieves MX records for the given domain.\n * @param domain The domain to fetch the MX records for.\n * @returns A Promise that resolves to an array of objects containing the MX records.\n */\nfunction getMxRecords(domain) {\n    return new Promise((resolve, reject) => {\n        dns.resolveMx(domain, (error, records) => {\n            if (error) {\n                reject(error);\n            }\n            else {\n                resolve(records);\n            }\n        });\n    });\n}\n/**\n * Retrieves NS records for the given domain.\n * @param domain The domain to fetch the NS records for.\n * @returns A Promise that resolves to an array of strings containing the NS records.\n */\nfunction getNsRecords(domain) {\n    return new Promise((resolve, reject) => {\n        dns.resolveNs(domain, (error, records) => {\n            if (error) {\n                reject(error);\n            }\n            else {\n                resolve(records);\n            }\n        });\n    });\n}\n/**\n * Retrieves SOA record for the given domain.\n * @param domain The domain to fetch the SOA record for.\n * @returns A Promise that resolves to an object containing the SOA record.\n */\nfunction getSoaRecord(domain) {\n    return new Promise((resolve, reject) => {\n        dns.resolveSoa(domain, (error, record) => {\n            if (error) {\n                if (error.code === \"ENODATA\") {\n                    resolve(null);\n                }\n                else {\n                    reject(error);\n                }\n            }\n            else {\n                resolve(record);\n            }\n        });\n    });\n}\n/**\n * Retrieves HTTP status for the given domain.\n * @param domain The domain to fetch the HTTP status for.\n * @param options Request configuration options\n * @returns A Promise that resolves to a number containing the HTTP status.\n */\nasync function getHttpStatus(domain, options = DEFAULT_OPTIONS) {\n    return new Promise((resolve, reject) => {\n        const req = https\n            .request(`https://${domain}`, {\n            method: \"HEAD\",\n            timeout: options.timeout,\n            headers: options.headers || {},\n            agent: false, // Disable connection pooling\n        }, (res) => {\n            const statusCode = res.statusCode || 0;\n            // Ensure socket is destroyed\n            if (res.socket) {\n                res.socket.destroy();\n            }\n            resolve(statusCode);\n        })\n            .on(\"error\", (error) => {\n            reject(error);\n        });\n        req.end();\n    });\n}\nvar utils_2 = require(\"./src/utils\");\nObject.defineProperty(exports, \"formatDomain\", { enumerable: true, get: function () { return utils_2.formatDomain; } });\nObject.defineProperty(exports, \"extractSubdomain\", { enumerable: true, get: function () { return utils_2.extractSubdomain; } });\nObject.defineProperty(exports, \"getRootDomain\", { enumerable: true, get: function () { return utils_2.getRootDomain; } });\nObject.defineProperty(exports, \"checkDomain\", { enumerable: true, get: function () { return utils_2.checkDomain; } });\nObject.defineProperty(exports, \"dateToTimestamp\", { enumerable: true, get: function () { return utils_2.dateToTimestamp; } });\n"]}