@@ -262,13 +262,15 @@ class Token:
262262
263263 def __init__ (self , json : Dict [str , Any ]) -> None :
264264 self .access_token = json ["access_token" ]
265- expires_in : int = json ["expires_in" ]
266- self .expires_at = int (time .time ()) + expires_in
267265 self .token_type = json ["token_type" ]
268266
269- # TODO add a buffer of 10s to avoid nearly expiring tokens
270- def is_expired (self ) -> bool :
271- return self .expires_at >= int (time .time ())
267+ expires_in : int = json ["expires_in" ]
268+ refresh_in : int = expires_in if expires_in <= 10 else expires_in - 10
269+ # avoid token expiry during request send by refreshing 10 seconds earlier
270+ self .refresh_at = int (time .time ()) + refresh_in
271+
272+ def should_refresh (self ) -> bool :
273+ return self .refresh_at >= int (time .time ())
272274
273275 def __init__ (self , oauth_url : str , credentials : Tuple [str , str ]) -> None :
274276 self ._token : Optional [AuraApi .Auth .Token ] = None
@@ -281,7 +283,7 @@ def __call__(self, r: requests.PreparedRequest) -> requests.PreparedRequest:
281283 return r
282284
283285 def _auth_token (self ) -> str :
284- if self ._token is None or self ._token .is_expired ():
286+ if self ._token is None or self ._token .should_refresh ():
285287 self ._token = self ._update_token ()
286288 return self ._token .access_token
287289
0 commit comments