const { WhasAppClient } = require('./whatsapp-client.js'); const express = require('express'); const axios = require('axios') const map = new Map(); const duplicateMap = new Map(); const app = express(); app.use(express.json()); app.get("/api/qr/:be", (req, res) => { try { console.log(`params:${req.params.be}`); const be = req.params.be; const waMap = map.get(be); if (waMap != 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); const wa = new WhasAppClient(be, res); wa.client.on('ready', () => { console.log(`be:${wa.clientId}:Client is ready!`); map.set(wa.clientId, wa.client); if (!wa.isGenerateQr) { res.json({ status: '00', be: wa.clientId }); } }); } catch (error) { console.log(`error:${error}`); } }); app.post("/api/send/:be", async (req, res) => { try { console.log(`params:${req.params.be}, body:${JSON.stringify(req.body)}`); const be = req.params.be; 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 media = req.body.message.media; const data = req.body.message.data; const caption = req.body.message.caption; let messageMedia = await new MessageMedia(media, data, caption) await client.sendMessage(`${to}@c.us`, messageMedia,); res.json({ status: '00', be: be }); return; } await client.sendMessage(`${to}@c.us`, message); res.json({ status: '00', be: be }); } catch (error) { console.log(`error:${error}`); } }); const https = require('https'); const fs = require('fs'); 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}`); });