UNPKG

domain-availablity-checker

Version:
106 lines (97 loc) 3.67 kB
const whois = require('whois'); const util = require('util'); const axios = require('axios'); const whoisServers = require('./whois-server.json'); const whoisLookup = util.promisify(whois.lookup); async function getRdapServers() { try { const response = await axios.get('https://data.iana.org/rdap/dns.json'); return response.data.services; } catch (err) { console.error('Error fetching RDAP servers:', err); throw new Error('Could not fetch RDAP servers'); } } async function checkDomain(domain) { const tldParts = domain.split('.').slice(-2).join('.'); const server = whoisServers[tldParts] || whoisServers[domain.split('.').pop()]; if (server) { try { const data = await whoisLookup(domain, { server: server }); console.log(data); const noMatchRegex = /No match for|NOT FOUND|No entries found|No Data Found/i; const serverBusyRegex = /Server is busy now|Please try again later|Try again/i; if (noMatchRegex.test(data)) { return { domain: domain, available: true, message: "✅ The domain is available." }; } else if (serverBusyRegex.test(data)) { return { domain: domain, available: false, message: "⚠️ The server is busy now, please try again later." }; } else { return { domain: domain, available: false, message: "❌ The domain is not available." }; } } catch (err) { console.error('Error:', err); return { domain: domain, available: false, message: "⚠️ An error occurred while checking the domain." }; } } else { const tld = domain.split('.').pop(); const rdapServers = await getRdapServers(); const rdapServer = rdapServers.find(service => service[0].includes(tld)); if (!rdapServer) { return { domain: domain, available: false, message: "⚠️ No RDAP server found for this TLD." }; } const rdapUrl = rdapServer[1][0]; try { const response = await axios.get(`${rdapUrl}/domain/${domain}`); const data = response.data; if (data.errorCode === 404) { return { domain: domain, available: true, message: "✅ The domain is available." }; } else { return { domain: domain, available: false, message: "❌ The domain is not available." }; } } catch (err) { if (err.response && err.response.status === 404) { return { domain: domain, available: true, message: "✅ The domain is available." }; } else { console.error('Error:', err); return { domain: domain, available: false, message: "⚠️ An error occurred while checking the domain." }; } } } } module.exports = checkDomain;