11import { Boom } from '@hapi/boom'
22import { jest } from '@jest/globals'
33import { readFileSync } from 'node:fs'
4+ import { Agent } from 'node:https'
45import P from 'pino'
56import makeWASocket , {
67 DisconnectReason ,
78 downloadContentFromMessage ,
89 downloadMediaMessage ,
910 jidNormalizedUser ,
11+ makeCacheableSignalKeyStore ,
1012 proto ,
1113 toBuffer ,
1214 useMultiFileAuthState ,
@@ -22,47 +24,64 @@ describe('E2E Tests', () => {
2224 let groupJid : string | undefined
2325
2426 beforeAll ( async ( ) => {
25- const { state , saveCreds } = await useMultiFileAuthState ( 'baileys_auth_info' )
26- const logger = P ( { level : 'silent' } )
27+ const logger = P ( { level : 'debug' } )
28+ const agent = new Agent ( { rejectUnauthorized : false } )
2729
28- sock = makeWASocket ( {
29- auth : state ,
30- logger
31- } )
30+ const connectSocket = async ( ) : Promise < void > => {
31+ const { state, saveCreds } = await useMultiFileAuthState ( 'baileys_auth_info' )
3232
33- sock . ev . on ( 'creds.update' , saveCreds )
34-
35- await new Promise < void > ( ( resolve , reject ) => {
36- sock . ev . on ( 'connection.update' , update => {
37- const { connection, lastDisconnect } = update
38- if ( connection === 'open' ) {
39- meJid = jidNormalizedUser ( sock . user ?. id )
40- meLid = sock . user ?. lid
41-
42- sock
43- . groupFetchAllParticipating ( )
44- . then ( groups => {
45- const group = Object . values ( groups ) . find ( g => g . subject === 'Baileys Group Test' )
46- if ( group ) {
47- groupJid = group . id
48- console . log ( `Found test group "${ group . subject } " with JID: ${ groupJid } ` )
49- }
50-
51- resolve ( )
52- } )
53- . catch ( reject )
54- } else if ( connection === 'close' ) {
55- const reason = ( lastDisconnect ?. error as Boom ) ?. output ?. statusCode
56- if ( reason === DisconnectReason . loggedOut ) {
57- console . error ( 'Logged out, please delete the baileys_auth_info_e2e folder and re-run the test' )
58- }
33+ if ( process . env . ADV_SECRET_KEY ) {
34+ state . creds . advSecretKey = process . env . ADV_SECRET_KEY ?? 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
35+ }
36+
37+ sock = makeWASocket ( {
38+ auth : {
39+ creds : state . creds ,
40+ keys : makeCacheableSignalKeyStore ( state . keys , logger )
41+ } ,
42+ waWebSocketUrl : process . env . SOCKET_URL ?? 'wss://127.0.0.1:8080/ws/chat' ,
43+ logger,
44+ agent,
45+ fetchAgent : agent
46+ } )
5947
60- if ( lastDisconnect ?. error ) {
61- reject ( new Error ( `Connection closed: ${ DisconnectReason [ reason ] || 'unknown' } ` ) )
48+ sock . ev . on ( 'creds.update' , saveCreds )
49+
50+ await new Promise < void > ( ( resolve , reject ) => {
51+ sock . ev . on ( 'connection.update' , update => {
52+ const { connection, lastDisconnect } = update
53+ if ( connection === 'open' ) {
54+ meJid = jidNormalizedUser ( sock . user ?. id )
55+ meLid = sock . user ?. lid
56+
57+ sock
58+ . groupFetchAllParticipating ( )
59+ . then ( groups => {
60+ const group = Object . values ( groups ) . find ( g => g . subject === 'Baileys Group Test' )
61+ if ( group ) {
62+ groupJid = group . id
63+ console . log ( `Found test group "${ group . subject } " with JID: ${ groupJid } ` )
64+ }
65+
66+ resolve ( )
67+ } )
68+ . catch ( reject )
69+ } else if ( connection === 'close' ) {
70+ const reason = ( lastDisconnect ?. error as Boom ) ?. output ?. statusCode
71+ if ( reason === DisconnectReason . loggedOut ) {
72+ reject ( new Error ( 'Logged out, please delete the baileys_auth_info folder and re-run the test' ) )
73+ return
74+ }
75+
76+ // Reconnect on non-logout disconnects (e.g. after pairing)
77+ console . log ( `Connection closed (${ DisconnectReason [ reason ] || reason } ), reconnecting...` )
78+ connectSocket ( ) . then ( resolve , reject )
6279 }
63- }
80+ } )
6481 } )
65- } )
82+ }
83+
84+ await connectSocket ( )
6685 } )
6786
6887 afterAll ( async ( ) => {
0 commit comments