received.js 2.05 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');

const eventType = 'RECEIVED';

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

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

    const parsedMsg = await mailparser(msg);

    if (!parsedMsg || !parsedMsg.headers) {
        logger.warn('Invalid message', { eventType, msgFile: msgFilename, msgFileContent: msg });
        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', {
        eventType,
        msgFile: msgFilename,
        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', {
                eventType,
                msgFile: msgFilename,
                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,
    });
};