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,
);
}
};