Skip to main content

auths_infra_http/
lib.rs

1//! HTTP client adapter layer for Auths.
2//!
3//! Implements the network port traits defined in `auths-core` using `reqwest`.
4//! Each client wraps HTTP endpoints for the Auths infrastructure services.
5//!
6//! ## Modules
7//!
8//! - [`HttpRegistryClient`] — registry service client for identity and attestation operations
9//! - [`HttpWitnessClient`] — synchronous witness client for KERI event submission
10//! - [`HttpAsyncWitnessClient`] — async witness client with quorum support
11//! - [`HttpIdentityResolver`] — DID resolution over HTTP
12
13use std::time::Duration;
14
15mod async_witness_client;
16mod claim_client;
17mod error;
18mod github_gist;
19mod github_oauth;
20mod github_ssh_keys;
21mod identity_resolver;
22/// Namespace verification adapters for package ecosystem ownership proofs.
23pub mod namespace;
24mod npm_auth;
25mod oidc_platforms;
26mod oidc_tsa_client;
27mod oidc_validator;
28mod oobi_resolver;
29mod pairing_client;
30mod platform_context;
31mod registry_client;
32mod request;
33mod witness_client;
34
35pub use async_witness_client::HttpAsyncWitnessClient;
36pub use claim_client::HttpRegistryClaimClient;
37pub use github_gist::HttpGistPublisher;
38pub use github_oauth::HttpGitHubOAuthProvider;
39pub use github_ssh_keys::HttpGitHubSshKeyUploader;
40pub use identity_resolver::HttpIdentityResolver;
41pub use npm_auth::HttpNpmAuthProvider;
42pub use oidc_platforms::{
43    circleci_oidc_token, github_actions_oidc_token, gitlab_ci_oidc_token, normalize_workload_claims,
44};
45pub use oidc_tsa_client::HttpTimestampClient;
46pub use oidc_validator::{HttpJwksClient, HttpJwtValidator, OidcTokenClaims};
47pub use oobi_resolver::{HttpOobiError, HttpOobiResolver, MAX_OOBI_BYTES};
48pub use pairing_client::HttpPairingRelayClient;
49pub use platform_context::resolve_verified_platform_context;
50pub use registry_client::HttpRegistryClient;
51pub use witness_client::HttpWitnessClient;
52
53const DEFAULT_CONNECT_TIMEOUT: Duration = Duration::from_secs(10);
54const DEFAULT_REQUEST_TIMEOUT: Duration = Duration::from_secs(30);
55
56/// Returns a [`reqwest::ClientBuilder`] pre-configured with hardened defaults:
57/// 10s connect timeout, 30s request timeout, User-Agent, and TLS 1.2 minimum.
58pub(crate) fn default_client_builder() -> reqwest::ClientBuilder {
59    reqwest::Client::builder()
60        .connect_timeout(DEFAULT_CONNECT_TIMEOUT)
61        .timeout(DEFAULT_REQUEST_TIMEOUT)
62        .user_agent(concat!("auths/", env!("CARGO_PKG_VERSION")))
63        .min_tls_version(reqwest::tls::Version::TLS_1_2)
64}
65
66/// Builds an HTTP client with hardened defaults.
67///
68/// Usage:
69/// ```ignore
70/// let client = auths_infra_http::default_http_client();
71/// ```
72// INVARIANT: reqwest builder with these settings cannot fail
73#[allow(clippy::expect_used)]
74pub fn default_http_client() -> reqwest::Client {
75    default_client_builder()
76        .build()
77        .expect("failed to build default HTTP client")
78}