domain-availablity-checker
Version:
Simple domain availability checker
106 lines (97 loc) • 3.67 kB
JavaScript
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;