Untitled

 avatar
unknown
javascript
3 years ago
33 kB
10
Indexable
var rimraf = require("rimraf");
const https = require('https');
const qrcode = require('qrcode-terminal');
const fetch = require('node-fetch');
var QRCode = require('qrcode');
var Jimp = require('jimp');
const { pad, toCRC16, dataQris } = require('../../src/Qris.js');
var fs = require('fs'),
request = require('request');
const {
    Client,
    LegacySessionAuth,
    Location,
    List,
    Buttons
} = require('./../../index');
let sessions = {};


const sleep = (milliseconds) => {
    const date = Date.now();
    let currentDate = null;
    do {
      currentDate = Date.now();
    } while (currentDate - date < milliseconds);
  };

  

function formatRupiah(angka, prefix){
    var number_string = angka.replace(/[^,\d]/g, '').toString(),
    split   		= number_string.split(','),
    sisa     		= split[0].length % 3,
    rupiah     		= split[0].substr(0, sisa),
    ribuan     		= split[0].substr(sisa).match(/\d{3}/gi);

    // tambahkan titik jika yang di input sudah menjadi angka ribuan
    if(ribuan){
        separator = sisa ? '.' : '';
        rupiah += separator + ribuan.join('.');
    }

    rupiah = split[1] != undefined ? rupiah + ',' + split[1] : rupiah;
    return prefix == undefined ? rupiah : (rupiah ? 'Rp. ' + rupiah : '');
}
function formatNumber(num) {
    return (num.toFixed(0).replace('.', ',').replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.'))
}

function generateQris(mid, merchantName, nominal, fileName){
    let tax = '';
    //isi data qris
    let qris = "00020101021126570011ID.DANA.WWW011893600915305112759002090511275900303UMI51440014ID.CO.QRIS.WWW0215ID"+mid+"0303UMI5204561153033605802ID5913"+merchantName+"6013Kab. Magelang6105564846304C7D1";
    //isi nominal
    // let nominal = "5000";
    //pajak (opsional)
    //jenis pajak
    let taxtype = 'p' // r/p, r = rupiah, p = persen
    //nominal pajak
    let fee = "10" //contoh persen 10%
    
    let qris2 = qris.slice(0, -4);
    let replaceQris = qris2.replace("010211", "010212");
    let pecahQris = replaceQris.split("5802ID");
    let uang = "54" + pad(nominal.length) + nominal;
    tax = (taxtype == 'p') ? "55020357" + pad(fee.length) + fee : "55020256" + pad(fee.length) + fee;
    uang += (tax.length == 0) ? "5802ID" : tax + "5802ID";
    
    let output = pecahQris[0].trim() + uang + pecahQris[1].trim();
    output += toCRC16(output);
    console.log(output) //output
    // let fileName = Math.floor(Date.now()/1000);
    
    //make output file image
    QRCode.toFile('tmp.png', output, { margin: 2, scale: 10 }, async function (err, url) {
        
        let data = dataQris(qris);
        var text = data.merchantName;
        var qr = await Jimp.read('tmp.png');
        Jimp.read('assets/template.png', (err, image) => {
            if (err) console.log(err);
            var w = image.bitmap.width
            var h = image.bitmap.height
            Jimp.loadFont((text.length > 18) ? 'assets/font/BebasNeueSedang/BebasNeue-Regular.ttf.fnt' : 'assets/font/BebasNeue/BebasNeue-Regular.ttf.fnt').then(fonttitle => {
                Jimp.loadFont((text.length > 28) ? 'assets/font/RobotoSedang/Roboto-Regular.ttf.fnt' : 'assets/font/RobotoBesar/Roboto-Regular.ttf.fnt').then(fontnmid => {
                    Jimp.loadFont('assets/font/RobotoKecil/Roboto-Regular.ttf.fnt').then(fontcetak => {
                        image
                            .composite(qr, w / 4 - 30, h / 4 + 68)
                            .print(fonttitle, w / 5 - 30, h / 5 + 68, { text: text, alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER, alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE, }, w / 1.5, (text.length > 28) ? -180 : -210)
                            .print(fontnmid, w / 5 - 30, h / 5 + 68, { text: `NMID : ${data.nmid}`, alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER, alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE, }, w / 1.5, (text.length > 28) ? +20 : -45)
                            .print(fontnmid, w / 5 - 30, h / 5 + 68, { text: data.id, alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER, alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE, }, w / 1.5, (text.length > 28) ? +110 : +90)
                            .print(fontcetak, w / 20, 1205, `Dicetak oleh: Bank Rakyat Indonesia`)
                            .write(`output/qr.jpg`);
                        fs.unlinkSync('tmp.png')
                    })
                })
            });
        });
    });
    
}
var download = function(uri, filename, callback) {
    try {
        var acceptExt = ["png", "jpg", "jpeg", "pdf", "mp3", "mp4", "docx", "mp4"];
        var extension = uri.split('.').pop();
        console.log(extension);
        var extCheck = acceptExt.includes(extension);
        if (extCheck) {
            request.head(uri, function(err, res, body) {
                request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
            });
        } else {
            throw new Error("media not approve");
        }

        // let file = "https://admin.sliovg.com/file/video/Video%20Greeting%20Template/Video-Haji-Umrah-2.mp4";

        // let mimetype;
        // let filename;
        // const attachment = await axios.get(file, {
        // responseType: 'arraybuffer'
        // }).then(response => {
        // mimetype = response.headers['content-type'];
        // filename = file.split("/").pop();
        // return response.data.toString('base64');
        // });

        // if( attachment ){
        // const media = new MessageMedia(mimetype, attachment, filename);
        // }

    } catch (err) {
        res.status(400).json({
            'status': 'ERROR',
            'messages': err.message
        })
    }
    
};

function sendapi(data, path) {
    console.log("sendapi "+data+" path: "+path);
    fetch('http://209.97.173.148' + path, {
        method: 'post',
        body: data,
        headers: {
            'Content-Type': 'application/json'
        },
    }).then(res => res.text()).then(text => console.log(text));
}

function setclient(number) {
    let sessionCfg;
    const SESSION_FILE_PATH = __dirname + '/../../sessions/' + number + '.json';
    if (fs.existsSync(SESSION_FILE_PATH)) {
        sessionCfg = require(SESSION_FILE_PATH);
    }
    sessions[number] = new Client({
        puppeteer: {
            // executablePath: '/usr/bin/google-chrome-stable',
            headless: true,
            qrTimeoutMs: 0,
            userDataDir: __dirname + '/../../sessions/' + number,
            args: [
            '--no-sandbox',
            '--disable-cache',
            '--disable-application-cache',
            '--media-cache-size=0',
            '--disk-cache-size=0',
            '--disable-setuid-sandbox',
            '--disable-dev-shm-usage',
            '--disable-accelerated-2d-canvas',
            '--no-first-run',
            '--no-zygote',
            '--disable-gpu'
            ]
        },
        // session: sessionCfg
        authStrategy: new LegacySessionAuth({
            session: sessionCfg
        })
    });
    sessions[number].initialize();
    // console.log("session after initialize "+JSON.stringify(sessions));
    let qr_reload = 1;
    sessions[number].on('qr', qr => {
        console.log("qr_reload "+qr_reload);
        if (qr_reload > 10) {
            const data = JSON.stringify({
                apikey: 'we4567talk',
                client: number
            });
            sendapi(data, '/apiv2/qr_timeout');
            sessions[number].destroy();
            rimraf(__dirname + '/../../sessions/' + number, function () { console.log(number + " removed"); });
            // process.exit();
        }else{
            qrcode.generate(qr, {
                small: true
            });
            const data = JSON.stringify({
                apikey: 'we4567talk',
                qr: qr,
                client: number
            });
            sendapi(data, '/apiv2/get_qr');
        }
        qr_reload++;
    });
    // console.log("session after qr "+JSON.stringify(sessions));



    sessions[number].on('ready', async () => {
        console.log(number + ' is ready!');
        const infoClient = sessions[number].info;
        const infoBusiness = await sessions[number].getContactById(infoClient.me._serialized);
        const data = JSON.stringify({
            apikey: 'we4567talk',
            client: number,
            client_info: infoClient,
            is_business: infoBusiness.isBusiness ? 1 : 0
        });
        // console.log(data)
        sendapi(data, '/apiv2/update_config');
    });
    // console.log("session after ready "+JSON.stringify(sessions));
    sessions[number].on('disconnected', (reason) => {
        console.log(reason);
        fs.unlinkSync(SESSION_FILE_PATH);
        sessions[number].destroy();
        rimraf(__dirname + '/../../sessions/' + number, function () { console.log("dir removed"); });
        const data = JSON.stringify({
            apikey: 'we4567talk',
            scan: 'on',
            client: number
        });
        sendapi(data, '/apiv2/update_config_scan');
    });
    sessions[number].on('authenticated', (session) => {
        console.log('AUTHENTICATED', session);
        sessionCfg = session;
        fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), function(err) {
            if (err) {
                console.error(err);
            }
        });

        const data = JSON.stringify({
            apikey: 'we4567talk',
            scan: 'off',
            client: number
        });
        sendapi(data, '/apiv2/update_config_scan');
    });

    // console.log("session after auth "+JSON.stringify(sessions));
    sessions[number].on('message', async msg => {
        console.log("on message");
        var row = null;
        var b64 = null;
        var related_message_id = null;
        // console.log("msg.to "+msg.to);
        console.log("msg "+JSON.stringify(msg));
        const infoBusiness = await sessions[number].getContactById(msg.to).isBusiness;
        if (msg.hasQuotedMsg) {
            const quotedMsg = await msg.getQuotedMessage();
            console.log("quotedMsg "+JSON.stringify(quotedMsg));
            console.log("quotedMsg.id "+JSON.stringify(quotedMsg.id));
            console.log("quotedMsg.id.id "+JSON.stringify(quotedMsg.id.id));
            related_message_id = quotedMsg.id.id
        }
        if (msg.hasMedia) {
            const attachmentData = await msg.downloadMedia();
            b64 = attachmentData.data;
        }
        if (msg.type === 'chat' || msg.type === 'buttons_response' || msg.type === 'list_response') {
            const info = await sessions[number].getContactById(msg.from);
            row = JSON.stringify({
                apikey: 'we4567talk',
                client: number,
                data: {
                    type: 'text',
                    message_id: msg.id.id,
                    related_message_id: related_message_id,
                    from: msg.from.slice(0, -5),
                    to: msg.to.slice(0, -5),
                    author: (msg.author) ? msg.author.slice(0, -5) : null,
                    message: msg.body,
                    customer_name: info.pushname,
                    timestamp: msg.timestamp
                }
            });
        } else if (msg.type === 'image' || msg.type === 'video' || msg.type === 'audio' || msg.type === 'document' || msg.type === 'ptt') {
            row = JSON.stringify({
                apikey: 'we4567talk',
                client: number,
                data: {
                    type: 'media',
                    message_id: msg.id.id,
                    related_message_id: related_message_id,
                    from: msg.from.slice(0, -5),
                    to: msg.to.slice(0, -5),
                    author: (msg.author) ? msg.author.slice(0, -5) : null,
                    b64: b64,
                    message: msg.body,
                    timestamp: msg.timestamp
                }
            });
        } else if (msg.type === 'location') {
            row = JSON.stringify({
                apikey: 'we4567talk',
                client: number,
                data: {
                    type: msg.type,
                    message_id: msg.id.id,
                    related_message_id: related_message_id,
                    from: msg.from.slice(0, -5),
                    to: msg.to.slice(0, -5),
                    author: (msg.author) ? msg.author.slice(0, -5) : null,
                    message: msg.body + ' ' + msg.location.description,
                    timestamp: msg.timestamp,
                    location: {
                        latitude: msg.location.latitude,
                        longitude: msg.location.longitude,
                        description: msg.location.description
                    }
                }
            });
        } else if (msg.type === 'order') {
            let data_order = await msg.getOrder();
            const info = await sessions[number].getContactById(msg.from);
            row = JSON.stringify({
                apikey: 'a4g',
                client: number,
                data: {
                    type: msg.type,
                    message_id: msg.id.id,
                    order_id: msg.orderId,
                    token: msg.token,
                    from: msg.from.slice(0, -5),
                    to: msg.to.slice(0, -5),
                    message: msg.body,
                    customer_name: info.pushname,
                    timestamp: msg.timestamp,
                    data_order: data_order
                }
            });
        }
        if (msg.type == 'order') {
            sendapi(row, '/apiv2/save_order');
        }else{
            sendapi(row, '/apiv2/save_message');
        }
    });

    sessions[number].on('message_ack', (msg, ack) => {
        var row = null;
        var status = "";
        switch (ack) {
            case -1:
                status = "Error";
                break;
            case 0:
                status = "Pending";
                break;
            case 1:
                status = "Sent";
                break;
            case 2:
                status = "Delivered";
                break;
            case 3:
                status = "Read";
                break;
            case 4:
                status = "Played";
                break;
            default:
                status = "Failed";
        }
        row = JSON.stringify({
            apikey: 'we4567talk',
            client: number,
            data: {
                message_id: msg.id.id,
                ack: ack,
                status: status,
                timestamp: msg.timestamp
            }
        });
        // console.log(ack)
        // sendapi(row, '/apiv2/status');
    });

    return sessions[number];
}


exports.kill = (req, res) => {

    // sessions[req.body.client].destroy();
    console.log("sessions "+JSON.stringify(sessions));
    console.log("kill puppeteer");
};

exports.create = async (req, res) => {
    if (!req.body) {
        res.status(400).send({
            message: "Content can not be empty!"
        });
    }
    try {
        var phone_to = false;
        var phone_check = req.body.to.length > 18 ? req.body.to + "@g.us" : req.body.to + "@c.us";
        const status_nomor = await sessions[req.body.client].isRegisteredUser(phone_check);
        console.log(status_nomor, phone_check, req.body.client);
        console.log("req.body untuk send "+JSON.stringify(req.body));
        if (status_nomor) {
            if (req.body.type == 'text') {
                phone_to = true;
                sessions[req.body.client].sendMessage(phone_check, req.body.message);
            } else if (req.body.type == 'media') {
                console.log("MEDIAAAAA");
                phone_to = true;
                let  bodyMessage = req.body.message != ""  ? req.body.message : "";
                if(bodyMessage != ""){
                    let keywordQris = bodyMessage.split(',')[0] == "qr" ? bodyMessage.split(',')[0] : "";
                    let nominal = bodyMessage.split(',')[1] != null || bodyMessage.split(',')[1] != "" || bodyMessage.split(',')[1] != 0 ? bodyMessage.split(',')[1] : 0;
                    
                  
                    
                 
                    if(keywordQris != "" && nominal > 0 ){
                        let merchantName = "";
                        let mid = "839075645763";
                        console.log(">>>>>>>>>>>> nominal "+nominal);
                        console.log(">>>>>>>>>>>> req.body.to "+req.body.to);
                        if(req.body.to == "6285780368656"){
                            merchantName = "Toko Ajib";
                        }else {
                            merchantName = "Boim Cafe";
                        }
    
                        var now = new Date();
                        // Create formatted time
                        var yyyy = now.getFullYear();
                        var mm = now.getMonth() < 9 ? "0" + (now.getMonth() + 1) : (now.getMonth() + 1); // getMonth() is zero-based
                        var dd  = now.getDate() < 10 ? "0" + now.getDate() : now.getDate();
                        var hh = now.getHours() < 10 ? "0" + now.getHours() : now.getHours();
                        var mmm  = now.getMinutes() < 10 ? "0" + now.getMinutes() : now.getMinutes();
                        var ss  = now.getSeconds() < 10 ? "0" + now.getSeconds() : now.getSeconds();
    
                        
                        var fileName = "qr_"+yyyy+mm+dd+"-"+hh+mm+ss;     // file name
                        // generateQris(mid, merchantName, nominal, fileName); 
                        


                        let tax = '';
                        //isi data qris
                        let qris = "00020101021126570011ID.DANA.WWW011893600915305112759002090511275900303UMI51440014ID.CO.QRIS.WWW0215ID"+mid+"0303UMI5204561153033605802ID5913"+merchantName+"6013Kab. Magelang6105564846304C7D1";
                        //isi nominal
                        // let nominal = "5000";
                        //pajak (opsional)
                        //jenis pajak
                        let taxtype = 'p' // r/p, r = rupiah, p = persen
                        //nominal pajak
                        let fee = "10" //contoh persen 10%
                        
                        let qris2 = qris.slice(0, -4);
                        let replaceQris = qris2.replace("010211", "010212");
                        let pecahQris = replaceQris.split("5802ID");
                        let uang = "54" + pad(nominal.length) + nominal;
                        tax = (taxtype == 'p') ? "55020357" + pad(fee.length) + fee : "55020256" + pad(fee.length) + fee;
                        uang += (tax.length == 0) ? "5802ID" : tax + "5802ID";
                        
                        let output = pecahQris[0].trim() + uang + pecahQris[1].trim();
                        output += toCRC16(output);
                        console.log(output) //output
                        // let fileName = Math.floor(Date.now()/1000);
                        
                        //make output file image
                        QRCode.toFile('tmp.png', output, { margin: 2, scale: 10 }, async function (err, url) {
                            
                            let data = dataQris(qris);
                            var text = data.merchantName;
                            var qr = await Jimp.read('tmp.png');
                            Jimp.read('assets/template.png', (err, image) => {
                                if (err) console.log(err);
                                var w = image.bitmap.width
                                var h = image.bitmap.height
                                Jimp.loadFont((text.length > 18) ? 'assets/font/BebasNeueSedang/BebasNeue-Regular.ttf.fnt' : 'assets/font/BebasNeue/BebasNeue-Regular.ttf.fnt').then(fonttitle => {
                                    Jimp.loadFont((text.length > 28) ? 'assets/font/RobotoSedang/Roboto-Regular.ttf.fnt' : 'assets/font/RobotoBesar/Roboto-Regular.ttf.fnt').then(fontnmid => {
                                        Jimp.loadFont('assets/font/RobotoKecil/Roboto-Regular.ttf.fnt').then(fontcetak => {
                                            image
                                                .composite(qr, w / 4 - 30, h / 4 + 68)
                                                .print(fonttitle, w / 5 - 30, h / 5 + 68, { text: text, alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER, alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE, }, w / 1.5, (text.length > 28) ? -180 : -210)
                                                .print(fontnmid, w / 5 - 30, h / 5 + 68, { text: `NMID : ${data.nmid}`, alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER, alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE, }, w / 1.5, (text.length > 28) ? +20 : -45)
                                                .print(fontnmid, w / 5 - 30, h / 5 + 68, { text: data.id, alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER, alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE, }, w / 1.5, (text.length > 28) ? +110 : +90)
                                                .print(fontcetak, w / 20, 1205, `Dicetak oleh: Bank Rakyat Indonesia`)
                                                .write(`output/qr.jpg`);

                                                sleep(5000);  
                                                const {
                                                    MessageMedia
                                                } = require('./../../index');
                                                
                                                const media = MessageMedia.fromFilePath("output/qr.jpg" );
                                                sessions[req.body.client].sendMessage(phone_check, media, {
                                                    caption: "Nominal Rupiah Qris *"+formatRupiah(nominal, 'Rp. ')+"* "
                                                });
                                            fs.unlinkSync('tmp.png')
                                        })
                                    })
                                });
                            });
                        });


                       
                    }
                }

                console.log("req.body.url "+req.body.url);
                if(req.body.url != "qris_message"){
                    var filename = req.body.url.split("/").pop();
                    download(req.body.url, 'assets/' + filename, function(err, results) {
                        if (err) {
                            res.status(400).json({
                                'status': 'ERROR',
                                'messages': "media not approved"
                            })
                            return;
                        }
                        const {
                            MessageMedia
                        } = require('./../../index');
                        
                        const media = MessageMedia.fromFilePath("assets/" + filename);
                        sessions[req.body.client].sendMessage(phone_check, media, {
                            caption: req.body.message
                        });
                    });
                }

            } else if (req.body.type == 'sticker') {
                phone_to = true;
                var filename = req.body.url.split("/").pop();
                download(req.body.url, 'assets/' + filename, function(err, results) {
                    if (err) {
                        res.status(400).json({
                            'status': 'ERROR',
                            'messages': "media not approved"
                        })
                        return;
                    }
                    const {
                        MessageMedia
                    } = require('whatsapp-web.js');
                    const sticker = MessageMedia.fromFilePath("assets/" + filename);
                    sessions[req.body.client].sendMessage(phone_check, sticker, {
                        sendMediaAsSticker: true
                    });
                });
            } else if (req.body.type == 'location') {
                phone_to = true;
                const {
                    Location
                } = require('whatsapp-web.js');
                const loc = new Location(req.body.lat, req.body.lng, req.body.description);
                sessions[req.body.client].sendMessage(phone_check, loc);
            } else if (req.body.type == 'button_1') {
                phone_to = true;


                let button1 = new Buttons(req.body.message, [{
                    body: req.body.button_1
                }], req.body.message_header, req.body.message_footer);

                
                sessions[req.body.client].sendMessage(phone_check, button1);
            } else if (req.body.type == 'button_2') {
                phone_to = true;

                let button2 = new Buttons(req.body.message, [{
                    body: req.body.button_1
                }, {
                    body: req.body.button_2
                }], req.body.message_header, req.body.message_footer);
                sessions[req.body.client].sendMessage(phone_check, button2);
            } else if (req.body.type == 'button_3') {
                phone_to = true;

                let button3 = new Buttons(req.body.message, [{
                    body: req.body.button_1
                }, {
                    body: req.body.button_2
                }, {
                    body: req.body.button_3
                }], req.body.message_header, req.body.message_footer);
                sessions[req.body.client].sendMessage(phone_check, button3);
            } else if (req.body.type == 'button_1_media') {
                phone_to = true;
                var filename = req.body.url.split("/").pop();
                download(req.body.url, 'assets/' + filename, function(err, results) {
                    if (err) {
                        res.status(400).json({
                            'status': 'ERROR',
                            'messages': "media not approved"
                        })
                        return;
                    }
                    const {
                        MessageMedia
                    } = require('./../../index');
                    let media = MessageMedia.fromFilePath("assets/" + filename);

                    let button1_media = new Buttons(media, [{
                        body: req.body.button_1
                    }], req.body.message_header, req.body.message_footer);
                    sessions[req.body.client].sendMessage(phone_check, button1_media,{'caption':req.body.message});
                });
            } else if (req.body.type == 'list') {
                phone_to = true;

                let sections2 = [{title: req.body.menu_title,rows:JSON.parse(req.body.button_list)}];
                console.log("sections2 "+JSON.stringify(sections2));
                let listt = new List(
                    req.body.message,req.body.button_name,
                    sections2,
                    req.body.message_header,
                    req.body.message_footer
                    );
                    console.log("listt "+JSON.stringify(listt));
                sessions[req.body.client].sendMessage(phone_check, listt);
            }
            sessions[req.body.client].on('message_create', async msg => {
                if (phone_to) {
                    if (req.body.to == msg.to.slice(0, -5)) {
                        res.status(200).json({
                            'status': 'ok',
                            'message_id': msg.id.id,
                            'from': msg.from.slice(0, -5),
                            'to': msg.to.slice(0, -5)
                        })
                        phone_to = false;
                    }
                }
            });
        }else{
            res.status(400).json({
                'status': 'ERROR',
                'messages': 'phone number is invalid'
            })
        }
    } catch (err) {
        res.status(400).json({
            'status': 'ERROR',
            'messages': err.message
        })
    }
};
exports.chatindex = (req, res) => {
    console.log("chatindex");
    res.writeHead(302, {
        'Location': 'https://apgi4gw.com'
    });
    res.end();
};
exports.endSession = (req, res) => {
    if (!req.body) {
        res.status(400).send({
            message: "Content can not be empty!"
        });
    }
    try {
        if (req.body.apikey == 'we1232123talk') {
            sessions[req.body.client].destroy();
            fs.unlinkSync(__dirname + '/../../sessions/' + req.body.client + '.json');
            rimraf(__dirname + '/../../sessions/' + req.body.client, function() {
                console.log("dir removed");
            });
            res.status(200).json({
                'status': 'OK',
            })
        } else {
            res.status(400).json({
                'status': 'ERROR',
                'messages': 'Invalid apikey'
            })
        }
    } catch (err) {
        res.status(400).json({
            'status': 'ERROR',
            'messages': err.message
        })
    }
};

exports.setClient = async (req, res) => {
    if (!req.body) {
        res.status(400).send({
            message: "Content can not be empty!"
        });
    }
    try {
        if (req.body.apikey == 'we1232123talk') {
            setclient(req.body.client);
            console.log('request set client: ' + req.body.client);
            res.status(200).json({
                'status': "OK",
            })
        } else {
            res.status(400).json({
                'status': 'ERROR',
                'messages': 'Invalid apikey'
            })
        }
    } catch (err) {
        res.status(400).json({
            'status': 'ERROR',
            'messages': err.message
        })
    }
};
exports.removeClient = (req, res) => {
    if (!req.body) {
        res.status(400).send({
            message: "Content can not be empty!"
        });
    }
    try {
        
        if (req.body.apikey == 'we1232123talk') {
            const SESSION_FILE_PATH = __dirname + '/../../sessions/' + req.body.client + '.json';
            if(sessions[req.body.client] != null ){
                sessions[req.body.client].destroy();
            }else { 
                console.log("test");
            } 
            fs.unlinkSync(SESSION_FILE_PATH);
            rimraf(__dirname + '/../../sessions/' + req.body.client, function () { console.log("dir removed"); });
            const data = JSON.stringify({
                apikey: 'we4567talk',
                scan: 'on',
                client: req.body.client
            });
            sendapi(data, '/apiv2/update_config_scan');
            res.status(200).json({
                'status': 'OK',
            })
        } else {
            res.status(400).json({
                'status': 'ERROR',
                'messages': 'Invalid apikey'
            })
        }
    } catch (err) {
        res.status(400).json({
            'status': 'ERROR',
            'messages': err.message
        })
    }
};
// setclient('IM3');
setclient('boot_07');
// let number = "arebi";
// let sessionCfg;
//     const SESSION_FILE_PATH = __dirname + '/../../sessions/' + number + '.json';
//     if (fs.existsSync(SESSION_FILE_PATH)) {
//         sessionCfg = require(SESSION_FILE_PATH);
//     }
//     sessions[number] = new Client({
//         puppeteer: {
//             headless: true,
//             qrTimeoutMs: 0,
//             userDataDir: __dirname + '/../../sessions/' + number,
//             args: [
//             '--no-sandbox',
//             '--disable-cache',
//             '--disable-application-cache',
//             '--media-cache-size=0',
//             '--disk-cache-size=0',
//             '--disable-setuid-sandbox',
//             '--disable-dev-shm-usage',
//             '--disable-accelerated-2d-canvas',
//             '--no-first-run',
//             '--no-zygote',
//             '--disable-gpu'
//             ]
//         },
//         session: sessionCfg
//     });
//     sessions[number].initialize();
//     console.log("session after initialize "+JSON.stringify(sessions));

    
Editor is loading...