diff --git a/src/tokens.nim b/src/tokens.nim index afbf2f7..c0bce26 100644 --- a/src/tokens.nim +++ b/src/tokens.nim @@ -27,12 +27,17 @@ proc fetchToken(): Future[Token] {.async.} = echo "token parse fail" return Token() + let time = getTime() result = Token(tok: resp[pos+3 .. pos+21], remaining: 187, - reset: getTime() + 15.minutes, init: getTime()) + reset: time + 15.minutes, init: time, lastUse: time) proc expired(token: Token): bool {.inline.} = - const expirationTime = 2.hours - result = token.init < getTime() - expirationTime + const + expirationTime = 2.hours + maxLastUse = 1.hours + let time = getTime() + result = token.init < time - expirationTime or + token.lastUse < time - maxLastUse proc isLimited(token: Token): bool {.inline.} = token == nil or (token.remaining <= 1 and token.reset > getTime()) or @@ -40,6 +45,7 @@ proc isLimited(token: Token): bool {.inline.} = proc release*(token: Token) = if token != nil and not token.expired: + token.lastUse = getTime() tokenPool.insert(token) proc getToken*(): Future[Token] {.async.} = diff --git a/src/types.nim b/src/types.nim index 44892ce..1e86fc2 100644 --- a/src/types.nim +++ b/src/types.nim @@ -9,6 +9,7 @@ type remaining*: int reset*: Time init*: Time + lastUse*: Time Error* = enum null = 0