summaryrefslogtreecommitdiff
path: root/DomainDig/TimelineView.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-26 00:39:28 -0500
committerChristian Cleberg <[email protected]>2026-04-26 00:39:28 -0500
commit237a72a03102319638c5b0572ca3ab543238b821 (patch)
tree21b34e8b69994ac58ef1c8c49c05bc4a4b65c3b7 /DomainDig/TimelineView.swift
parentcc69cbd7e589ec4b065ce74d8c5e7714a040cfc5 (diff)
downloaddomain-dig-237a72a03102319638c5b0572ca3ab543238b821.tar.gz
domain-dig-237a72a03102319638c5b0572ca3ab543238b821.tar.bz2
domain-dig-237a72a03102319638c5b0572ca3ab543238b821.zip
DomainDig v3.5.0: Expand the Pro+ Data+ intelligence layer with deeper local historical context
and inferred enrichment. - add derived intelligence fields for provider fingerprinting, classification, ownership transitions, hosting transitions, subdomain history, risk signals, and inferred timeline events - expand DNS history beyond A/NS snapshots to retain A, AAAA, MX, NS, TXT, and CNAME change state - persist enriched intelligence in snapshots and history entries so analysis is local-first and incremental - add a dedicated Data+ Intelligence panel to current and historical domain detail views - surface intelligence events in timeline rows and include Data+ changes in diff output - preserve non-blocking inspection behavior by keeping enrichment additive to the main lookup path This makes Pro+ materially deeper for investigative workflows by improving historical ownership visibility, infrastructure context, hosting change detection, subdomain intelligence, and explainable risk signals.
Diffstat (limited to 'DomainDig/TimelineView.swift')
-rw-r--r--DomainDig/TimelineView.swift14
1 files changed, 13 insertions, 1 deletions
diff --git a/DomainDig/TimelineView.swift b/DomainDig/TimelineView.swift
index b163c76..8680d15 100644
--- a/DomainDig/TimelineView.swift
+++ b/DomainDig/TimelineView.swift
@@ -25,7 +25,7 @@ struct TimelineView: View {
NavigationLink {
HistoryDetailView(viewModel: viewModel, entry: entry)
} label: {
- TimelineRow(summary: summary)
+ TimelineRow(summary: summary, entry: entry)
}
.swipeActions(edge: .trailing, allowsFullSwipe: false) {
Button {
@@ -102,6 +102,7 @@ struct TimelineView: View {
private struct TimelineRow: View {
@Environment(\.appDensity) private var appDensity
let summary: SnapshotSummary
+ let entry: HistoryEntry
var body: some View {
VStack(alignment: .leading, spacing: appDensity.metrics.rowSpacing + 1) {
@@ -138,6 +139,17 @@ private struct TimelineRow: View {
.font(appDensity.font(.caption2))
.foregroundStyle(.secondary)
+ if !entry.intelligenceTimeline.isEmpty {
+ VStack(alignment: .leading, spacing: 4) {
+ ForEach(Array(entry.intelligenceTimeline.prefix(2))) { event in
+ Text("\(event.title): \(event.detail)")
+ .font(appDensity.font(.caption2))
+ .foregroundStyle(.secondary)
+ .lineLimit(1)
+ }
+ }
+ }
+
HStack(spacing: 8) {
if let primaryIP = summary.primaryIP {
Text(primaryIP)