mod cache;
pub mod eol;
pub mod epss;
pub mod huggingface;
pub mod kev;
pub mod osv;
pub mod source;
pub mod staleness;
mod stats;
mod traits;
pub mod vex;
pub use cache::{CacheKey, FileCache};
pub use eol::{EolClientConfig, EolEnricher, EolEnrichmentStats};
pub use epss::{EpssClient, EpssClientConfig, EpssEnrichmentStats, EpssScores};
pub use huggingface::{
HUGGINGFACE_API_URL, HuggingFaceClient, HuggingFaceConfig, HuggingFaceEnrichmentStats,
};
pub use kev::{KevCatalog, KevClient, KevClientConfig, KevEnrichmentStats};
pub use osv::{OsvEnricher, OsvEnricherConfig};
pub use source::{CacheStats, EnrichmentSource, JsonCache};
pub use staleness::{RegistryConfig, StalenessEnricher, StalenessEnrichmentStats};
pub use stats::{EnrichmentError, EnrichmentStats};
pub use traits::{NoOpEnricher, VulnerabilityEnricher};
pub use vex::{VexEnricher, VexEnrichmentStats};
use std::path::PathBuf;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct EnricherConfig {
pub enable_osv: bool,
pub enable_kev: bool,
pub enable_staleness: bool,
pub enable_eol: bool,
pub cache_dir: PathBuf,
pub cache_ttl: Duration,
pub bypass_cache: bool,
pub timeout: Duration,
pub stale_threshold_days: u32,
}
impl Default for EnricherConfig {
fn default() -> Self {
Self {
enable_osv: true,
enable_kev: true,
enable_staleness: false, enable_eol: false, cache_dir: default_cache_dir(),
cache_ttl: Duration::from_secs(24 * 3600), bypass_cache: false,
timeout: Duration::from_secs(30),
stale_threshold_days: 365,
}
}
}
fn default_cache_dir() -> PathBuf {
source::namespaced_cache_dir("osv")
}