@@ -18,10 +18,17 @@ import type { ApiConfig, ApiConfigResolved } from '../request'
18
18
19
19
type FollowingUpdatesMoreKey = PersonalUpdate . FollowingUpdatesResponseMoreKey
20
20
21
+ interface Events {
22
+ onRenewToken : ( accessToken : string , refreshToken : string ) => void
23
+ }
24
+
21
25
export class JikeClient {
22
26
#refreshToken: string
23
27
#config: ApiConfigResolved
24
28
#client! : Api
29
+ #listener: {
30
+ [ K in keyof Events ] ?: Set < Events [ K ] >
31
+ } = { }
25
32
26
33
get accessToken ( ) {
27
34
return this . #config. accessToken
@@ -266,6 +273,18 @@ export class JikeClient {
266
273
this . #refreshToken =
267
274
result . data [ `x-${ this . #config. endpointId } -refresh-token` ]
268
275
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
+ }
269
288
}
270
289
271
290
/**
@@ -325,6 +344,12 @@ export class JikeClient {
325
344
const json : JikeClientJSON = JSON . parse ( data )
326
345
return this . fromJSON ( json )
327
346
}
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
+ }
328
353
}
329
354
330
355
export interface JikeClientJSON extends Omit < ApiConfigResolved , 'beforeRetry' > {
0 commit comments