feat(http): implement shared HTTP client (ClientWithMiddleware + retry + Retry-After, OQ-40)

Adds SharedHttpClient wrapping ArcSwap<ClientWithMiddleware> with a
RetryTransientMiddleware + inlined RetryAfterMiddleware stack.
HttpClientConfig covers pool, timeout, retry policy, and optional CA
bundle/client cert. reload() rebuilds and swaps via ArcSwap. No env-var
reads; credential injection is per-request, not at construction.
This commit is contained in:
2026-07-01 17:20:49 +00:00
parent 1900c72deb
commit 081fc911ef
5 changed files with 634 additions and 2 deletions

11
Cargo.lock generated
View File

@@ -105,9 +105,12 @@ version = "0.1.0"
dependencies = [
"alknet-call",
"alknet-core",
"arc-swap",
"async-trait",
"axum",
"futures",
"http",
"httpdate",
"hyper",
"openapiv3",
"reqwest 0.13.4",
@@ -119,6 +122,7 @@ dependencies = [
"thiserror 2.0.18",
"tokio",
"tracing",
"url",
"uuid",
]
@@ -3244,6 +3248,7 @@ version = "0.11.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e"
dependencies = [
"aws-lc-rs",
"bytes",
"fastbloom",
"getrandom 0.3.4",
@@ -3538,15 +3543,21 @@ dependencies = [
"http-body",
"http-body-util",
"hyper",
"hyper-rustls",
"hyper-util",
"js-sys",
"log",
"percent-encoding",
"pin-project-lite",
"quinn",
"rustls",
"rustls-pki-types",
"rustls-platform-verifier",
"serde",
"serde_json",
"sync_wrapper",
"tokio",
"tokio-rustls",
"tokio-util",
"tower",
"tower-http",