mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
refactor: create generic "bindWaitForEvent" for baileys event emitter
This commit is contained in:
@@ -5,7 +5,7 @@ import { platform, release } from 'os'
|
|||||||
import { Logger } from 'pino'
|
import { Logger } from 'pino'
|
||||||
import { proto } from '../../WAProto'
|
import { proto } from '../../WAProto'
|
||||||
import { version as baileysVersion } from '../Defaults/baileys-version.json'
|
import { version as baileysVersion } from '../Defaults/baileys-version.json'
|
||||||
import { CommonBaileysEventEmitter, ConnectionState, DisconnectReason, WACallUpdateType, WAVersion } from '../Types'
|
import { BaileysEventMap, CommonBaileysEventEmitter, DisconnectReason, WACallUpdateType, WAVersion } from '../Types'
|
||||||
import { BinaryNode, getAllBinaryNodeChildren } from '../WABinary'
|
import { BinaryNode, getAllBinaryNodeChildren } from '../WABinary'
|
||||||
|
|
||||||
const PLATFORM_MAP = {
|
const PLATFORM_MAP = {
|
||||||
@@ -184,30 +184,42 @@ export async function promiseTimeout<T>(ms: number, promise: (resolve: (v?: T)=>
|
|||||||
// generate a random ID to attach to a message
|
// generate a random ID to attach to a message
|
||||||
export const generateMessageID = () => 'BAE5' + randomBytes(6).toString('hex').toUpperCase()
|
export const generateMessageID = () => 'BAE5' + randomBytes(6).toString('hex').toUpperCase()
|
||||||
|
|
||||||
export const bindWaitForConnectionUpdate = (ev: CommonBaileysEventEmitter<any>) => (
|
export function bindWaitForEvent<T extends keyof BaileysEventMap<any>>(ev: CommonBaileysEventEmitter<any>, event: T) {
|
||||||
async(check: (u: Partial<ConnectionState>) => boolean, timeoutMs?: number) => {
|
return async(check: (u: BaileysEventMap<any>[T]) => boolean, timeoutMs?: number) => {
|
||||||
let listener: (item: Partial<ConnectionState>) => void
|
let listener: (item: BaileysEventMap<any>[T]) => void
|
||||||
|
let closeListener: any
|
||||||
await (
|
await (
|
||||||
promiseTimeout(
|
promiseTimeout(
|
||||||
timeoutMs,
|
timeoutMs,
|
||||||
(resolve, reject) => {
|
(resolve, reject) => {
|
||||||
listener = (update) => {
|
closeListener = ({ connection, lastDisconnect }) => {
|
||||||
if(check(update)) {
|
if(connection === 'close') {
|
||||||
resolve()
|
reject(
|
||||||
} else if(update.connection === 'close') {
|
lastDisconnect?.error
|
||||||
reject(update.lastDisconnect?.error || new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed }))
|
|| new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed })
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ev.on('connection.update', listener)
|
ev.on('connection.update', closeListener)
|
||||||
|
listener = (update) => {
|
||||||
|
if(check(update)) {
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ev.on(event, listener)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.finally(() => (
|
.finally(() => {
|
||||||
ev.off('connection.update', listener)
|
ev.off(event, listener)
|
||||||
))
|
ev.off('connection.update', closeListener)
|
||||||
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
|
|
||||||
|
export const bindWaitForConnectionUpdate = (ev: CommonBaileysEventEmitter<any>) => bindWaitForEvent(ev, 'connection.update')
|
||||||
|
|
||||||
export const printQRIfNecessaryListener = (ev: CommonBaileysEventEmitter<any>, logger: Logger) => {
|
export const printQRIfNecessaryListener = (ev: CommonBaileysEventEmitter<any>, logger: Logger) => {
|
||||||
ev.on('connection.update', async({ qr }) => {
|
ev.on('connection.update', async({ qr }) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user