onSessionUpdated property
Emits the refreshed Session every time an expired access token is renewed, so the owner of the credentials can re-persist them.
Without this, an automatic refresh is invisible outside the client:
session holds the new credentials, but nothing tells the caller to read
it. Because refresh tokens are single-use, a caller that keeps persisting
the session it originally passed in ends up storing a spent refresh
token, and the next run restores a session that can no longer be
refreshed. Mirrors OAuthSessionManager.onSessionUpdated, which covers
the same need for the OAuth path — this stream is the legacy
(app-password) counterpart and stays silent on OAuth-backed contexts.
Implementation
Stream<Session> get onSessionUpdated => _sessionUpdates.stream;