use kodegen_mcp_schema::McpError;
use std::time::Duration;
pub const MAX_NAVIGATION_TIMEOUT_MS: u64 = 300_000;
pub const MAX_INTERACTION_TIMEOUT_MS: u64 = 30_000;
pub fn validate_navigation_timeout(
timeout_ms: Option<u64>,
default_ms: u64,
) -> Result<Duration, McpError> {
let ms = timeout_ms.unwrap_or(default_ms);
if ms > MAX_NAVIGATION_TIMEOUT_MS {
return Err(McpError::invalid_arguments(format!(
"Timeout cannot exceed {}ms ({} minutes). Received: {}ms ({:.1} minutes)",
MAX_NAVIGATION_TIMEOUT_MS,
MAX_NAVIGATION_TIMEOUT_MS / 60_000,
ms,
ms as f64 / 60_000.0
)));
}
Ok(Duration::from_millis(ms))
}
pub fn validate_interaction_timeout(
timeout_ms: Option<u64>,
default_ms: u64,
) -> Result<Duration, McpError> {
let ms = timeout_ms.unwrap_or(default_ms);
if ms > MAX_INTERACTION_TIMEOUT_MS {
return Err(McpError::invalid_arguments(format!(
"Timeout cannot exceed {}ms ({} seconds). Received: {}ms ({} seconds)",
MAX_INTERACTION_TIMEOUT_MS,
MAX_INTERACTION_TIMEOUT_MS / 1000,
ms,
ms / 1000
)));
}
Ok(Duration::from_millis(ms))
}