use canton_ledger::JsonClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let endpoint = std::env::var("CANTON_JSON_ENDPOINT")
.or_else(|_| std::env::var("CANTON_TEST_JSON_ENDPOINT"))
.unwrap_or_else(|_| "http://localhost:3975".to_string());
let mut client = JsonClient::new(&endpoint);
if let Ok(token) = std::env::var("CANTON_TOKEN") {
client = client.with_token(token);
} else if let (Ok(url), Ok(id), Ok(secret)) = (
std::env::var("CANTON_TEST_TOKEN_URL"),
std::env::var("CANTON_TEST_CLIENT_ID"),
std::env::var("CANTON_TEST_CLIENT_SECRET"),
) {
client = client.with_oidc(canton_auth::TokenProvider::new(
canton_auth::OidcConfig::new(url, id, secret),
));
}
println!(
"participant: {endpoint} (JSON Ledger API {})",
client.version().await?
);
let ids = client.list_packages().await?;
println!("packages known: {}", ids.len());
let Some(first) = ids.first() else {
println!("nothing to ask about: the participant has no packages");
return Ok(());
};
let asked = std::env::args().nth(1).unwrap_or_else(|| first.clone());
let status = client.package_status(&asked).await?;
println!("{asked}: {status:?}");
Ok(())
}