token method
A valid token, exchanging (or refreshing) one if needed. Concurrent callers share one exchange. Null when one can't be obtained right now.
Implementation
Future<NexusShieldToken?> token({bool forceRefresh = false}) async {
if (!_supported) return null;
final t = _token;
if (!forceRefresh && t != null && !t.isExpired) return t;
if (_backoffUntil != null && DateTime.now().isBefore(_backoffUntil!) && !forceRefresh) return t;
if (_inflight != null) return _inflight!.future;
final c = _inflight = Completer<NexusShieldToken?>();
try {
final fresh = await _exchange(retryOnStaleKey: true);
c.complete(fresh ?? t);
} catch (e, st) {
NexusLog.error('shield: exchange failed', e, st);
c.complete(t);
} finally {
_inflight = null;
}
return c.future;
}