transport.js 2.1 KB
const MODULE_NAME = 'TRANSPORT';

const axios = require('axios').default;
const uniqid = require('uniqid');
const urljoin = require('url-join');
const config = require('komodo-sdk/config');
const logger = require('tektrans-logger');

const axiosConfig = {
    headers: {
        'content-type': 'application/json',
    },
    timeout: 60 * 1000,
};

const send = async (partner, msg, callerXid) => {
    const xid = callerXid || uniqid();

    const modemApiServer = config.modem;
    if (!modemApiServer || !modemApiServer.url) {
        logger.warn(`${MODULE_NAME} 4111A9BA: Missing modem`, { xid, partner, msg });
        return;
    }

    const endpointUrl = urljoin(
        modemApiServer.url,
        '/sms/send',
    );

    if (!partner || typeof partner !== 'string' || !partner.trim()) {
        logger.verbose(`${MODULE_NAME} E5308BDD: Missing destination`);
        return;
    }

    if (!msg || typeof msg !== 'string' || !msg.trim()) {
        logger.verbose(`${MODULE_NAME} EC8FF515: Missing msg`);
        return;
    }

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

    const payload = {
        destination,
        message: (msg || '').trim(),
    };

    logger.verbose(`${MODULE_NAME} 8D4F8A3A: Sending message to modem apiserver`, {
        xid,
        httpMethod: 'POST',
        endpointUrl,
        requestContentType: axiosConfig.headers['content-type'],
        payload,
    });

    try {
        const response = await axios.post(endpointUrl, payload, axiosConfig);

        logger.verbose(`${MODULE_NAME} 6D71CC75: Message sent to modem apiserver`, {
            xid,
            partner,
            msg,
            endpointUrl,
            httpStatus: response.status,
            responseBody: response.data,
        });
    } catch (e) {
        logger.warn(`${MODULE_NAME} C0124404: Exception on send`, {
            xid,
            eCode: e.code,
            eMessage: e.message,
            httpStatus: e.response && e.response.status,
            responseBody: e.response && e.response.data,
        });
    }
};
exports.send = send;