import type { CveEnrichmentRecord } from '../../src/domain/cve-enrichment'; import { normalizeCveId } from '../../src/domain/cve-enrichment'; import type { AssessorRepository } from '../../src/persistence/assessor-repository'; import type { NvdCveClient } from './nvd-cve-client'; export class CveEnrichmentService { constructor(private readonly repository: AssessorRepository, private readonly nvd: Pick) {} async enrich(value: string): Promise { const cveId = normalizeCveId(value); if (!cveId) throw new Error('A valid CVE identifier is required.'); const occurrences = await this.repository.findOccurrences({ toolId: 'defender-for-iot-vulnerabilities', search: cveId, limit: 10_000 }); const referenced = occurrences.items.some(item => normalizeCveId(item.sourceIdentity.canonicalRuleId ?? item.sourceIdentity.originalRuleId ?? '') === cveId); if (!referenced) throw new Error(`${cveId} is not referenced by a stored Defender for IoT finding.`); const record = await this.nvd.fetchCve(cveId); await this.repository.saveCveEnrichment(record); return record; } }