@@ -103,8 +103,28 @@ export function AuthKitProvider(props: AuthKitProviderProps) {
103103 return initialize ( ) ;
104104 } , [ clientId , apiHostname , https , port , redirectUri , refreshBufferInterval ] ) ;
105105
106+ const [ accessToken , setAccessToken ] = React . useState < string | null > ( null ) ;
107+ React . useEffect ( ( ) => {
108+ const handleAccessTokenChange = (
109+ event : CustomEvent < { accessToken : string } > ,
110+ ) => {
111+ setAccessToken ( event . detail . accessToken ) ;
112+ } ;
113+
114+ // authkit-js emits a "authkit:tokenchange" event when the access token is
115+ // refreshed. We want to use this to update the state with the new access
116+ // token so that it is available and up-to-date at render-time.
117+ window . addEventListener ( "authkit:tokenchange" , handleAccessTokenChange ) ;
118+ return ( ) => {
119+ window . removeEventListener (
120+ "authkit:tokenchange" ,
121+ handleAccessTokenChange ,
122+ ) ;
123+ } ;
124+ } , [ ] ) ;
125+
106126 return (
107- < Context . Provider value = { { ...client , ...state } } >
127+ < Context . Provider value = { { ...client , ...state , accessToken } } >
108128 { children }
109129 </ Context . Provider >
110130 ) ;
@@ -137,3 +157,21 @@ const NOOP_CLIENT: Client = {
137157 switchToOrganization : ( ) => Promise . resolve ( ) ,
138158 signOut : async ( ) => { } ,
139159} ;
160+
161+ // TODO: Move this to a global declaration file. Requires some re-configuring of tsconfig.json.
162+ declare global {
163+ interface CustomEventMap {
164+ "authkit:tokenchange" : CustomEvent < { accessToken : string } > ;
165+ }
166+ interface Window {
167+ addEventListener < K extends keyof CustomEventMap > (
168+ type : K ,
169+ listener : ( this : Document , ev : CustomEventMap [ K ] ) => void ,
170+ ) : void ;
171+ removeEventListener < K extends keyof CustomEventMap > (
172+ type : K ,
173+ listener : ( this : Document , ev : CustomEventMap [ K ] ) => void ,
174+ ) : void ;
175+ dispatchEvent < K extends keyof CustomEventMap > ( ev : CustomEventMap [ K ] ) : void ;
176+ }
177+ }
0 commit comments