use crate::graph::GraphNode;
use anyhow::Result;
use serde_json::json;
pub fn generate_slsa_l2_provenance(nodes: &[GraphNode]) -> Result<serde_json::Value> {
let resolved_dependencies: Vec<serde_json::Value> = nodes
.iter()
.map(|node| {
json!({
"name": node.package_name,
"version": node.resolved_version,
"digest": {
"sha256": node.content_hash.trim_start_matches("sha256:")
}
})
})
.collect();
let provenance = json!({
"_type": "https://in-toto.io/Statement/v1",
"predicateType": "https://slsa.dev/provenance/v1",
"subject": resolved_dependencies,
"predicate": {
"buildDefinition": {
"buildType": "https://rivox.dev/build/v1",
"externalParameters": {},
"internalParameters": {
"slsaLevel": "SLSA_BUILD_LEVEL_2"
}
},
"runDetails": {
"builder": {
"id": "https://github.com/aaryanrwt/rivox@v1.0.0"
}
}
}
});
Ok(provenance)
}