const MODULE_NAME = 'HIT.PREPAID-ADVICE'; const axios = require('axios').default; const urljoin = require('url-join'); const config = require('komodo-sdk/config'); const logger = require('tektrans-logger'); const report = require('../report/prepaid'); const translateRc = require('../translate-rc'); const dumpReqRes = require('./dump-req-res'); module.exports = async (xid, task) => { logger.verbose(`${MODULE_NAME} 90350EF7: Processing task`, { xid, task, }); const params = { request_id: task.trx_id, terminal_name: config.partner.terminal_name, password: config.partner.password, }; const endpointUrl = urljoin(config.partner.url, '/trx-status'); let lastResponse = null; try { logger.verbose(`${MODULE_NAME} 453A48DC: Going to HIT ADVICE endpoint`, { xid, endpointUrl, params, }); const response = await axios.get(endpointUrl, { headers: { 'User-Agent': 'KOMODO-GW-HTTPGETX', }, timeout: config.partner.hit_timeout_ms || 10 * 1000, params, }); if (!response) { const e = new Error(`${MODULE_NAME} FD20A1AF: Empty response`); e.rc = '68'; e.response = response; throw e; } if (!response.data) { const e = new Error(`${MODULE_NAME} 17FF8971: Empty response data`); e.rc = '68'; e.response = response; throw e; } if (typeof response.data !== 'object') { const e = new Error(`${MODULE_NAME} A6761E9F: Response data is not a JSON`); e.rc = '68'; e.response = response; throw e; } lastResponse = response; logger.verbose(`${MODULE_NAME} 3B5C70C4: Got a direct response`, { xid, responseBody: response.data, }); if (!response.data.trx_found || !response.data.trx) { report(xid, { trx_id: task.trx_id, rc: '40', message: { xid, 'ADVICE-DIRECT-RESPONSE': response.data, }, }); return; } report(xid, { trx_id: task.trx_id, rc: response.data.trx.rc ? translateRc[response.data.trx.rc] || response.data.trx.rc : '68', sn: response.data.trx.sn || null, amount: Number(response.data.trx.amount) || undefined, balance: Number(response.data.trx.ending_balance) || undefined, message: { xid, 'ADVICE-DIRECT-RESPONSE': response.data, }, }); } catch (e) { const rc = e.rc || '68'; logger.warn(`${MODULE_NAME} 1427175A: Exception`, { xid, eCode: e.code, eMessage: e.message, eRc: e.rc, rc, responseHttpStatus: e.response && e.response.status, responseBody: e.response && e.response.data, }); lastResponse = e.response; report(xid, { trx_id: task.trx_id, rc, message: { xid, 'KOMODO-GW-ADVICE-ERROR': { eCode: e.code, eMessage: e.message, responseHttpStatus: e.response && e.response.status, responseBody: e.response && e.response.data, }, }, }); } finally { dumpReqRes( xid, task, 'GET', endpointUrl, params, lastResponse && lastResponse.data, lastResponse && lastResponse.status, lastResponse, true, ); } };