2222SOFTWARE.
2323"""
2424
25+ from __future__ import annotations
26+
2527import asyncio
2628import datetime
2729import json
3638from ..backoff import Backoff
3739from ..exceptions import HTTPException , InvalidTokenException
3840from ..http import HTTPAsyncIterator , PaginatedConverter
41+ from ..payloads import TokenRefreshedPayload
3942from ..types_ .tokens import TokenMappingData
4043from ..utils import MISSING
4144from .oauth import OAuth
4447
4548
4649if TYPE_CHECKING :
47- from ..types_ .tokens import TokenMapping
50+ from ..client import Client
51+ from ..types_ .tokens import TokenMapping , _TokenRefreshedPayload
4852 from .payloads import RefreshTokenPayload
4953
5054
@@ -64,6 +68,7 @@ def __init__(
6468 scopes : Scopes | None = None ,
6569 session : aiohttp .ClientSession = MISSING ,
6670 nested_key : str | None = None ,
71+ client : Client | None = None ,
6772 ) -> None :
6873 super ().__init__ (
6974 client_id = client_id ,
@@ -89,6 +94,21 @@ def __init__(
8994 self ._backoff : Backoff = Backoff (base = 3 , maximum_time = 90 )
9095
9196 self ._validate_task : asyncio .Task [None ] | None = None
97+ self ._client = client
98+
99+ def _dispatch_event (self , user_id : str , payload : RefreshTokenPayload ) -> None :
100+ if not self ._client :
101+ return
102+
103+ data : _TokenRefreshedPayload = {
104+ "user_id" : user_id ,
105+ "refresh_token" : payload .refresh_token ,
106+ "token" : payload .access_token ,
107+ "scopes" : Scopes (payload .scope ),
108+ "expires_in" : payload .expires_in ,
109+ }
110+
111+ self ._client .dispatch ("token_refreshed" , TokenRefreshedPayload (data = data ))
92112
93113 async def _attempt_refresh_on_add (self , token : str , refresh : str ) -> ValidateTokenPayload :
94114 logger .debug ("Token was invalid when attempting to add it to the token manager. Attempting to refresh." )
@@ -118,6 +138,7 @@ async def _attempt_refresh_on_add(self, token: str, refresh: str) -> ValidateTok
118138 "last_validated" : datetime .datetime .now ().isoformat (),
119139 }
120140
141+ self ._dispatch_event (valid_resp .user_id , resp )
121142 logger .info ('Token successfully added to TokenManager after refresh: "%s"' , valid_resp .user_id )
122143 return valid_resp
123144
@@ -206,6 +227,7 @@ async def request(self, route: Route) -> RawResponse | str | None:
206227 "last_validated" : datetime .datetime .now ().isoformat (),
207228 }
208229
230+ self ._dispatch_event (old ["user_id" ], refresh )
209231 route .update_headers ({"Authorization" : f"Bearer { refresh .access_token } " })
210232 return await self .request (route )
211233
@@ -247,6 +269,8 @@ async def _refresh_token(self, user_id: str, refresh: str) -> None:
247269 "last_validated" : datetime .datetime .now ().isoformat (),
248270 }
249271
272+ self ._dispatch_event (user_id , resp )
273+
250274 async def _revalidate_all (self ) -> None :
251275 logger .debug ("Attempting to revalidate all tokens that have passed the timeout on %s." , self .__class__ .__qualname__ )
252276
0 commit comments