@@ -69,14 +69,23 @@ async def main() -> None:
6969
7070- ` authenticate(username, password) -> TokenResponse `
7171- ` refresh_access_token(refresh_token) -> TokenResponse `
72+ - ` fetch_token_details(username, password) -> TokenEndpointResult `
73+ - ` fetch_refresh_token_details(refresh_token) -> TokenEndpointResult `
7274- ` get_locations_or_raise(token) -> list[dict] `
7375- ` get_home_data_or_raise(token, location_id) -> dict `
7476- ` HomelyWebSocket(...).connect_or_raise() `
7577
78+ Legacy compatibility helpers remain available:
79+
80+ - ` fetch_token_with_reason(username, password) -> tuple[dict | None, str | None] `
81+ - ` fetch_token(username, password) -> dict | None `
82+ - ` fetch_refresh_token(refresh_token) -> dict | None `
83+
7684Main exports:
7785
7886- ` HomelyClient `
7987- ` HomelyWebSocket `
88+ - ` TokenEndpointResult `
8089- ` TokenResponse `
8190- ` HomelyConnectionError `
8291- ` HomelyAuthError `
@@ -88,12 +97,33 @@ Main exports:
8897- ` HomelyConnectionError ` : network or service unavailable
8998- ` HomelyAuthError ` : invalid credentials or rejected token
9099- ` HomelyResponseError ` : unexpected response or HTTP failure
100+ Carries ` status ` and ` body_preview ` when available.
91101- ` HomelyWebSocketError ` : websocket could not be established
92102
103+ ## Token Diagnostics
104+
105+ If you need more than success/failure, use the detailed token helpers:
106+
107+ ``` python
108+ result = await client.fetch_refresh_token_details(refresh_token)
109+ if result.ok:
110+ print (result.token.access_token)
111+ else :
112+ print (result.reason, result.status, result.detail, result.body_preview)
113+ ```
114+
115+ ` TokenEndpointResult.reason ` can distinguish between invalid credentials, invalid refresh
116+ tokens, network errors, timeouts, malformed JSON, malformed payloads, empty responses, and
117+ unexpected HTTP failures.
118+
119+ ## Websocket Note
120+
121+ Refreshing an access token does not require forcing an already-connected websocket to reconnect.
122+ The websocket token only matters when a new websocket connection is established or re-established.
123+
93124## License
94125
95126MIT. See [ LICENSE] ( LICENSE ) .
96127
97128
98- ⭐ If you find this integration useful, please consider giving it a star on [ GitHub] ( https://github.com/ludvikroed/python-homely ) ! ⭐
99-
129+ ⭐ If you find this package useful, please consider giving it a star on [ GitHub] ( https://github.com/ludvikroed/python-homely ) ! ⭐
0 commit comments