token method

Future<NexusShieldToken?> token({
  1. bool forceRefresh = false,
})

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;
}