const MODULE_NAME = 'DUMPER.REQUEST'; const fs = require('fs'); const fsPromise = fs.promises; const moment = require('moment'); const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger'); const path = require('path'); const mkdirIfNotExists = require('../mkdir-if-not-exists'); require('./init'); const vars = require('./vars'); const { baseDumpDir } = vars; const baseRequestDumpDir = path.join(baseDumpDir, 'request'); if (!fs.existsSync(baseRequestDumpDir)) { fs.mkdirSync(baseRequestDumpDir, { recursive: true }); } const doNotDump = !config.partner.dump_request; module.exports = async ( xid, task, endpointUrl, payload, axiosConfig, axiosResponse, exceptionOnHit, ) => { if (doNotDump) return; const { trx_id: trxId, } = task; logger.verbose(`${MODULE_NAME} 826334AF: Dumping`, { xid, trxId, }); const dumpDir = path.join( baseRequestDumpDir, moment().format('YYYY-MM-DD'), ); await mkdirIfNotExists(xid, dumpDir); const dumpFileName = path.join( dumpDir, `trx_${trxId}_${xid}.txt`, ); const data = `-------- BEGIN OF REQUEST DUMP -------- ${moment().format('YYYY-MM-DD HH:mm:ss')} XID: ${xid} TRX ID: ${trxId} TRX DATE: ${task.created} DESTINATION: ${task.destination} LOCAL PRODUCT: ${task.product} REMOTE PRODUCT: ${task.remote_product} HTTP METHOD: POST ENDPOINT URL: ${endpointUrl} HIT CONFIG: ${(axiosConfig && JSON.stringify(axiosConfig, null, 2)) || '-'} PAYLOAD: ${payload} RESPONSE HEADERS: ${axiosResponse && axiosResponse.headers && JSON.stringify(axiosResponse.headers)} HTTP STATUS: ${axiosResponse && axiosResponse.status} ${(axiosResponse && axiosResponse.statusText) || ''} HIT EXCEPTION: ${ exceptionOnHit ? JSON.stringify({ code: exceptionOnHit.code, message: exceptionOnHit.message }, null, 2) : '-' } TYPE OF RESPONSE BODY: ${typeof axiosResponse.data} RESPONSE BODY: ${ ( axiosResponse && axiosResponse.data && ( (typeof axiosResponse.data === 'string' && axiosResponse.data) || JSON.stringify(axiosResponse.data, null, 2) ) ) || '' } -------- END OF REQUEST DUMP -------- `; try { logger.verbose(`${MODULE_NAME} E915E0D8: Writing file`, { xid, dumpFileName, }); await fsPromise.writeFile(dumpFileName, data); logger.verbose(`${MODULE_NAME} 7275A26C: Writing last dump file`, { xid }); await fsPromise.writeFile( path.join(baseDumpDir, 'last-request.txt'), data, ); } catch (e) { logger.warn(`${MODULE_NAME} 29212E93: Exception on writing dump file`, { xid, eCode: e.code, eMessage: e.message, }); } };