use crate::VERSION;
pub fn user_agent() -> String {
format!("polyester-sdk-rust/{VERSION}")
}
pub fn is_cloudflare_browser_ban(body: &str) -> bool {
let lowered = body.to_ascii_lowercase();
if lowered.contains("error code: 1010") || lowered.contains("error code 1010") {
return true;
}
lowered.contains("attention required") && lowered.contains("cloudflare")
}
pub fn cloudflare_1010_message() -> String {
format!(
"Request blocked by edge WAF (Cloudflare error 1010: browser signature banned). \
This is not an API authentication failure. \
Retry with User-Agent '{}' (set automatically by this SDK).",
user_agent()
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn user_agent_is_polyester_identity() {
let ua = user_agent();
assert!(ua.starts_with("polyester-sdk-rust/"));
assert!(!ua.contains("hyper"));
}
#[test]
fn detects_cloudflare_1010() {
let body = "<!DOCTYPE html><title>Attention Required! | Cloudflare</title>error code: 1010";
assert!(is_cloudflare_browser_ban(body));
assert!(!is_cloudflare_browser_ban(
r#"{"code":"permission_denied"}"#
));
}
}