-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsubscribers.ts
38 lines (33 loc) · 1.08 KB
/
subscribers.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { Chat, ChatDescription } from './chat'
import { ChatWebhookMessageRequest, ChatWebhookTypingRequest } from './webhook'
export type MessageFilter = {
chat?: Chat | ChatDescription
}
export interface ChatEvents {
'message': {
cb: (chat: Chat, messageRequest: ChatWebhookMessageRequest) => void,
filter: MessageFilter
};
'typing': {
cb: (chat: Chat, typingRequest: ChatWebhookTypingRequest) => void,
filter: undefined
}
}
export const filtersCheck: {
[event in keyof ChatEvents]: (args: Parameters<ChatEvents[event]['cb']>, filter: ChatEvents[event]['filter']) => boolean
} = {
message: ([chat], filter) => {
if (!filter) return true
let result = true
const { chat: chatDescription } = filter
if (chatDescription) {
const { scopeId } = chatDescription
result &&= (scopeId === chat.scopeId)
}
return result
},
typing: () => true
}
export type Subscribers = {
[event in keyof ChatEvents]?: Map<ChatEvents[event]['cb'], ChatEvents[event]['filter']>
}