received.js 1.76 KB
const fs = require('fs');
const moment = require('moment');
const logger = require('komodo-sdk/logger');

const config = require('komodo-sdk/config');
const messagingClient = require('komodo-center-messaging-client-lib');
const transport = require('../transport');

messagingClient.setTransport(transport);

const mailparser = require('../mailparser-wrapper');


module.exports = async (msgFilename) => {
    const msg = await fs.promises.readFile(msgFilename);

    if (!msg) {
        logger.warn('Can not read message file', { msgFile: msgFilename });
        return;
    }

    const parsedMsg = await mailparser(msg);

    if (!parsedMsg || !parsedMsg.headers) {
        logger.warn('Invalid message');
        return;
    }

    const from = parsedMsg.headers.get('from').text;
    const imsi = parsedMsg.headers.get('imsi');
    const { text } = parsedMsg;

    const sentRaw = parsedMsg.headers.get('sent');
    const sent = sentRaw && moment(sentRaw, 'YY-MM-DD HH:mm:ss');

    logger.info('Message parsed', {
        from, imsi, text, sent,
    });

    if (!from || !imsi || !text) {
        return;
    }

    if (sent) {
        const messageAgeMs = new Date() - sent;
        if (messageAgeMs > 5 * 60 * 1000) {
            logger.info('Ignore expired message', {
                imsi, from, text, sent, messageAgeMs,
            });
            return;
        }
    }

    const doNotForwardToCore = (from.search(/(\+)*62/) !== 0) || (from.length <= 8);

    messagingClient.onIncomingMessage({
        me: imsi,
        partner: `${from}${config.number_suffix || ''}`,
        partner_raw: from,
        msg: text,
        origin_label: imsi || 'UNKNOWN',
        origin_transport: 'SMS',
        origin_partner: from,
        do_not_forward_to_core: doNotForwardToCore,
    });
};