Add includeRaw option to CLI and API: enable inclusion of raw RDAP/WHOIS data in results

This commit is contained in:
2025-09-24 19:24:57 -04:00
parent 05445ef831
commit fda6d09096
6 changed files with 13 additions and 6 deletions
+3 -2
View File
@@ -54,6 +54,7 @@ await isAvailable("likely-unregistered-thing-320485230458.com"); // => false
- `followWhoisReferral?: boolean` Follow registrar referral from the TLD WHOIS (default `true`). - `followWhoisReferral?: boolean` Follow registrar referral from the TLD WHOIS (default `true`).
- `customBootstrapUrl?: string` Override RDAP bootstrap URL. - `customBootstrapUrl?: string` Override RDAP bootstrap URL.
- `whoisHints?: Record<string, string>` Override/add authoritative WHOIS per TLD (keys are lowercase TLDs, values may include or omit `whois://`). - `whoisHints?: Record<string, string>` Override/add authoritative WHOIS per TLD (keys are lowercase TLDs, values may include or omit `whois://`).
- `includeRaw?: boolean` Include `rawRdap`/`rawWhois` in the returned record (default `false`).
- `signal?: AbortSignal` Optional cancellation signal. - `signal?: AbortSignal` Optional cancellation signal.
### `DomainRecord` schema ### `DomainRecord` schema
@@ -95,8 +96,8 @@ interface DomainRecord {
}>; }>;
whoisServer?: string; // authoritative WHOIS queried (if any) whoisServer?: string; // authoritative WHOIS queried (if any)
rdapServers?: string[]; // RDAP base URLs tried rdapServers?: string[]; // RDAP base URLs tried
rawRdap?: unknown; // raw RDAP JSON (RDAP source) rawRdap?: unknown; // raw RDAP JSON (only when options.includeRaw)
rawWhois?: string; // raw WHOIS text (WHOIS source) rawWhois?: string; // raw WHOIS text (only when options.includeRaw)
source: "rdap" | "whois"; // which path produced data source: "rdap" | "whois"; // which path produced data
fetchedAt: string; // ISO 8601 timestamp fetchedAt: string; // ISO 8601 timestamp
warnings?: string[]; warnings?: string[];
+3 -2
View File
@@ -2,9 +2,9 @@
// Quick informal test runner for rdapper // Quick informal test runner for rdapper
// Usage: // Usage:
// npm run build && node dev.mjs example.com // npm run build && node cli.mjs example.com
// Env: // Env:
// RDAP_ONLY=1 | WHOIS_ONLY=1 | TIMEOUT_MS=15000 | FOLLOW_REFERRAL=0 // RDAP_ONLY=1 | WHOIS_ONLY=1 | TIMEOUT_MS=15000 | FOLLOW_REFERRAL=0 | INCLUDE_RAW=1
import { lookupDomain } from "./dist/index.js"; import { lookupDomain } from "./dist/index.js";
@@ -15,6 +15,7 @@ const options = {
followWhoisReferral: process.env.FOLLOW_REFERRAL !== "0", followWhoisReferral: process.env.FOLLOW_REFERRAL !== "0",
rdapOnly: process.env.RDAP_ONLY === "1", rdapOnly: process.env.RDAP_ONLY === "1",
whoisOnly: process.env.WHOIS_ONLY === "1", whoisOnly: process.env.WHOIS_ONLY === "1",
includeRaw: process.env.INCLUDE_RAW === "1",
}; };
const result = await lookupDomain(domain, options); const result = await lookupDomain(domain, options);
+2
View File
@@ -43,6 +43,7 @@ export async function lookupDomain(
json, json,
tried, tried,
now, now,
!!opts?.includeRaw,
); );
return { ok: true, record }; return { ok: true, record };
} catch { } catch {
@@ -105,6 +106,7 @@ export async function lookupDomain(
res.text, res.text,
res.serverQueried, res.serverQueried,
now, now,
!!opts?.includeRaw,
); );
return { ok: true, record }; return { ok: true, record };
} catch (err: unknown) { } catch (err: unknown) {
+2 -1
View File
@@ -19,6 +19,7 @@ export function normalizeRdap(
rdap: unknown, rdap: unknown,
rdapServersTried: string[], rdapServersTried: string[],
fetchedAtISO: string, fetchedAtISO: string,
includeRaw = false,
): DomainRecord { ): DomainRecord {
const doc = (rdap ?? {}) as RdapDoc; const doc = (rdap ?? {}) as RdapDoc;
// Safe helpers for optional fields // Safe helpers for optional fields
@@ -146,7 +147,7 @@ export function normalizeRdap(
contacts, contacts,
whoisServer, whoisServer,
rdapServers: rdapServersTried, rdapServers: rdapServersTried,
rawRdap: rdap, rawRdap: includeRaw ? rdap : undefined,
rawWhois: undefined, rawWhois: undefined,
source: "rdap", source: "rdap",
fetchedAt: fetchedAtISO, fetchedAt: fetchedAtISO,
+1
View File
@@ -87,6 +87,7 @@ export interface LookupOptions {
customBootstrapUrl?: string; // override IANA bootstrap customBootstrapUrl?: string; // override IANA bootstrap
// WHOIS discovery and query tuning // WHOIS discovery and query tuning
whoisHints?: Record<string, string>; // override/add authoritative WHOIS per TLD whoisHints?: Record<string, string>; // override/add authoritative WHOIS per TLD
includeRaw?: boolean; // include rawRdap/rawWhois in results (default false)
signal?: AbortSignal; signal?: AbortSignal;
} }
+2 -1
View File
@@ -18,6 +18,7 @@ export function normalizeWhois(
whoisText: string, whoisText: string,
whoisServer: string | undefined, whoisServer: string | undefined,
fetchedAtISO: string, fetchedAtISO: string,
includeRaw = false,
): DomainRecord { ): DomainRecord {
const map = parseKeyValueLines(whoisText); const map = parseKeyValueLines(whoisText);
@@ -151,7 +152,7 @@ export function normalizeWhois(
whoisServer, whoisServer,
rdapServers: undefined, rdapServers: undefined,
rawRdap: undefined, rawRdap: undefined,
rawWhois: whoisText, rawWhois: includeRaw ? whoisText : undefined,
source: "whois", source: "whois",
fetchedAt: fetchedAtISO, fetchedAt: fetchedAtISO,
warnings: undefined, warnings: undefined,