@@ -18,10 +18,17 @@ import type { ApiConfig, ApiConfigResolved } from '../request'
1818
1919type FollowingUpdatesMoreKey = PersonalUpdate . FollowingUpdatesResponseMoreKey
2020
21+ interface Events {
22+ onRenewToken : ( accessToken : string , refreshToken : string ) => void
23+ }
24+
2125export class JikeClient {
2226 #refreshToken: string
2327 #config: ApiConfigResolved
2428 #client! : Api
29+ #listener: {
30+ [ K in keyof Events ] ?: Set < Events [ K ] >
31+ } = { }
2532
2633 get accessToken ( ) {
2734 return this . #config. accessToken
@@ -266,6 +273,18 @@ export class JikeClient {
266273 this . #refreshToken =
267274 result . data [ `x-${ this . #config. endpointId } -refresh-token` ]
268275 this . accessToken = result . data [ `x-${ this . #config. endpointId } -access-token` ]
276+
277+ this . #triggerListener( 'onRenewToken' , [ this . accessToken , this . refreshToken ] )
278+ }
279+
280+ #triggerListener< T extends keyof Events > (
281+ type : T ,
282+ args : Parameters < Events [ T ] >
283+ ) {
284+ const listeners = this . #listener[ type ]
285+ for ( const listener of listeners ?? new Set ( ) ) {
286+ listener . apply ( this , args )
287+ }
269288 }
270289
271290 /**
@@ -325,6 +344,12 @@ export class JikeClient {
325344 const json : JikeClientJSON = JSON . parse ( data )
326345 return this . fromJSON ( json )
327346 }
347+
348+ // TODO: use Event Emitter
349+ addEventListener < T extends keyof Events > ( type : T , listener : Events [ T ] ) {
350+ this . #listener[ type ] ||= new Set ( )
351+ this . #listener[ type ] ! . add ( listener )
352+ }
328353}
329354
330355export interface JikeClientJSON extends Omit < ApiConfigResolved , 'beforeRetry' > {
0 commit comments