transport.js 1.43 KB
const fs = require('fs');
const moment = require('moment');
const uniqid = require('uniqid');

const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');

async function send(partner, msg) {
    if (typeof partner !== 'string' || typeof msg !== 'string') return;
    if (!partner.trim() || !msg.trim()) return;

    const destination = partner.trim().replace(/^0/, '62').replace(/^\+/, '');

    if (!destination || !Number(destination) || destination.length < 8) return;

    if (msg.trim().search(/DIPROSES$/) >= 0) return;

    const msgFileContent = `
To: ${destination}

${msg.trim()}
        `.trim();

    const dir = config.outbox_dir || '/var/spool/sms/outgoing';
    const ts = moment().format('YYYYMMDD_HHmmss.SSS');
    const filename = `${dir}/komodo.${ts}.${uniqid()}`;

    fs.exists(dir, (isExists) => {
        if (!isExists) {
            logger.warn('Outbox dir is not exists', { dir });
            return;
        }

        logger.info('Writing outbox', {
            to: destination, msg: msg.trim(), msgLength: msg.trim().length, filename,
        });
        try {
            fs.promises.writeFile(filename, msgFileContent, { mode: 0o660 });
        } catch (e) {
            logger.warn('Exception on writing outbox', {
                to: destination,
                msg: msg.trim(),
                filename,
                err: e.toString(),
            });
        }
    });
}

exports.send = send;