capacityRetryAfter static method

Duration? capacityRetryAfter(
  1. String realmUri,
  2. String authId,
  3. RealmLimitSettings limits
)

Implementation

static Duration? capacityRetryAfter(
  String realmUri,
  String authId,
  RealmLimitSettings limits,
) {
  if (!_trackingEnabled(limits)) {
    _realmFailures.remove(realmUri);
    return null;
  }
  if (limits.maxFailedAuthRecords <= 0) {
    return Duration(
      milliseconds: limits.lockoutMs.clamp(1, 0x7fffffff).toInt(),
    );
  }
  final now = DateTime.now();
  _removeExpiredRecords(realmUri, now);
  final realmMap = _realmFailures[realmUri];
  final authIdKey = _authIdKey(authId);
  if (realmMap == null ||
      realmMap.containsKey(authIdKey) ||
      realmMap.length < limits.maxFailedAuthRecords) {
    return null;
  }

  DateTime? earliestExpiry;
  for (final record in realmMap.values) {
    if (earliestExpiry == null ||
        record.retainedUntil.isBefore(earliestExpiry)) {
      earliestExpiry = record.retainedUntil;
    }
  }
  if (earliestExpiry == null) {
    return null;
  }
  final retryAfter = earliestExpiry.difference(now);
  return retryAfter.isNegative ? Duration.zero : retryAfter;
}