TypeScript 55.4%
Python 43.2%
SQL 1.2%
1# Connector: RDAP domain registration (`rdap`)2**Purpose**: registration facts of an organization's domain (RFC 9083, the JSON successor of WHOIS) — registrar3(and IANA id), EPP status codes (`clientTransferProhibited`, `serverHold` = suspended, `pendingDelete`),4nameservers, DNSSEC delegation, registration / expiration / last-changed / transfer dates. Detects registrar5transfers, suspensions, nameserver moves, DNSSEC toggles and imminent expiry (`extra.daysToExpiry`, `expiring`6< 30 days, `held`).7**Sensor URL**: `https://rdap.org/domain/example.com` (display form) or a registry RDAP URL. **Type**: JSON, tier D.8**Config**: `domain?`, `direct?: true` (force rdap.org).9**Retrieval**: the TLD's authoritative RDAP server is resolved from the **IANA bootstrap file**10(`https://data.iana.org/rdap/dns.json`, cached 24 h) — rdap.org is a redirector rate-limited at roughly ten requests11per minute and returned 429 on bulk validation. Overrides for TLDs missing from the bootstrap but served by a12registry (`.io`, `.ac`, `.sh` → Identity Digital). ccTLDs without RDAP (`.co`, many others) fail with 404 and must not13be added.14**Normalization**: JSON summary with the volatile parts removed — the `last update of RDAP database` event,15`notices`, `links`, `rdapConformance`; status codes and nameservers sorted and lower-cased.16**Known quirks**: registrar name comes from the registrar entity's vCard `fn` (falls back to its handle); some17registries omit `secureDNS` (→ `dnssec: null`); thin registries (e.g. `.com`) do not include registrant contacts.18**Tests**: `connectors2.test.ts` (`summarizeRdap`). **Verified**: 2026-09-08 (.com, .ca, .gov, .ai, .dev, .io).19