diff options
| author | Christian Cleberg <[email protected]> | 2026-04-22 11:46:52 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-22 11:46:52 -0500 |
| commit | 37b02e5ee360d61751951b77b7b556165a3af1fc (patch) | |
| tree | c2e30f32c4e8d2fcdf7035f97e9e353f09859114 /DomainReportBuilder.swift | |
| parent | ceac99c05f180d9008b75c9329822466ff60255b (diff) | |
| download | domain-dig-37b02e5ee360d61751951b77b7b556165a3af1fc.tar.gz domain-dig-37b02e5ee360d61751951b77b7b556165a3af1fc.tar.bz2 domain-dig-37b02e5ee360d61751951b77b7b556165a3af1fc.zip | |
feat(v3.0.0): unify platform architecture and introduce feature tiers
* consolidate DomainReport as canonical data model
* add feature tier system (free/pro/data+ scaffolding)
* apply clean feature gating across workflows and tracking
* refactor app structure for maintainability
* standardize navigation and settings
* add data lifecycle controls
* ensure consistency across UI, export, and CLI
* stabilize internal inspection API
Diffstat (limited to 'DomainReportBuilder.swift')
| -rw-r--r-- | DomainReportBuilder.swift | 64 |
1 files changed, 60 insertions, 4 deletions
diff --git a/DomainReportBuilder.swift b/DomainReportBuilder.swift index ceda05e..0f42519 100644 --- a/DomainReportBuilder.swift +++ b/DomainReportBuilder.swift @@ -3,6 +3,7 @@ import Foundation struct DomainReport: Codable { let domain: String let timestamp: Date + let provenance: DomainReportProvenance let appVersion: String let resolverDisplayName: String let resolverURLString: String @@ -29,6 +30,34 @@ struct DomainReport: Codable { let riskAssessment: DomainRiskAssessment let insights: [String] let changeSummary: DomainChangeSummary? + let workflowContext: DomainWorkflowContext? + let metadata: DomainReportMetadata +} + +struct DomainReportProvenance: Codable { + let collectedAt: Date + let source: LookupResultSource + let sections: [LookupSectionKind: SectionProvenance] + let dataSources: [String] +} + +struct DomainWorkflowContext: Codable { + let workflowID: UUID? + let workflowName: String? + let source: String +} + +struct DomainReportMetadata: Codable { + let schemaVersion: String + let resolverDisplayName: String + let resolverURLString: String + let appVersion: String + let cachedSections: [LookupSectionKind] + let auditNote: String? + let validationIssues: [String] + let isPartialSnapshot: Bool + let errorDetails: [LookupSectionKind: InspectionFailure] + let statusMessage: String? } struct DNSResultSummary: Codable { @@ -87,7 +116,11 @@ struct NetworkSummary: Codable { } struct DomainReportBuilder { - func build(from snapshot: LookupSnapshot, previousSnapshot: LookupSnapshot? = nil) -> DomainReport { + func build( + from snapshot: LookupSnapshot, + previousSnapshot: LookupSnapshot? = nil, + workflowContext: DomainWorkflowContext? = nil + ) -> DomainReport { let primaryIP = primaryIPAddress(from: snapshot) let analysis = DomainInsightEngine.analyze(snapshot: snapshot, previousSnapshot: previousSnapshot) let changeSummary: DomainChangeSummary? @@ -108,6 +141,12 @@ struct DomainReportBuilder { return DomainReport( domain: snapshot.domain, timestamp: snapshot.timestamp, + provenance: DomainReportProvenance( + collectedAt: snapshot.timestamp, + source: snapshot.resultSource, + sections: snapshot.provenanceBySection, + dataSources: snapshot.dataSources + ), appVersion: snapshot.appVersion, resolverDisplayName: snapshot.resolverDisplayName, resolverURLString: snapshot.resolverURLString, @@ -180,12 +219,29 @@ struct DomainReportBuilder { subdomainGroups: analysis.subdomainGroups, riskAssessment: analysis.riskAssessment, insights: analysis.insights, - changeSummary: changeSummary + changeSummary: changeSummary, + workflowContext: workflowContext, + metadata: DomainReportMetadata( + schemaVersion: "3.0.0", + resolverDisplayName: snapshot.resolverDisplayName, + resolverURLString: snapshot.resolverURLString, + appVersion: snapshot.appVersion, + cachedSections: snapshot.cachedSections, + auditNote: snapshot.note, + validationIssues: snapshot.validationIssues, + isPartialSnapshot: snapshot.isPartialSnapshot, + errorDetails: snapshot.errorDetails, + statusMessage: snapshot.statusMessage + ) ) } - func build(from entry: HistoryEntry, previousSnapshot: LookupSnapshot? = nil) -> DomainReport { - build(from: entry.snapshot, previousSnapshot: previousSnapshot) + func build( + from entry: HistoryEntry, + previousSnapshot: LookupSnapshot? = nil, + workflowContext: DomainWorkflowContext? = nil + ) -> DomainReport { + build(from: entry.snapshot, previousSnapshot: previousSnapshot, workflowContext: workflowContext) } private func primaryIPAddress(from snapshot: LookupSnapshot) -> String? { |
