import * as plugins from './smartwhois.plugins.js'; export interface IWhoisInfo { domain: string; domainWithoutSuffix: string; hostname: string; isIcann: boolean; isIp: boolean; isPrivate: boolean; publicSuffix: string; subdomain: string; isRegistered: boolean; dnsSec: 'signedDelegation' | 'unsigned'; originalWhoisInfo: { [key: string]: any; }; whoisServers: string[]; registrar: string; registrarUrl: string; createdDate: string; updatedDate: string; expiryDate: string; } export class SmartWhois { public async getWhoisForDomain(domainArg: string) { const whoisInfo = await plugins.whoiser.domain(domainArg); const whoisServers = Object.keys(whoisInfo); const selectedWhoisInfo: any = whoisInfo[whoisServers[0]]; const registrar = selectedWhoisInfo.Registrar; const registrarUrl = selectedWhoisInfo['Registrar URL']; const createdDate = selectedWhoisInfo['Created Date']; const updatedDate = selectedWhoisInfo['Updated Date']; const expiryDate = selectedWhoisInfo['Expiry Date']; const tldtsData = plugins.tldts.parse(domainArg); return { ...tldtsData, isRegistered: true, dnsSec: selectedWhoisInfo['DNSSEC'], originalWhoisInfo: whoisInfo, whoisServers, registrar, registrarUrl, createdDate, updatedDate, expiryDate, }; } public async isValidTld(tldArg: string): Promise { const allTlds = await plugins.whoiser.allTlds(); const sanatizedTld = tldArg.startsWith('.') ? tldArg.replace('.', '').toUpperCase() : tldArg.toUpperCase(); return allTlds.includes(sanatizedTld); } public async getWhoisForIp(ipArg: string) {} }