summaryrefslogtreecommitdiff
path: root/DomainDig/RDAPService.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-24 12:38:38 -0500
committerChristian Cleberg <[email protected]>2026-04-24 12:38:38 -0500
commitd0b3b7a15b59266b4ae4262fdb0364245092c17c (patch)
tree5adb0df9963caf78aa98fa17adfb2c175291ded9 /DomainDig/RDAPService.swift
parentb35f1b432fc24fbab1fa05593c9a0bca7e4d95a6 (diff)
downloaddomain-dig-d0b3b7a15b59266b4ae4262fdb0364245092c17c.tar.gz
domain-dig-d0b3b7a15b59266b4ae4262fdb0364245092c17c.tar.bz2
domain-dig-d0b3b7a15b59266b4ae4262fdb0364245092c17c.zip
feat(v3.7.0): add timeline and advanced diffing system
- introduce TimelineView for historical snapshots - allow comparison between any two snapshots - implement DiffService for structured domain diffs - improve diff visualization with clear change indicators - add navigation across changes - optimize history loading for performance - extend CLI and export to support timeline data
Diffstat (limited to 'DomainDig/RDAPService.swift')
-rw-r--r--DomainDig/RDAPService.swift10
1 files changed, 10 insertions, 0 deletions
diff --git a/DomainDig/RDAPService.swift b/DomainDig/RDAPService.swift
index e7e2c93..6d67e45 100644
--- a/DomainDig/RDAPService.swift
+++ b/DomainDig/RDAPService.swift
@@ -48,6 +48,7 @@ enum RDAPService {
}
private func fetchRDAPResponse(for domain: String) async -> ServiceResult<RDAPDomainResponse> {
+ let startedAt = DomainDebugLog.signpostStart("RDAP.fetch", domain: domain)
guard let url = URL(string: "https://rdap.org/domain/\(domain)") else {
return .error("Unavailable")
}
@@ -55,9 +56,11 @@ private func fetchRDAPResponse(for domain: String) async -> ServiceResult<RDAPDo
do {
var request = URLRequest(url: url, timeoutInterval: 8)
request.setValue("application/rdap+json, application/json", forHTTPHeaderField: "Accept")
+ DomainDebugLog.debug("RDAP.request url=\(url.absoluteString) timeout=8")
let (data, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse else {
+ DomainDebugLog.error("RDAP.badResponse domain=\(domain) response=nil")
return .error(URLError(.badServerResponse).localizedDescription)
}
@@ -66,15 +69,22 @@ private func fetchRDAPResponse(for domain: String) async -> ServiceResult<RDAPDo
let decoder = JSONDecoder()
let rdapResponse = try decoder.decode(RDAPDomainResponse.self, from: data)
guard rdapResponse.isDomainRecord else {
+ DomainDebugLog.signpostEnd("RDAP.fetch", start: startedAt, domain: domain, extra: "status=200 nonDomainRecord")
return .empty("Unavailable")
}
+ DomainDebugLog.signpostEnd("RDAP.fetch", start: startedAt, domain: domain, extra: "status=200 bytes=\(data.count)")
return .success(rdapResponse)
case 404:
+ DomainDebugLog.signpostEnd("RDAP.fetch", start: startedAt, domain: domain, extra: "status=404")
return .empty("Unavailable")
default:
+ DomainDebugLog.error("RDAP.httpError domain=\(domain) status=\(httpResponse.statusCode)")
+ DomainDebugLog.signpostEnd("RDAP.fetch", start: startedAt, domain: domain, extra: "status=\(httpResponse.statusCode)")
return .error("Unavailable")
}
} catch {
+ DomainDebugLog.error("RDAP.error domain=\(domain) error=\(error.localizedDescription)")
+ DomainDebugLog.signpostEnd("RDAP.fetch", start: startedAt, domain: domain, extra: "error")
return .error(error.localizedDescription)
}
}