const { default: makeWASocket, useMultiFileAuthState, DisconnectReason, fetchLatestBaileysVersion } = require('@whiskeysockets/baileys'); const express = require('express'); const { Boom } = require('@hapi/boom'); const qrcode = require('qrcode'); const path = require('path'); const fs = require('fs'); const app = express(); app.use(express.json()); app.use(express.static('public')); let sock; let qrData = null; let isConnected = false; const initBaileys = async () => { const { version } = await fetchLatestBaileysVersion(); const { state, saveCreds } = await useMultiFileAuthState('auth'); sock = makeWASocket({ version, auth: state, printQRInTerminal: false }); sock.ev.on('connection.update', async (update) => { const { connection, lastDisconnect, qr } = update; if (qr) { qrData = await qrcode.toDataURL(qr); isConnected = false; } if (connection === 'close') { const shouldReconnect = lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut; if (shouldReconnect) { console.log('🔁 Reconnexion...'); initBaileys(); } else { console.log('❌ Déconnecté.'); } } else if (connection === 'open') { console.log('✅ Connecté à WhatsApp'); isConnected = true; } }); sock.ev.on('creds.update', saveCreds); }; initBaileys(); app.get('/login', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'login.html')); }); app.get('/api/qrcode', (req, res) => { res.json({ qr: qrData, connected: isConnected }); }); app.post('/sendText', async (req, res) => { const { phone, message } = req.body; if (!sock || !isConnected) return res.status(400).json({ error: 'Non connecté' }); try { await sock.sendMessage(`${phone}@s.whatsapp.net`, { text: message }); res.json({ success: true }); } catch (e) { res.status(500).json({ error: e.message }); } }); app.post('/sendButtons', async (req, res) => { const { phone, message, buttons } = req.body; if (!sock || !isConnected) return res.status(400).json({ error: 'Non connecté' }); try { const btnMsg = { text: 'Choisis une option :', buttons: [ { buttonId: 'produits', buttonText: { displayText: 'Voir produits' }, type: 1 }, { buttonId: 'support', buttonText: { displayText: 'Contacter support' }, type: 1 } ], headerType: 1 }; console.log(btnMsg); await sock.sendMessage(`${phone}@s.whatsapp.net`, btnMsg); res.json({ success: true }); } catch (e) { res.status(500).json({ error: e.message }); } }); app.listen(3001, () => console.log('🚀 Serveur Baileys démarré sur http://localhost:3001'));