agent-fetch 0.1.10

A sandboxed HTTP client for AI agents with SSRF protection, domain policies, rate limiting, and resource controls
Documentation
use std::net::IpAddr;

#[derive(Debug, thiserror::Error)]
pub enum FetchError {
    #[error("private IP blocked: host {host} resolved to {resolved_ip}")]
    PrivateIpBlocked { host: String, resolved_ip: IpAddr },

    #[error("domain not in allowlist: {0}")]
    DomainNotAllowed(String),

    #[error("domain is blocked: {0}")]
    DomainBlocked(String),

    #[error("scheme not allowed: {0}")]
    SchemeNotAllowed(String),

    #[error("method not allowed: {0}")]
    MethodNotAllowed(String),

    #[error("DNS resolution failed: {0}")]
    DnsResolutionFailed(String),

    #[error("request body too large: {size} bytes exceeds limit of {limit} bytes")]
    RequestBodyTooLarge { size: usize, limit: usize },

    #[error("response body too large: {size} bytes exceeds limit of {limit} bytes")]
    ResponseBodyTooLarge { size: usize, limit: usize },

    #[error("too many redirects (limit: {limit})")]
    TooManyRedirects { limit: u8 },

    #[error("rate limit exceeded")]
    RateLimitExceeded,

    #[error("connection timeout")]
    ConnectionTimeout,

    #[error("request timeout")]
    RequestTimeout,

    #[error("invalid URL: {0}")]
    InvalidUrl(String),

    #[error("HTTP error: {0}")]
    HttpError(String),

    #[error("redirect to private IP: {url} resolved to {resolved_ip}")]
    RedirectToPrivateIp { url: String, resolved_ip: IpAddr },
}