use crate::mcp::{McpError, McpResult};
use reqwest::header::{HeaderMap, HeaderName, HeaderValue};
use std::collections::BTreeMap;
pub(crate) const REDACTED_HEADER_VALUE: &str = "[REDACTED]";
pub(crate) fn resolve_http_headers(headers: &BTreeMap<String, String>) -> McpResult<HeaderMap> {
let mut resolved = HeaderMap::new();
for (name, value) in headers {
let header_name = HeaderName::from_bytes(name.as_bytes())
.map_err(|_| McpError::Config(format!("invalid MCP HTTP header name '{name}'")))?;
let header_value = HeaderValue::from_str(value)
.map_err(|_| McpError::Config(format!("invalid MCP HTTP header value for '{name}'")))?;
resolved.insert(header_name, header_value);
}
Ok(resolved)
}
pub(crate) fn redact_headers(headers: &BTreeMap<String, String>) -> BTreeMap<String, String> {
headers
.keys()
.map(|name| (name.clone(), REDACTED_HEADER_VALUE.to_string()))
.collect()
}