|
1 | | -import { DisconnectReason } from "@whiskeysockets/baileys"; |
| 1 | +import QRCode from 'qrcode'; |
| 2 | +import { DisconnectReason } from '@whiskeysockets/baileys'; |
2 | 3 | import { Boom } from '@hapi/boom'; |
3 | | -import { EventHandlerType, EventMapKey } from "../Types/Event"; |
4 | | -import { events, sessions } from "../Stores"; |
5 | | -import { createSession, deleteSession } from "../Services"; |
6 | | -import { SessionStatusType } from "../Types/Session"; |
| 4 | +import { EventHandlerType, EventMapKey } from '../Types/Event'; |
| 5 | +import { events, sessions } from '../Stores'; |
| 6 | +import { createSession, deleteSession } from '../Services/sessions'; |
| 7 | +import { SessionStatusType } from '../Types/Session'; |
7 | 8 |
|
8 | 9 | export const handleSocketEvents = ({ sessionId, eventMap, sock, saveCreds }: EventHandlerType) => { |
9 | | - Object.entries(eventMap).forEach(([key, value]) => { |
10 | | - events.get(key as EventMapKey)?.(value, sessionId, sock); |
11 | | - eventHandlers[key]?.({ eventValue: value, sessionId, sock, saveCreds }); |
| 10 | + Object.entries(eventMap).forEach(([key, data]) => { |
| 11 | + events.get(key as EventMapKey)?.(data, sessionId, sock); |
| 12 | + eventHandlers[key]?.({ eventValue: data, sessionId, sock, saveCreds }); |
12 | 13 | }); |
13 | 14 | }; |
14 | 15 |
|
15 | | - |
16 | 16 | const handleConnectionUpdate = ({ eventValue, sessionId }): void => { |
17 | 17 | const { connection, lastDisconnect, qr } = eventValue; |
18 | | - const sessionData = sessions.get(sessionId); |
| 18 | + const session = sessions.get(sessionId); |
19 | 19 |
|
20 | 20 | if (qr) { |
21 | | - events.get("qr")?.(qr, sessionId); |
22 | | - } else if(connection) { |
| 21 | + QRCode.toDataURL(qr).then((qrUrl: String) => { |
| 22 | + events.get('qr')?.({ image: qrUrl, qr }, sessionId); |
| 23 | + }); |
| 24 | + } else if (connection) { |
23 | 25 | updateSessionStatus(sessionId, connection as SessionStatusType); |
| 26 | + |
| 27 | + const isLoggedOut = (lastDisconnect?.error as Boom)?.output?.statusCode === DisconnectReason.loggedOut; |
24 | 28 | if (connection === 'close') { |
25 | | - const shouldReconnect = (lastDisconnect?.error as Boom)?.output?.statusCode !== DisconnectReason.loggedOut; |
26 | | - if (shouldReconnect && sessionData) { |
27 | | - const args = { sessionId, connectionType: sessionData.connectionType, options: sessionData.options } |
28 | | - createSession(args) |
| 29 | + if (!isLoggedOut && session) { |
| 30 | + createSession(sessionId, session.connectionType, session.meta.socketConfig, session.meta.options); |
29 | 31 | } else { |
30 | 32 | deleteSession(sessionId); |
31 | 33 | events.get('disconnected')?.({}, sessionId); |
32 | 34 | } |
33 | | - } else if(connection === 'connecting') { |
| 35 | + } else if (connection === 'connecting') { |
34 | 36 | events.get('connecting')?.({}, sessionId); |
35 | | - } |
36 | | - else if (connection === 'open') { |
| 37 | + } else if (connection === 'open') { |
37 | 38 | events.get('connected')?.({}, sessionId); |
38 | 39 | } |
39 | 40 | } |
40 | | -} |
| 41 | +}; |
41 | 42 |
|
42 | 43 | const handleCredsUpdate = ({ saveCreds }) => { |
43 | 44 | saveCreds(); |
44 | | -} |
| 45 | +}; |
45 | 46 |
|
46 | 47 | const eventHandlers: { [key: string]: Function } = { |
47 | | - "creds.update": handleCredsUpdate, |
48 | | - "connection.update": handleConnectionUpdate, |
| 48 | + 'creds.update': handleCredsUpdate, |
| 49 | + 'connection.update': handleConnectionUpdate, |
49 | 50 | }; |
50 | 51 |
|
51 | 52 | const updateSessionStatus = (sessionId: string, status: SessionStatusType): void => { |
52 | 53 | const session = sessions.get(sessionId); |
53 | 54 | if (session) { |
54 | 55 | session.status = status; |
55 | 56 | } |
56 | | -} |
| 57 | +}; |
0 commit comments