# Relay A HTTP request-response relay used by Hoppscotch Desktop and Hoppscotch Agent for more advanced request handling including custom headers, certificates, proxies, and local system integration. > [!IMPORTANT] > This crate is only available via GitHub and not published on crates.io right now.
![GitHub License MIT](https://img.shields.io/github/license/CuriousCorrelation/relay) [![Rust](https://img.shields.io/badge/Rust-1.77.2+-orange)](https://www.rust-lang.org)
## Installation Add to your `Cargo.toml`: ```toml [dependencies] relay = { git = "https://github.com/CuriousCorrelation/relay.git" } ``` ## Features - 🦀 Blazingly fast! - HTTP client built on libcurl - HTTP/1.1, HTTP/2.0, HTTP/3.0 support - Security with SSL/TLS certificate management - Proxy support with authentication - Multiple authentication methods (Basic, Bearer, Digest) - Content handling (JSON, Form Data, Binary) - Custom security configurations - Async request execution with cancellation support ## Usage ```rust use relay::{Request, Response, execute}; let request = Request { id: 1, url: "https://api.example.com".to_string(), method: Method::Get, version: Version::Http2, // ... configure other options }; let response = execute(request).await?; ``` > [!NOTE] > All requests are executed asynchronously and can be cancelled using the `cancel(request_id)` function. ## Security Features > [!TIP] > You can configure certificate validation, host verification, and custom certificates: ```rust let security_config = SecurityConfig { validate_certificates: Some(true), verify_host: Some(true), certificates: Some(CertificateConfig { client: Some(CertificateType::Pem { cert: cert_data, key: key_data }), ca: Some(vec![ca_cert_data]) }) }; ``` ## Error Handling The crate uses a custom error type `RelayError` that provides information about failures: ```rust #[derive(Error)] pub enum RelayError { Network { message: String, cause: Option }, Certificate { message: String, cause: Option }, Parse { message: String, cause: Option }, // ... other variants } ``` ## Requirements - Rust 1.77.2 or later - OpenSSL development libraries - libcurl with SSL and HTTP/2.0 support > [!WARNING] > This crate uses custom forks of some dependencies for NTLM support and consistent OpenSSL backend across platforms. ## License Code: (c) 2024 - CuriousCorrelation MIT or MIT/Apache 2.0 where applicable.