capacityRetryAfter static method
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;
}