use crate::core::platform::secrets;
const SERVICE: &str = "aura-ai";
fn env_name(provider: &str) -> String {
if let Some(hosted) = crate::ai::catalog::hosted(provider) {
return hosted.env.into();
}
match provider {
"mercury" => "INCEPTION_API_KEY".into(),
other => format!("{}_API_KEY", other.to_uppercase().replace('-', "_")),
}
}
pub fn get(provider: &str) -> Option<String> {
secrets::get(SERVICE, provider)
.or_else(|| std::env::var(env_name(provider)).ok())
.filter(|key| !key.trim().is_empty())
}
pub fn get_exact(slot: &str) -> Option<String> {
secrets::get(SERVICE, slot).filter(|value| !value.trim().is_empty())
}
pub fn set(provider: &str, key: &str) -> Result<(), String> {
secrets::set(SERVICE, provider, key).map_err(|error| format!("{error}; o exporta {}", env_name(provider)))
}
pub fn remove(provider: &str) -> Result<(), String> {
secrets::remove(SERVICE, provider)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn nombres_de_variable_por_proveedor() {
assert_eq!(env_name("anthropic"), "ANTHROPIC_API_KEY");
assert_eq!(env_name("openai"), "OPENAI_API_KEY");
assert_eq!(env_name("open-router"), "OPEN_ROUTER_API_KEY");
}
}