&8212; Fixed a bug where POST request parameters were not encoded correctly
&8212; Fixed a bug in `PycURLSession.send_request()` that made it ignore passed headers
&8212; `RequestsSession.close()` now closes all underlying session instances, instead of only the current thread-local one
&8212; All methods of `Client` and `AsyncClient` now use existing session
&8212; Removed `session_factory` attribute and `make_session()` method of `Client` and `AsyncClient`
&8212; Session class can now be specified as a string
&8212; Added `Client.get_device_code()`/`AsyncClient.get_device_code()` methods
&8212; Added `Client.get_token_from_device_code()`/`AsyncClient.get_token_from_device_code()` methods
&8212; Added missing `redirect_uri` parameter for `Client.get_auth_url()`/`AsyncClient.get_auth_url()` and `Client.get_code_url()`/`AsyncClient.get_code_url()`
&8212; Added support for PKCE parameters for `Client.get_auth_url()`/`AsyncClient.get_auth_url()`, `Client.get_code_url()`/`AsyncClient.get_code_url()` and `Client.get_token()`/`AsyncClient.get_token()`
&8212; Added `scope` attribute for `TokenObject`
&8212; Added new exception classes: `InvalidClientError`, `InvalidGrantError`, `AuthorizationPendingError`, `BadVerificationCodeError` and `UnsupportedTokenTypeError`