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
Description
PPE currently uses
reqwestfor 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::Clientwithdefault-features = falseandrustls-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
reqwestdependency anywhere in the workspace, including dev-dependencies and testsjwks_url_e2e.rsand the CIBA and delegator tests pass without loosening assertionscargo denyclean