# 0.24.0 ## Features ### `:oauth` plugin The `:oauth` plugin manages the handling of a given OAuth session, in that it ships with convenience methods to generate a new access token, which it then injects in all requests. More info under https://honeyryderchuck.gitlab.io/httpx/wiki/OAuth ### session callbacks HTTP request/response lifecycle events have now the ability of being intercepted via public API callback methods: ```ruby HTTPX.on_request_completed do |request| puts "request to #{request.uri} sent" end.get(...) ``` More info under https://honeyryderchuck.gitlab.io/httpx/wiki/Events to know which events and callback methods are supported. ### `:circuit_breaker` plugin `on_circuit_open` callback A callback has been introduced for the `:circuit_breaker` plugin, which is triggered when a circuit is opened. ```ruby http = HTTPX.plugin(:circuit_breaker).on_circuit_open do |req| puts "circuit opened for #{req.uri}" end http.get(...) ``` ## Improvements Several `:response_cache` features have been improved: * `:response_cache` plugin: response cache store has been made thread-safe. * cached response sharing across threads is made safer, as stringio/tempfile instances are copied instead of shared (without copying the underling string/file). * stale cached responses are eliminate on cache store lookup/store operations. * already closed responses are evicted from the cache store. * fallback for lack of compatible response "date" header has been fixed to return a `Time` object. ## Bugfixes * Ability to recover from errors happening during response chunk processing (required for overriding behaviour and response chunk callbacks); error bubbling up will result in the connection being closed. * Happy eyeballs support for multi-homed early-resolved domain names (such as `localhost` under `/etc/hosts`) was broken, as it would try the first given IP; so, if given `::1` and connection would fail, it wouldn't try `127.0.0.1`, which would have succeeded. * `:digest_authentication` plugin was removing the "algorithm" header on `-sess` declared algorithms, which is required for HTTP digest auth negotiation.