All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Drop support for Python 3.8 and 3.9
- Add support for Python 3.12
- Fix login issues on brazilian marketplace.
- Fix a
RecursionError
which occurs when checking the length of anAuthenticator
instance.
- Multiple fixes for XXTEA encryption/decryption in metadata module.
- Add brazilian marketplace.
- Login function now checks for a
verification-code-form
tag in login HTML page.
- Drop support for Python 3.7.
- First step to refactor code.
- Switch project to poetry.
- Using nox and ruff for tests and linting.
- Allow httpx v0.23.x to fix a bug in httpx
- fix a bug in
Client.delete
andAsyncClient.delete
method
- full support of pre-Amazon accounts (e.g. refresh access token, deregister device)
Client
andAsynClient
now accepts session kwargs which are bypassed to the underlying httpx Client- a
respone_callback
can now be set toClient
andAsyncClient
class to allow custom preparation of response output - An absolut url (e.g. https://cde-ta-g7g.amazon.com/FionaCDEServiceEngine/sidecar) can now be passed to a client
get
,post
,delete
andput
method as thepath
arg. So in most cases the clientraw_request
method is not needed anymore.
- rename (and rework)
Client._split_kwargs
toClient._prepare_params
- fix a bug in registration url
Authenticator.from_dict
to instantiate anAuthenticator
from dict andAuthenticator.to_dict
to get authentication data as dict
- register a new device with
with_username=True
results in a server error due to wrong registration domain
- make sure activation bytes has 8 bytes, otherwise append ‚0‘ in front until 8 bytes are reached
- make sure metadata1 has 8 bytes, otherwise append ‚0‘ in front until 8 bytes are reached
- If installed, use playwright to login with external browser. Please
read here how to install playwright.
Then use
audible.Authenticator.from_login_external(COUNTRY_CODE)
for login. - fix login issues
- Fix a bug when searching for „resend-approval-link“ in login page
- switched to
auth_code_flow
when login (gives an auth code instead of an access token for security purposes) Authenticator.from_login
andAuthenticator.from_login_external
now always register a new deviceAuthenticator
now refreshesaccess_token
(when needed) before deregister the device- now simulate Audible app version 3.56.2 under iOS version 15.0.0
- login process now auto-detect next request method and url
- Correct documentation
- Update example download_books_aaxc.py
- Bump httpx to
v0.20.*
LoginAuthenticator
andFileAuthenticator
Authenticator.register_device
,Authenticator.re_login
andAuthenticator.re_login_external
- switch from httpx 0.16.x to 0.18.x
- logging error messages during login
- extend allowed chars by email check during login
- instead of raising an exception, invalid email will now be logged as warning
- Add description to the docs, to handling 2FA
- Provide a custom serial when login
- Login with Audible username instead of Amazon account for US, UK and DE markteplace
- register a device on Australian marketplace
- Redesign Module documentation
- Rework description of audible-cli package in documentation
- function
activation_bytes.fetch_activation_sign_auth
- Spain marketplace
activation_bytes.get_activation_bytes
uses the newfetch_activation_sign_auth
function, ifsigning
auth method is available. Otherwise activation bytes will be fetched the old way with aplayer_token
.
- Add initial cookies to login function to prevent captcha requests in most cases.
- Fetched activation bytes (with
extract=True
argument) will be stored toactivation_bytes
attribute of Authenticator class instance for now. Ignore existing activation bytes and force refresh withauth.get_activation_bytes(force_refresh=True)
activation_bytes
will be loaded from and save to file. Saved auth files are not backward compatible to previous audible versions so keep old files save.- Add
Client.raw_request
andAsyncClient.raw_request
method. - Provide a custom Callback with
approval_callback
keyword argument when login. - Add classmethod
Authenticator.from_login_external
and methodAuthenticator.re_login_external
. - Add
login_external
function to login.py
- Add description how to use pyotp with custom otp callback to docs
- Add description how to use login external to docs
- Added support to output the whole activation blob instead of the extracted activation bytes with
get_activation_bytes(extract=False, ...)
. - Added support to fetch website cookies for another country with
Authenticator.set_website_cookies_for_country
. - Added
Client.put
andAsyncClient.put
. - Added support to solve approval alerts during login
- The
FileAuthenticator
has been deprecated, use classmethodAuthenticator.from_file
instead. - The
Authenticator
don’t inherit from MutableMapping anymore - The
Authenticator
sets allowed instance attributes at creation toNone
, not allowed attributes will raise an Exception - The
LoginAuthenticator
has been deprecated, use classmethodAuthenticator.from_login
instead. - Changed internal code base for encryption and decryption metadata. Moved the related code to
metadata.py
.
- deprecated
AudibleAPI
- Added more docstrings and type hints to code base
- Added support to install Sphinx documentation dependencies with
pip install audible[docs]
. - Added a guide to use authentication with Postman.
- Rework documentation.
- Added
.readthedocs.yml
config file - Added module description (autodoc) to docs
- Uses
httpx
0.16.* for now
- Set
padding=„none“
when decrypting license voucher