A lexicon-driven AppView for ATProto.
0

Configure Feed

Select the types of activity you want to include in your feed.

happyview / src / http_retry.rs
826 B 24 lines
1/// Parse rate-limit sleep duration from response headers. 2/// Checks `RateLimit-Reset` (Unix timestamp, used by XRPC servers) first, 3/// then `retry-after` (seconds), defaulting to 5s. 4pub fn parse_retry_after(headers: &reqwest::header::HeaderMap) -> u64 { 5 if let Some(reset) = headers 6 .get("ratelimit-reset") 7 .and_then(|v| v.to_str().ok()) 8 .and_then(|v| v.parse::<i64>().ok()) 9 { 10 let now = std::time::SystemTime::now() 11 .duration_since(std::time::UNIX_EPOCH) 12 .unwrap_or_default() 13 .as_secs() as i64; 14 let wait = (reset - now).max(1) as u64; 15 return wait.min(120); 16 } 17 18 headers 19 .get("retry-after") 20 .and_then(|v| v.to_str().ok()) 21 .and_then(|v| v.parse::<u64>().ok()) 22 .unwrap_or(5) 23 .min(120) 24}