mirror of
https://github.com/Lissy93/web-check.git
synced 2026-05-13 06:01:02 -04:00
- Sitemap endpoint now recursively expands sitemap-index files - Fixes #165 - Strips :port from target URLs in get-ip, dns, dns-server, ports, mail-config - Fixes #203 - Configurable trust proxy (TRUST_PROXY env) so app works behind Traefik/nginx - Fixes #157 - Tranco rank now correctly says "top 1 million" (was "100 million") - Fixes #257 - Adds engines.node ">=20" so Vercel picks a supported runtime - Re #212 - Raises Vercel maxDuration from 10s to 60s, cutting most 504 timeouts - Re #251 - Re #287 - Bumps axios 1.4.8 to 1.16, closing 4 high-severity SSRF/DoS CVEs - Re #289 - Fixes mail-config crash where dns module was awaited as if promise-based - Adds reusable structured logging util for the API - Bumps a whole bunch of deps, and resolves lots of open npm CVEs
52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
import dns from 'dns';
|
|
import util from 'util';
|
|
import middleware from './_common/middleware.js';
|
|
import { parseTarget } from './_common/parse-target.js';
|
|
|
|
const dnsHandler = async (url) => {
|
|
const { hostname } = parseTarget(url);
|
|
|
|
try {
|
|
const lookupPromise = util.promisify(dns.lookup);
|
|
const resolve4Promise = util.promisify(dns.resolve4);
|
|
const resolve6Promise = util.promisify(dns.resolve6);
|
|
const resolveMxPromise = util.promisify(dns.resolveMx);
|
|
const resolveTxtPromise = util.promisify(dns.resolveTxt);
|
|
const resolveNsPromise = util.promisify(dns.resolveNs);
|
|
const resolveCnamePromise = util.promisify(dns.resolveCname);
|
|
const resolveSoaPromise = util.promisify(dns.resolveSoa);
|
|
const resolveSrvPromise = util.promisify(dns.resolveSrv);
|
|
const resolvePtrPromise = util.promisify(dns.resolvePtr);
|
|
|
|
const [a, aaaa, mx, txt, ns, cname, soa, srv, ptr] = await Promise.all([
|
|
lookupPromise(hostname),
|
|
resolve4Promise(hostname).catch(() => []), // A record
|
|
resolve6Promise(hostname).catch(() => []), // AAAA record
|
|
resolveMxPromise(hostname).catch(() => []), // MX record
|
|
resolveTxtPromise(hostname).catch(() => []), // TXT record
|
|
resolveNsPromise(hostname).catch(() => []), // NS record
|
|
resolveCnamePromise(hostname).catch(() => []), // CNAME record
|
|
resolveSoaPromise(hostname).catch(() => []), // SOA record
|
|
resolveSrvPromise(hostname).catch(() => []), // SRV record
|
|
resolvePtrPromise(hostname).catch(() => []) // PTR record
|
|
]);
|
|
|
|
return {
|
|
A: a,
|
|
AAAA: aaaa,
|
|
MX: mx,
|
|
TXT: txt,
|
|
NS: ns,
|
|
CNAME: cname,
|
|
SOA: soa,
|
|
SRV: srv,
|
|
PTR: ptr
|
|
};
|
|
} catch (error) {
|
|
throw new Error(error.message);
|
|
}
|
|
};
|
|
|
|
export const handler = middleware(dnsHandler);
|
|
export default handler;
|