#![forbid(unsafe_code)]
#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
#![warn(missing_docs, rust_2018_idioms)]
#[cfg(not(any(feature = "native-tls", feature = "rustls")))]
compile_error!(
"hypertor requires a TLS backend. Enable either 'rustls' (recommended) or 'native-tls' feature."
);
pub mod body;
pub mod client;
pub mod config;
pub mod error;
pub mod prelude;
pub mod request;
pub mod response;
pub mod serve;
pub mod stream;
pub mod circuit;
pub mod dns;
pub mod doh;
pub mod isolation;
pub mod pool;
pub mod proxy;
pub mod tls;
pub mod adaptive;
pub mod backpressure;
pub mod breaker;
pub mod retry;
pub mod rotation;
pub mod batch;
pub mod cache;
pub mod dedup;
pub mod keepalive;
pub mod prewarm;
pub mod queue;
pub mod ratelimit;
pub mod onion_service;
pub mod security;
pub mod http2;
pub mod websocket;
pub mod health;
pub mod hooks;
pub mod metrics;
pub mod observability;
pub mod prometheus;
pub mod tracing;
pub mod compression;
pub mod cookies;
pub mod middleware;
pub mod redirect;
pub mod session;
pub mod streaming;
pub mod timeout;
pub mod intercept;
#[cfg(feature = "python")]
pub mod python;
pub use body::Body;
pub use client::{TorClient, TorClientBuilder};
pub use config::{Config, ConfigBuilder};
pub use error::{Error, Result};
pub use request::RequestBuilder;
pub use response::Response;
pub use serve::{
AppStats, Handler, Json, MethodHandler, OnionApp, OnionAppConfig, Request as ServeRequest,
Response as ServeResponse, delete, get, head, options, patch, post, put,
};
pub use circuit::{CircuitConfig, CircuitManager, CircuitStats};
pub use dns::{DnsCache, DnsResult, TorDnsResolver};
pub use doh::{
DnsRecord, DnsResponse, DohConfig, DohError, DohFormat, DohProvider, DohResolver, DohStats,
MultiDohResolver, RecordData, RecordType,
};
pub use isolation::{IsolatedSession, IsolationLevel, IsolationToken};
pub use pool::{ConnectionPool, PoolConfig};
pub use proxy::{ProxyConfig, ShutdownHandle, Socks5Proxy};
pub use adaptive::{
AdaptiveRetry, AdaptiveRetryConfig, AdaptiveRetryManager, AdaptiveRetryStats, AttemptOutcome,
RetryDecision,
};
pub use backpressure::{
BackpressureConfig, BackpressureController, BackpressureError, BackpressurePermit,
BackpressureStats, LoadShedder,
};
pub use breaker::{BreakerConfig, BreakerManager, BreakerResult, BreakerState, CircuitBreaker};
pub use retry::RetryConfig;
pub use rotation::{CircuitHealth, CircuitRotator, RotationConfig, RotationStats};
pub use batch::{Batch, BatchConfig, BatchItem, BatchProcessor, Batcher, BatcherStats};
pub use cache::{CacheConfig, CacheControl, CachedResponse, HttpCache};
pub use dedup::{DedupConfig, Deduplicator, RequestKey, SharedResult};
pub use keepalive::{ConnectionState, KeepAliveConfig, KeepAliveHints};
pub use prewarm::{CircuitPrewarmer, PrewarmConfig};
pub use queue::{Priority, PriorityQueue, QueueConfig, QueueStatistics};
pub use ratelimit::{RateLimitConfig, RateLimitResult, RateLimiter, TokenBucket};
pub use security::{
ClientSecurityConfig,
SecurityLevel,
ServiceSecurityConfig,
};
pub use tor_guardmgr::VanguardMode;
pub use onion_service::{
ClientAuthKey as HsClientKey,
ClientAuthMode,
HsClientDescEncKey,
OnionService as HiddenService,
OnionServiceConfig as HsConfig,
OnionServiceWithEvents as HiddenServiceWithEvents,
OnionStream as HsStream,
RateLimit,
ServiceEvent as HsEvent,
ServiceState as HsState,
ServiceStats as HsStats,
};
pub use http2::{
ConnectionState as Http2ConnectionState, ErrorCode as Http2ErrorCode, Frame as Http2Frame,
FrameFlags, FrameHeader, FrameType, Hpack, Http2Config, Http2Connection, Http2Error,
Http2Stats, SettingId, Settings as Http2Settings, Stream as Http2Stream, StreamEvent,
StreamState as Http2StreamState,
};
pub use websocket::{
CloseCode,
CloseFrame,
EchoHandler,
Frame,
Message as WsMessage,
Opcode,
TorWebSocket,
TorWebSocketBuilder,
UpgradeRequest,
UpgradeResponse,
WebSocketClient,
WebSocketConfig,
WebSocketConnection,
WebSocketError,
WebSocketHandler,
WebSocketServer,
WebSocketState,
WebSocketStats,
generate_accept_key,
generate_client_key,
};
pub use health::{HealthCheck, HealthCheckConfig, HealthStatus, Metrics};
pub use hooks::{ErrorHook, Hooks, PostResponseHook, PreRequestHook};
pub use metrics::{Counter, Gauge, Histogram, HttpMetrics, MetricsReport};
pub use prometheus::{
HistogramTimer, MetricsRegistry, PrometheusCounter, PrometheusGauge, PrometheusHistogram,
PrometheusSummary, TorMetrics, default_latency_buckets, export_metrics, global_metrics, labels,
size_buckets, tor_latency_buckets,
};
pub use tracing::{Span, SpanId, SpanKind, SpanStatus, TraceContext, TraceId, Tracer};
pub use compression::Compression;
pub use cookies::{Cookie, CookieJar};
pub use middleware::{HeaderMiddleware, LoggingMiddleware, MiddlewareStack, RateLimitMiddleware};
pub use redirect::{RedirectAction, RedirectGuard, RedirectPolicy};
pub use session::Session;
pub use streaming::{StreamingBody, StreamingResponseBuilder};
pub use timeout::Timeouts;
pub use intercept::{
FnRequestInterceptor, FnResponseInterceptor, HttpExchange, HttpHistory, InterceptConfig,
InterceptId, InterceptProxy, InterceptedRequest, InterceptedResponse, ModifiedRequest,
ModifiedResponse, RequestAction, RequestInterceptor, ResponseAction, ResponseInterceptor,
};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");