Browse Source

Raise NoAccountsError when all accounts limited

Zed 1 year ago
parent
commit
28d3ed7d9f
3 changed files with 10 additions and 1 deletions
  1. 4 1
      src/auth.nim
  2. 5 0
      src/nitter.nim
  3. 1 0
      src/types.nim

+ 4 - 1
src/auth.nim

@@ -125,6 +125,9 @@ proc getAccountPoolDebug*(): JsonNode =
 proc rateLimitError*(): ref RateLimitError =
   newException(RateLimitError, "rate limited")
 
+proc noAccountsError*(): ref NoAccountsError =
+  newException(NoAccountsError, "no accounts available")
+
 proc isLimited(account: GuestAccount; api: Api): bool =
   if account.isNil:
     return true
@@ -165,7 +168,7 @@ proc getGuestAccount*(api: Api): Future[GuestAccount] {.async.} =
     inc result.pending
   else:
     log "no accounts available for API: ", api
-    raise rateLimitError()
+    raise noAccountsError()
 
 proc setLimited*(account: GuestAccount; api: Api) =
   account.apis[api].limited = true

+ 5 - 0
src/nitter.nim

@@ -97,6 +97,11 @@ routes:
     resp Http429, showError(
       &"Instance has been rate limited.<br>Use {link} or try again later.", cfg)
 
+  error NoAccountsError:
+    const link = a("another instance", href = instancesUrl)
+    resp Http429, showError(
+      &"Instance has no available accounts.<br>Use {link} or try again later.", cfg)
+
   extend rss, ""
   extend status, ""
   extend search, ""

+ 1 - 0
src/types.nim

@@ -6,6 +6,7 @@ genPrefsType()
 
 type
   RateLimitError* = object of CatchableError
+  NoAccountsError* = object of CatchableError
   InternalError* = object of CatchableError
   BadClientError* = object of CatchableError