pub const REGISTRY: &[(&str, &str)] = &[
("fireworks", "FIREWORKS_API_KEY"),
("openrouter", "OPENROUTER_API_KEY"),
("anthropic", "ANTHROPIC_API_KEY"),
("openai", "OPENAI_API_KEY"),
("together", "TOGETHER_API_KEY"),
("atlascloud", "ATLASCLOUD_API_KEY"),
("slack", "SLACK_BOT_TOKEN"),
("slack-user", "SLACK_USER_TOKEN"),
("slack-app", "SLACK_APP_TOKEN"),
("telegram", "TELEGRAM_BOT_TOKEN"),
("claude-code", "CLAUDE_CODE_OAUTH_TOKEN"),
("tagent", "TAGENT_API_TOKEN"),
("github", "GITHUB_TOKEN"),
("github-gh-cli", "GH_TOKEN"),
("github-app", "GITHUB_APP_PRIVATE_KEY"),
("github-webhook", "GITHUB_WEBHOOK_SECRET"),
("bitbucket", "BITBUCKET_TOKEN"),
("bitbucket-app-password", "BITBUCKET_APP_PASSWORD"),
("jira", "JIRA_TOKEN"),
("jira-api", "JIRA_API_TOKEN"),
("linear", "LINEAR_API_KEY"),
("brave", "BRAVE_API_KEY"),
("google-oauth", "GOOGLE_OAUTH_CLIENT_SECRET"),
];
pub fn env_var_for(provider: &str) -> Option<&'static str> {
REGISTRY
.iter()
.find(|(key, _)| key.eq_ignore_ascii_case(provider))
.map(|(_, var)| *var)
}
pub fn registered_providers() -> &'static [(&'static str, &'static str)] {
REGISTRY
}
#[cfg(test)]
mod tests {
use super::*;
const CENSUS: &[&str] = &[
"FIREWORKS_API_KEY",
"OPENROUTER_API_KEY",
"ANTHROPIC_API_KEY",
"OPENAI_API_KEY",
"TOGETHER_API_KEY",
"ATLASCLOUD_API_KEY",
"SLACK_BOT_TOKEN",
"SLACK_USER_TOKEN",
"SLACK_APP_TOKEN",
"TELEGRAM_BOT_TOKEN",
"CLAUDE_CODE_OAUTH_TOKEN",
"TAGENT_API_TOKEN",
"GITHUB_TOKEN",
"GH_TOKEN",
"GITHUB_APP_PRIVATE_KEY",
"GITHUB_WEBHOOK_SECRET",
"BITBUCKET_TOKEN",
"BITBUCKET_APP_PASSWORD",
"JIRA_TOKEN",
"JIRA_API_TOKEN",
"LINEAR_API_KEY",
"BRAVE_API_KEY",
"GOOGLE_OAUTH_CLIENT_SECRET",
];
#[test]
fn registry_covers_the_full_census() {
let registered: Vec<&str> = REGISTRY.iter().map(|(_, var)| *var).collect();
for name in CENSUS {
assert!(
registered.contains(name),
"credential env var {name} is used in production source but unregistered — \
add it to credentials::registry::REGISTRY (#4564)"
);
}
for var in ®istered {
assert!(
CENSUS.contains(var),
"registry entry {var} is not in the recorded census — update CENSUS with the \
new call site, or drop the entry"
);
}
assert_eq!(REGISTRY.len(), CENSUS.len());
}
#[test]
fn env_var_for_known_providers() {
assert_eq!(env_var_for("fireworks"), Some("FIREWORKS_API_KEY"));
assert_eq!(env_var_for("OpenRouter"), Some("OPENROUTER_API_KEY"));
assert_eq!(env_var_for("anthropic"), Some("ANTHROPIC_API_KEY"));
assert_eq!(env_var_for("OPENAI"), Some("OPENAI_API_KEY"));
assert_eq!(env_var_for("together"), Some("TOGETHER_API_KEY"));
assert_eq!(env_var_for("atlascloud"), Some("ATLASCLOUD_API_KEY"));
assert_eq!(env_var_for("slack"), Some("SLACK_BOT_TOKEN"));
assert_eq!(env_var_for("Slack"), Some("SLACK_BOT_TOKEN"));
assert_eq!(env_var_for("slack-user"), Some("SLACK_USER_TOKEN"));
assert_eq!(env_var_for("Slack-User"), Some("SLACK_USER_TOKEN"));
assert_eq!(env_var_for("telegram"), Some("TELEGRAM_BOT_TOKEN"));
assert_eq!(env_var_for("claude-code"), Some("CLAUDE_CODE_OAUTH_TOKEN"));
assert_eq!(env_var_for("Claude-Code"), Some("CLAUDE_CODE_OAUTH_TOKEN"));
}
#[test]
fn env_var_for_is_case_insensitive_for_every_provider() {
for (provider, var) in REGISTRY {
assert_eq!(env_var_for(provider), Some(*var), "exact: {provider}");
assert_eq!(
env_var_for(&provider.to_ascii_uppercase()),
Some(*var),
"upper: {provider}"
);
let mixed: String = provider
.chars()
.enumerate()
.map(|(i, c)| {
if i % 2 == 0 {
c.to_ascii_uppercase()
} else {
c
}
})
.collect();
assert_eq!(env_var_for(&mixed), Some(*var), "mixed: {mixed}");
}
}
#[test]
fn registry_has_no_duplicate_provider_keys() {
let mut keys: Vec<String> = REGISTRY
.iter()
.map(|(k, _)| k.to_ascii_lowercase())
.collect();
keys.sort();
let before = keys.len();
keys.dedup();
assert_eq!(before, keys.len(), "duplicate provider key in REGISTRY");
}
#[test]
fn registry_has_no_duplicate_env_vars() {
let mut vars: Vec<&str> = REGISTRY.iter().map(|(_, v)| *v).collect();
vars.sort_unstable();
let before = vars.len();
vars.dedup();
assert_eq!(before, vars.len(), "duplicate env var in REGISTRY");
}
#[test]
fn env_var_for_unknown_provider_is_none() {
assert_eq!(env_var_for("some-future-provider"), None);
assert_eq!(env_var_for(""), None);
}
#[test]
fn registered_providers_matches_the_table() {
assert_eq!(registered_providers(), REGISTRY);
}
#[test]
#[allow(deprecated)]
fn deprecated_inference_alias_still_resolves() {
assert_eq!(
crate::inference::credentials::env_var_for("slack-app"),
Some("SLACK_APP_TOKEN")
);
}
}