Skip to main content

vulnera_advisor/
lib.rs

1//! # Vulnera Advisors
2//!
3//! A Rust library for aggregating and querying security vulnerability advisories
4//! from multiple sources including GitHub Security Advisories (GHSA), NIST NVD,
5//! and Google OSV.
6//!
7//! ## Features
8//!
9//! - **Multi-source aggregation**: Fetch from GHSA, NVD, OSV, CISA KEV, and OSS Index
10//! - **Unified data model**: All sources are normalized to a common Advisory format
11//! - **Enrichment**: EPSS scores and KEV status for prioritization
12//! - **Efficient storage**: Redis/DragonflyDB with zstd compression
13//! - **Flexible matching**: SemVer and ecosystem-specific version matching
14//!
15//! ## Quick Start
16//!
17//! ```rust,ignore
18//! use vulnera_advisors::{VulnerabilityManager, Config};
19//!
20//! #[tokio::main]
21//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
22//!     // Load config from environment
23//!     let config = Config::from_env()?;
24//!     let manager = VulnerabilityManager::new(config).await?;
25//!
26//!     // Sync advisories from all sources
27//!     manager.sync_all().await?;
28//!
29//!     // Query vulnerabilities for a package
30//!     let advisories = manager.query("npm", "lodash").await?;
31//!
32//!     // Check if a specific version is affected
33//!     let affected = manager.matches("npm", "lodash", "4.17.20").await?;
34//!
35//!     Ok(())
36//! }
37//! ```
38//!
39//! ## Builder Pattern
40//!
41//! For more control over configuration:
42//!
43//! ```rust,ignore
44//! use vulnera_advisors::VulnerabilityManager;
45//!
46//! let manager = VulnerabilityManager::builder()
47//!     .redis_url("redis://localhost:6379")
48//!     .with_osv_defaults()
49//!     .with_nvd(Some("your-api-key".to_string()))
50//!     .with_ghsa("your-github-token".to_string())
51//!     .build()?;
52//! ```
53
54pub mod aggregator;
55pub mod config;
56pub mod ecosystem;
57pub mod error;
58pub mod logging;
59pub mod manager;
60pub mod models;
61pub mod purl;
62pub mod remediation;
63pub mod sources;
64pub mod store;
65pub mod version_registry;
66
67// Re-export main types
68pub use config::{Config, NvdConfig, OssIndexConfig, StoreConfig};
69pub use error::{AdvisoryError, Result};
70pub use manager::{
71    BatchFailure, BatchFailureStage, BatchOutcome, BatchSummary, MatchOptions, PackageKey,
72    VulnerabilityManager, VulnerabilityManagerBuilder,
73};
74pub use models::{
75    Advisory, Affected, Enrichment, Event, Package, Range, RangeTranslation,
76    RangeTranslationStatus, RangeType, Reference, ReferenceType, Severity,
77};
78pub use store::{AdvisoryStore, DragonflyStore, EnrichmentData, HealthStatus, OssIndexCache};
79
80// Re-export remediation types
81pub use remediation::{Remediation, UpgradeImpact, build_remediation, classify_upgrade_impact};
82pub use version_registry::{PackageRegistry, VersionRegistry};
83
84// Re-export PURL helper
85pub use purl::{KNOWN_ECOSYSTEMS, Purl, PurlError, purl, purls_from_packages, purls_to_strings};
86
87// Re-export source types
88pub use sources::{
89    AdvisorySource,
90    epss::{EpssScore, EpssSource},
91    ghsa::GHSASource,
92    kev::{KevEntry, KevSource},
93    nvd::NVDSource,
94    ossindex::{ComponentReport, OssIndexSource, OssVulnerability},
95    osv::OSVSource,
96};