fix: handle multi-level public suffixes in RDAP lookup (#6752)

This commit is contained in:
Joseph Adams
2026-01-17 13:18:25 +01:00
committed by GitHub
parent 324404f780
commit 81ae0af7e1
2 changed files with 23 additions and 7 deletions

View File

@@ -30,10 +30,13 @@ async function getRdapServer(tld) {
return null;
}
for (const service of rdapList["services"]) {
const [tlds, urls] = service;
if (tlds.includes(tld)) {
return urls[0];
const services = rdapList["services"] ?? [];
const rootTld = tld?.split(".").pop();
if (rootTld) {
for (const [tlds, urls] of services) {
if (tlds.includes(rootTld)) {
return urls[0];
}
}
}
log.debug("rdap", `No RDAP server found for TLD ${tld}`);
@@ -173,16 +176,18 @@ class DomainExpiry extends BeanModel {
});
}
const rdap = await getRdapServer(tld.publicSuffix);
const publicSuffix = tld.publicSuffix;
const rootTld = publicSuffix.split(".").pop();
const rdap = await getRdapServer(publicSuffix);
if (!rdap) {
throw new TranslatableError("domain_expiry_unsupported_unsupported_tld_no_rdap_endpoint", {
publicSuffix: tld.publicSuffix,
publicSuffix,
});
}
return {
domain: tld.domain,
tld: tld.publicSuffix,
tld: rootTld,
};
}

View File

@@ -157,6 +157,17 @@ describe("Domain Expiry", () => {
assert.strictEqual(supportInfo.tld, "com");
});
test("supports multi-level public suffix via RDAP fallback (e.g. com.br)", async () => {
const monitor = {
type: "http",
url: "https://record.com.br",
domainExpiryNotification: true,
};
const supportInfo = await DomainExpiry.checkSupport(monitor);
assert.strictEqual(supportInfo.domain, "record.com.br");
assert.strictEqual(supportInfo.tld, "br");
});
test("handles complex subdomain correctly", async () => {
const monitor = {
type: "http",