1
1
import { HTTPError } from 'ky'
2
+ import { EventEmitter } from 'eventemitter3'
2
3
import { resolveApiConfig } from '../request'
3
4
import { ApiClient } from '../api-client'
4
5
import { objectPick } from '../utils/objects'
@@ -18,17 +19,14 @@ import type { ApiConfig, ApiConfigResolved } from '../request'
18
19
19
20
type FollowingUpdatesMoreKey = PersonalUpdate . FollowingUpdatesResponseMoreKey
20
21
21
- interface Events {
22
- onRenewToken : ( accessToken : string , refreshToken : string ) => void
22
+ interface EventMap {
23
+ renewToken : ( ) => void
23
24
}
24
25
25
- export class JikeClient {
26
+ export class JikeClient extends EventEmitter < EventMap > {
26
27
#refreshToken: string
27
28
#config: ApiConfigResolved
28
29
#client! : Api
29
- #listener: {
30
- [ K in keyof Events ] ?: Set < Events [ K ] >
31
- } = { }
32
30
33
31
get accessToken ( ) {
34
32
return this . #config. accessToken
@@ -55,6 +53,8 @@ export class JikeClient {
55
53
refreshToken = '' ,
56
54
...config
57
55
} : ApiConfig & { refreshToken ?: string } ) {
56
+ super ( )
57
+
58
58
this . #refreshToken = refreshToken
59
59
this . #config = resolveApiConfig ( config )
60
60
this . createClient ( )
@@ -274,17 +274,7 @@ export class JikeClient {
274
274
result . data [ `x-${ this . #config. endpointId } -refresh-token` ]
275
275
this . accessToken = result . data [ `x-${ this . #config. endpointId } -access-token` ]
276
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
- }
277
+ this . emit ( 'renewToken' )
288
278
}
289
279
290
280
/**
@@ -344,12 +334,6 @@ export class JikeClient {
344
334
const json : JikeClientJSON = JSON . parse ( data )
345
335
return this . fromJSON ( json )
346
336
}
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
- }
353
337
}
354
338
355
339
export interface JikeClientJSON extends Omit < ApiConfigResolved , 'beforeRetry' > {
0 commit comments