buy.js 1.91 KB
const MODULE_NAME = 'ACTIONS.BUY';

const logger = require('tektrans-logger');
const axios = require('axios').default;

const config = require('../config');
const configData = require('../config/data');

const topupToKomodo = require('./topup-to-komodo');

const client = axios.create({
    baseURL: config.core.url,
    timeout: config.core.request_timeout_ms,
    headers: {
        'x-access-token': config.core.access_token,
    },
});

/**
 * Buy a product from supplier komodo
 *
 * @param {string} xid
 * @param {object} transaction
 *
 */
module.exports = async (xid, transaction) => {
    try {
        logger.verbose(`${MODULE_NAME} 4B139379: Buy product to komodo`, {
            xid,
            transaction,
        });
        const iConfig = await configData.all();

        let productName = transaction.product_name;
        if (
            iConfig.products[transaction.product_name]
            && iConfig.products[transaction.product_name].remote
        ) {
            productName = iConfig.products[transaction.product_name].remote;
        }

        const callbackUrl = `${iConfig.url}:${iConfig.port}/apikey/${iConfig.apikey}/updates`;
        const result = await topupToKomodo(
            xid,
            transaction.id,
            transaction.destination,
            productName,
            callbackUrl,
        );
        logger.verbose(`${MODULE_NAME} 5BDFAF41: result from komodo`, {
            xid,
            trxId: transaction.id,
            result,
        });
        const params = {
            id: result.request_id,
            rc: result.rc,
            amount: result.amount || null,
            message: result.message,
            sn: result.sn || null,
        };

        await client.post('/transactions/gateway-update', params);
    } catch (e) {
        logger.warn(`${MODULE_NAME} E9887C98: Exception`, {
            xid,
            message: e.message,
            code: e.code,
        });
    }
};