From 5b185c79decd5d65ac89591bc6e07661a8b4bb9e Mon Sep 17 00:00:00 2001 From: Zed Date: Mon, 20 Dec 2021 04:19:11 +0100 Subject: [PATCH] Improve token management logic --- src/apiutils.nim | 6 ++---- src/tokens.nim | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/apiutils.nim b/src/apiutils.nim index 2a1e42e..6b2b83f 100644 --- a/src/apiutils.nim +++ b/src/apiutils.nim @@ -53,10 +53,8 @@ proc fetch*(url: Uri; oldApi=false): Future[JsonNode] {.async.} = result = newJNull() if not oldApi and resp.headers.hasKey(rl & "reset"): - let time = fromUnix(parseInt(resp.headers[rl & "reset"])) - if token.reset != time: - token.remaining = parseInt(resp.headers[rl & "limit"]) - token.reset = time + token.remaining = parseInt(resp.headers[rl & "remaining"]) + token.reset = fromUnix(parseInt(resp.headers[rl & "reset"])) if result.getError notin {invalidToken, forbidden, badToken}: token.lastUse = getTime() diff --git a/src/tokens.nim b/src/tokens.nim index 5da90e2..1cf35cf 100644 --- a/src/tokens.nim +++ b/src/tokens.nim @@ -57,7 +57,7 @@ template expired(token: Token): untyped = token.lastUse < time - maxLastUse template isLimited(token: Token): untyped = - token == nil or (token.remaining <= 1 and token.reset > getTime()) or + token == nil or (token.remaining <= 5 and token.reset > getTime()) or token.expired proc release*(token: Token; invalid=false) = @@ -79,8 +79,6 @@ proc getToken*(): Future[Token] {.async.} = if result == nil: raise rateLimitError() - dec result.remaining - proc poolTokens*(amount: int) {.async.} = var futs: seq[Future[Token]] for i in 0 ..< amount: