mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
Waiting for chats & contacts is hella unreliable, so I've put them as events 1. receive chats via the `chats-received` event. If new chats are found, the flag for that is sent as well 2. receive contacts via the `contacts-received` event 3. When WA sends older messages, the `chats-update` or `chat-update` event is triggered 4. Baileys keeps track of all the changed conversations between connects Connects almost always take less than 10 seconds!
74 lines
2.7 KiB
TypeScript
74 lines
2.7 KiB
TypeScript
import { WAConnection, MessageOptions, MessageType, unixTimestampSeconds, toNumber, GET_MESSAGE_ID, waMessageKey } from '../WAConnection/WAConnection'
|
|
import * as assert from 'assert'
|
|
import {promises as fs} from 'fs'
|
|
|
|
require ('dotenv').config () // dotenv to load test jid
|
|
export const testJid = process.env.TEST_JID || '1234@s.whatsapp.net' // set TEST_JID=xyz@s.whatsapp.net in a .env file in the root directory
|
|
|
|
export const makeConnection = () => {
|
|
const conn = new WAConnection()
|
|
conn.connectOptions.maxIdleTimeMs = 15_000
|
|
conn.logger.level = 'debug'
|
|
|
|
let evCounts = {}
|
|
|
|
conn.on ('close', ({ isReconnecting }) => {
|
|
!isReconnecting && console.log ('Events registered: ', evCounts)
|
|
})
|
|
|
|
const onM = conn.on
|
|
conn.on = (...args: any[]) => {
|
|
evCounts[args[0]] = (evCounts[args[0]] || 0) + 1
|
|
return onM.apply (conn, args)
|
|
}
|
|
const offM = conn.off
|
|
conn.off = (...args: any[]) => {
|
|
evCounts[args[0]] = (evCounts[args[0]] || 0) - 1
|
|
if (evCounts[args[0]] <= 0) delete evCounts[args[0]]
|
|
return offM.apply (conn, args)
|
|
}
|
|
return conn
|
|
}
|
|
|
|
export async function sendAndRetreiveMessage(conn: WAConnection, content, type: MessageType, options: MessageOptions = {}) {
|
|
const response = await conn.sendMessage(testJid, content, type, options)
|
|
const {messages} = await conn.loadMessages(testJid, 10)
|
|
const message = messages.find (m => m.key.id === response.key.id)
|
|
assert.ok(message)
|
|
|
|
const chat = conn.chats.get(testJid)
|
|
|
|
assert.ok (chat.messages.get(GET_MESSAGE_ID(message.key)))
|
|
assert.ok (chat.t >= (unixTimestampSeconds()-5) )
|
|
return message
|
|
}
|
|
export const WAConnectionTest = (name: string, func: (conn: WAConnection) => void) => (
|
|
describe(name, () => {
|
|
const conn = new WAConnection()
|
|
conn.connectOptions.maxIdleTimeMs = 30_000
|
|
conn.logger.level = 'debug'
|
|
|
|
before(async () => {
|
|
const file = './auth_info.json'
|
|
await conn.loadAuthInfo(file).connect()
|
|
await fs.writeFile(file, JSON.stringify(conn.base64EncodedAuthInfo(), null, '\t'))
|
|
})
|
|
after(() => conn.close())
|
|
|
|
func(conn)
|
|
})
|
|
)
|
|
export const assertChatDBIntegrity = (conn: WAConnection) => {
|
|
conn.chats.all ().forEach (chat => (
|
|
assert.deepEqual (
|
|
[...chat.messages.all()].sort ((m1, m2) => waMessageKey.compare(waMessageKey.key(m1), waMessageKey.key(m2))),
|
|
chat.messages.all()
|
|
)
|
|
))
|
|
conn.chats.all ().forEach (chat => (
|
|
assert.deepEqual (
|
|
chat.messages.all().filter (m => chat.messages.all().filter(m1 => m1.key.id === m.key.id).length > 1),
|
|
[]
|
|
)
|
|
))
|
|
} |