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

92 lines (79 loc) • 3.53 kB
import { fetchDomainInfo } from '../index'; import * as fs from 'fs/promises'; import * as path from 'path'; /** * Example demonstrating how to work with certificate data * including PEM certificates and human-readable details */ async function main(): Promise<void> { try { // Replace with your domain const domain = 'example.com'; console.log(`Fetching SSL certificate information for ${domain}...`); const domainInfo = await fetchDomainInfo(domain); if (!domainInfo?.sslData) { console.error('No SSL data returned'); return; } // Display human-readable certificate details console.log('\nšŸ”’ Certificate Details (human-readable):'); if (domainInfo.sslData.details) { console.log(` - Subject: ${domainInfo.sslData.details.subject}`); console.log(` - Issuer: ${domainInfo.sslData.details.issuer}`); console.log(` - Valid from: ${domainInfo.sslData.details.validFrom.toLocaleString()}`); console.log(` - Valid until: ${domainInfo.sslData.details.validTo.toLocaleString()}`); console.log( ` - Days until expiration: ${Math.floor( (domainInfo.sslData.details.validTo.getTime() - Date.now()) / (1000 * 60 * 60 * 24) )}` ); } else { console.log(' Human-readable details not available'); } // Create a directory for saving certificates const certDir = path.join(__dirname, 'certificates'); try { await fs.mkdir(certDir, { recursive: true }); console.log(`\nSaving certificates to directory: ${certDir}`); } catch (err) { console.error( `Error creating directory: ${err instanceof Error ? err.message : String(err)}` ); return; } // Save certificates if available const certStatus = []; if (domainInfo.sslData.certificate) { const serverCertPath = path.join(certDir, `${domain}-server.pem`); await fs.writeFile(serverCertPath, domainInfo.sslData.certificate); certStatus.push(`āœ… Server certificate saved to: ${serverCertPath}`); } else { certStatus.push('āŒ Server certificate not available'); } if (domainInfo.sslData.intermediateCertificate) { const intermediateCertPath = path.join(certDir, `${domain}-intermediate.pem`); await fs.writeFile(intermediateCertPath, domainInfo.sslData.intermediateCertificate); certStatus.push(`āœ… Intermediate certificate saved to: ${intermediateCertPath}`); } else { certStatus.push('āŒ Intermediate certificate not available'); } if (domainInfo.sslData.rootCertificate) { const rootCertPath = path.join(certDir, `${domain}-root.pem`); await fs.writeFile(rootCertPath, domainInfo.sslData.rootCertificate); certStatus.push(`āœ… Root certificate saved to: ${rootCertPath}`); } else { certStatus.push('āŒ Root certificate not available'); } // Display certificate status console.log('\nšŸ“„ Certificate Files:'); certStatus.forEach((status) => console.log(` ${status}`)); console.log('\nšŸ’” Tip: You can use these certificates for:'); console.log(' - SSL pinning in mobile or web applications'); console.log(' - Certificate validation in custom TLS implementations'); console.log(' - Analysis or verification of the certificate chain'); console.log(' - Implementing mutual TLS authentication'); } catch (error) { console.error('Error:', error instanceof Error ? error.message : String(error)); } } main().catch(console.error);