Skip to content

Commit af4a758

Browse files
committed
feat: add event listener
1 parent 9bf4a63 commit af4a758

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/client/client.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,17 @@ import type { ApiConfig, ApiConfigResolved } from '../request'
1818

1919
type FollowingUpdatesMoreKey = PersonalUpdate.FollowingUpdatesResponseMoreKey
2020

21+
interface Events {
22+
onRenewToken: (accessToken: string, refreshToken: string) => void
23+
}
24+
2125
export 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

330355
export interface JikeClientJSON extends Omit<ApiConfigResolved, 'beforeRetry'> {

0 commit comments

Comments
 (0)