const { WhasAppClient, map, duplicateMap } = require('./whatsapp-client.js'); const { MessageMedia } = require('whatsapp-web.js'); const express = require('express'); const axios = require('axios'); const https = require('https'); const fs = require('fs'); function createWa(be, res) { new WhasAppClient(be, res); } fs.readdir('.wwebjs_auth', (err, files) => { if (files != null) { files.forEach(file => { console.log(`Read session: ${file}`); const be = file.split('-')[1]; createWa(be); }); } }); const app = express(); app.use(express.json({ limit: '50mb' })); app.get("/api/qr/:be", (req, res) => { console.log(`params:${req.params.be}`); const be = req.params.be; try { const client = map.get(be); if (client != null) { res.json({ status: '00', be: be }); return; } const duplicate = duplicateMap.get(be); if (duplicate != null) { res.json({ status: '02', be: be, description: 'Duplicate request' }); return; } duplicateMap.set(be, be); createWa(be, res); } catch (error) { console.log(`error:${error}`); res.json({ status: '99', be: be, description: 'General error' }); } }); app.post("/api/send/:be", async (req, res) => { console.log(`params:${req.params.be}, body:${JSON.stringify(req.body)}`); const be = req.params.be; try { const client = map.get(be); if (client == null) { res.json({ status: '01', be: be, description: 'Unauthorize access' }); return; } const to = req.body.to; const message = req.body.message; if (Object.hasOwn(message, 'media')) { const fileName = req.body.message.fileName; const media = req.body.message.media; const data = req.body.message.data; const caption = req.body.message.caption; let messageMedia = new MessageMedia(media, data, fileName); to.forEach(it => { client.sendMessage(`${it}@c.us`, messageMedia, { caption: caption }); }); res.json({ status: '00', be: be }); return; } to.forEach(it => { client.sendMessage(`${it}@c.us`, message); }); res.json({ status: '00', be: be }); } catch (error) { console.log(`error:${error}`); res.json({ status: '99', be: be, description: 'General error' }); } }); const port = process.env.PORT || 9009; const options = { key: fs.readFileSync('./server.key'), cert: fs.readFileSync('./server.crt'), rejectUnauthorized: false, requestCert: true, agent: false }; https.createServer(options, app).listen(port, () => { console.log(`Server running on port ${port}`); });