Commit a5ae0d715cee05fde6ff9af82e09b46f0e14dec0

Authored by Adhidarma Hadiwinoto
1 parent 0f6b41821e
Exists in master

Uniform response

Showing 1 changed file with 16 additions and 11 deletions Inline Diff

1 const MODULE_NAME = 'PARSE-RESULT'; 1 const MODULE_NAME = 'PARSE-RESULT';
2 2
3 const config = require('komodo-sdk/config'); 3 const config = require('komodo-sdk/config');
4 const logger = require('komodo-sdk/logger'); 4 const logger = require('komodo-sdk/logger');
5 5
6 const getParamsMemberObj = require('./generic-xmlrpc/get-params-members-obj'); 6 const getParamsMemberObj = require('./generic-xmlrpc/get-params-members-obj');
7 const parseXml = require('./parse-xml'); 7 const parseXml = require('./parse-xml');
8 8
9 const report = require('./report'); 9 const report = require('./report');
10 const translateRc = require('./translate-rc'); 10 const translateRc = require('./translate-rc');
11 11
12 module.exports = (xid, trxIdFromCaller, xml, isCallback) => { 12 module.exports = (xid, trxIdFromCaller, xml, isCallback) => {
13 logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid }); 13 logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid, isCallback });
14
15 const responseType = isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE';
14 16
15 if (!trxIdFromCaller && !isCallback) { 17 if (!trxIdFromCaller && !isCallback) {
16 if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid }); 18 if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid });
17 return; 19 return;
18 } 20 }
19 21
20 const obj = parseXml(xid, xml); 22 const obj = parseXml(xid, xml);
21 if (!obj) { 23 if (!obj) {
22 logger.warn(`${MODULE_NAME} B46CAAD1: Invalid XML`, { xid }); 24 const e = new Error(`${MODULE_NAME} B46CAAD1: Invalid XML`);
25 logger.warn(e.message, { xid });
23 26
24 if (trxIdFromCaller) { 27 if (trxIdFromCaller) {
25 report(xid, { 28 report(xid, {
26 trx_id: trxIdFromCaller.toString(), 29 trx_id: trxIdFromCaller.toString(),
27 rc: '68', 30 rc: '68',
28 message: { 31 message: {
29 xid, 32 xid,
30 isDirectResponse: !isCallback, 33 responseType,
31 isCallback: !!isCallback, 34 'GW-ERROR': {
32 body: xml, 35 message: e.message,
36 responseFromPartner: xml,
37 },
33 }, 38 },
34 }); 39 });
35 } 40 }
36 41
37 return; 42 return;
38 } 43 }
39 44
40 const params = getParamsMemberObj(obj, false); 45 const params = getParamsMemberObj(obj, false);
41 46
42 if (!params) { 47 if (!params) {
43 const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`); 48 const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`);
44 logger.warn(e.message, { xid }); 49 logger.warn(e.message, { xid });
45 50
46 if (trxIdFromCaller) { 51 if (trxIdFromCaller) {
47 report(xid, { 52 report(xid, {
48 trx_id: trxIdFromCaller.toString(), 53 trx_id: trxIdFromCaller.toString(),
49 rc: '68', 54 rc: '68',
50 message: { 55 message: {
51 xid, 56 xid,
52 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE', 57 responseType,
53 'GW-ERROR': { 58 'GW-ERROR': {
54 message: e.message, 59 message: e.message,
55 response: obj, 60 responseFromPartner: obj,
56 }, 61 },
57 }, 62 },
58 }); 63 });
59 } 64 }
60 } 65 }
61 66
62 logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params }); 67 logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params });
63 68
64 const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID'; 69 const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID';
65 const requestIdFromResponse = params[requestIdField]; 70 const requestIdFromResponse = params[requestIdField];
66 71
67 const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE'; 72 const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE';
68 const responseCodeFromResponse = params[responseCodeField]; 73 const responseCodeFromResponse = params[responseCodeField];
69 74
70 const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE'; 75 // eslint-disable-next-line max-len
71 const messageFromResponse = params[messageField]; 76 // const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE';
77 // const messageFromResponse = params[messageField];
72 78
73 const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN'; 79 const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN';
74 const snFromResponse = params[snField]; 80 const snFromResponse = params[snField];
75 81
76 const trxId = trxIdFromCaller || requestIdFromResponse; 82 const trxId = trxIdFromCaller || requestIdFromResponse;
77 if (!trxId) { 83 if (!trxId) {
78 logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid }); 84 logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid });
79 return; 85 return;
80 } 86 }
81 87
82 const rc = translateRc(xid, responseCodeFromResponse) || '68'; 88 const rc = translateRc(xid, responseCodeFromResponse) || '68';
83 89
84 const sn = (rc === '00' && snFromResponse) || null; 90 const sn = (rc === '00' && snFromResponse) || null;
85 91
86 report(xid, { 92 report(xid, {
87 trx_id: trxId.toString(), 93 trx_id: trxId.toString(),
88 rc, 94 rc,
89 sn, 95 sn,
90 message: { 96 message: {
91 xid, 97 xid,
92 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE', 98 responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE',
93 message: messageFromResponse, 99 message: params,
94 detail: params,
95 }, 100 },
96 }); 101 });
97 }; 102 };