refresh method
Rotates the refresh token (POST /auth/refresh); false when the session is gone (→ sign in again).
Implementation
Future<bool> refresh() => _refreshing ??= () async {
try {
final t = await tokenStore.read(_key);
final rt = t?.refreshToken;
if (rt == null) return false;
try {
final s = await _api.json(
CloudOperations.refreshSession,
CloudSession.fromJson,
body: {'refreshToken': rt},
authenticated: false,
);
final exp = clock.now().add(Duration(seconds: s.expiresIn));
await tokenStore.write(
_key,
StoredTokens(
accessToken: s.accessToken,
refreshToken: s.refreshToken ?? rt,
expiresAt: exp,
),
);
_set(
AccountSession(
accessToken: s.accessToken,
expiresAt: exp,
account: _session?.account,
),
);
return true;
} on UnauthorizedException {
await tokenStore.delete(_key);
_set(null);
return false;
}
} finally {
_refreshing = null;
}
}();