# 1.7.1

## Improvements

* fixed timers handling in the selector loop which caused them to be traversed-for-drop twice on each tick.
* connection: take proxy connecting states when transitioning to `:closing` state.
* refactored name resolution cache to a cache adapter API with a default memory cache which keeps the current behaviour and will allow to add others.
  * a new option, `:resolver_cache`, was added, which is `:memory` by default.
  * this fixes an issue introduced for multi-ractor support where the cache store would not be thread-safe when used in a non main ractor.
* `:auth` plugin: when loaded with the `:retries` plugin, and the auth value method is dynamic/callable, will recover out-of-the-box from 401 HTTP responses by retrying the request with a newly-generated token.
  * the `:rate_limiter` plugin will use this work to retry rate-limited responses without having to set setting `:retry_change_requests` to true, thereby eliminating a potential issue with non-idempotent requests.

## Bugfixes

* HTTP1 parser: clear buffer on reset.
* http1 fix: handle the case in `#handle_error` where the response is an error response
* `:stream_bidi` plugin: fix internal state preventing bidi requests from being retried.
* `:stream_bidi` plugin: will only allow initial request body being passed using `:body` param (others, like `:json`, will raise an exception)
* https resolver: return `:idle` on `#state` calls when no connection is available (sometimes called in internal log messages).
* selector loop fix: when there are no selectables and an interval is passed, sleep instead of returning (thereby avoiding potential busy loop).