- Automatic initial authentication
- Automatic re-authentication on session expiry
- Detected by the `URL_POST_CONSUMPTION_XML` request landing on the login page and/or malformed XML response
- Automatic authentication for accessor methods that rely on `refresh()`
- Prevents errors if the user doesn't run `refresh()` before fetching data
- Retries for all methods that rely on remote data being present
- Customized exceptions for faster identification in external systems (like [Home Assistant](https://github.com/emcniece/hass-bchydro))
- Authentication rate limiting to prevent BCHydro account lockout
- Lightweight data caching on `refresh()` to prevent API connection flooding
- Cleaner delineation between async refresh-able methods and class data accessors
- Asynchronous methods that invoke refresh: `get_latest_point()`, `get_latest_interval()`, `get_latest_usage()`, `get_latest_cost()`
- Synchronous data accessors: `self.latest_point`, `self.latest_interval`, `self.latest_usage`, `self.latest_cost`
⚠️ _Very_ breaking with v0.7.