Skip to content

feat(http): replace reqwest with pingora client #20

Description

@terylt

Description

PPE currently uses reqwest for all outbound HTTP. Praxis runs on pingora, so shipping PPE with reqwest means two HTTP stacks, two TLS configs, and two connection pools in the same process. We need to be on the pingora client before PPE goes stable.

Three plugins are affected, all doing JSON over HTTPS:

  • builtins/plugins/identity-jwt - JWKS fetch (src/config.rs:277)
  • builtins/plugins/delegator-oauth - IdP token endpoint POST (src/delegator.rs:167)
  • builtins/plugins/elicitation-ciba - backchannel auth and token endpoint POSTs (src/approver.rs:109)

Each builds its own reqwest::Client with default-features = false and rustls-tls.

Pingora's client is lower level than reqwest, so this likely needs a small shared HTTP helper crate rather than three separate ports. Decide that shape first.

Acceptance Criteria

  • No reqwest dependency anywhere in the workspace, including dev-dependencies and tests
  • A shared HTTP client abstraction the three plugins use, with connection pooling and timeouts configurable per plugin
  • TLS stance preserved: rustls, no OpenSSL, no default features pulling in extra transports
  • Existing timeout, retry, and error mapping behavior unchanged from the caller's perspective
  • jwks_url_e2e.rs and the CIBA and delegator tests pass without loosening assertions
  • cargo deny clean
  • Plugin config surface unchanged, or the break is documented in CHANGELOG

Metadata

Metadata

Assignees

Labels

choreInfra, dependency updates, etc.

Type

Projects

Status
In progress

Relationships

None yet

Development

No branches or pull requests

Issue actions