Commit 56a753a4a7422629ca585f66903200e822e43a62

Authored by Adhidarma Hadiwinoto
1 parent 3e11e40a82
Exists in master

Fix require axios

Showing 3 changed files with 3 additions and 6 deletions Inline Diff

1 const MODULE_NAME = 'HIT.POSTPAID'; 1 const MODULE_NAME = 'HIT.POSTPAID';
2 2
3 // const axios = require('axios').default; 3 const axios = require('axios');
4 const axios = require('axios/dist/node/axios.cjs');
5 const urljoin = require('url-join'); 4 const urljoin = require('url-join');
6 const uniqid = require('uniqid'); 5 const uniqid = require('uniqid');
7 6
8 const config = require('komodo-sdk/config'); 7 const config = require('komodo-sdk/config');
9 const logger = require('tektrans-logger'); 8 const logger = require('tektrans-logger');
10 9
11 const translateRc = require('../translate-rc'); 10 const translateRc = require('../translate-rc');
12 const composeCallbackUrl = require('./compose-callback-url'); 11 const composeCallbackUrl = require('./compose-callback-url');
13 const dumpReqRes = require('./dump-req-res'); 12 const dumpReqRes = require('./dump-req-res');
14 const report = require('../report/postpaid'); 13 const report = require('../report/postpaid');
15 const axiosErrorIsSafe = require('./axios-error-is-safe'); 14 const axiosErrorIsSafe = require('./axios-error-is-safe');
16 15
17 module.exports = async (task, isPay) => { 16 module.exports = async (task, isPay) => {
18 const xid = uniqid(); 17 const xid = uniqid();
19 const hitType = isPay ? 'PAY' : 'INQUIRY'; 18 const hitType = isPay ? 'PAY' : 'INQUIRY';
20 19
21 logger.verbose(`${MODULE_NAME} 0EDCEB4F: Processing task`, { 20 logger.verbose(`${MODULE_NAME} 0EDCEB4F: Processing task`, {
22 xid, 21 xid,
23 hitType, 22 hitType,
24 task, 23 task,
25 }); 24 });
26 25
27 const params = { 26 const params = {
28 request_id: task.trx_id, 27 request_id: task.trx_id,
29 terminal_name: config.partner.terminal_name, 28 terminal_name: config.partner.terminal_name,
30 password: config.partner.password, 29 password: config.partner.password,
31 destination: task.destination, 30 destination: task.destination,
32 product_name: task.remote_product, 31 product_name: task.remote_product,
33 reverse_url: composeCallbackUrl(xid, task, true), 32 reverse_url: composeCallbackUrl(xid, task, true),
34 }; 33 };
35 34
36 const endpointUrl = urljoin( 35 const endpointUrl = urljoin(
37 config.partner.url, 36 config.partner.url,
38 isPay ? 'pay' : 'inquiry', 37 isPay ? 'pay' : 'inquiry',
39 ); 38 );
40 39
41 let lastResponse = null; 40 let lastResponse = null;
42 41
43 try { 42 try {
44 logger.verbose(`${MODULE_NAME} EFCF6C2A: Going to HIT POSTPAID endpoint`, { 43 logger.verbose(`${MODULE_NAME} EFCF6C2A: Going to HIT POSTPAID endpoint`, {
45 xid, 44 xid,
46 endpointUrl, 45 endpointUrl,
47 params, 46 params,
48 }); 47 });
49 48
50 const response = await axios.get(endpointUrl, { 49 const response = await axios.get(endpointUrl, {
51 headers: { 50 headers: {
52 'User-Agent': 'KOMODO-GW-HTTPGETX', 51 'User-Agent': 'KOMODO-GW-HTTPGETX',
53 }, 52 },
54 timeout: config.partner.hit_timeout_ms || 30 * 1000, 53 timeout: config.partner.hit_timeout_ms || 30 * 1000,
55 params, 54 params,
56 }); 55 });
57 56
58 if (!response) { 57 if (!response) {
59 const e = new Error(`${MODULE_NAME} 364AB160: Empty response`); 58 const e = new Error(`${MODULE_NAME} 364AB160: Empty response`);
60 e.rc = isPay ? '68' : '90'; 59 e.rc = isPay ? '68' : '90';
61 e.response = response; 60 e.response = response;
62 throw e; 61 throw e;
63 } 62 }
64 63
65 if (!response.data) { 64 if (!response.data) {
66 const e = new Error(`${MODULE_NAME} E64BCD17: Empty response data`); 65 const e = new Error(`${MODULE_NAME} E64BCD17: Empty response data`);
67 e.rc = isPay ? '68' : '90'; 66 e.rc = isPay ? '68' : '90';
68 e.response = response; 67 e.response = response;
69 throw e; 68 throw e;
70 } 69 }
71 70
72 if (typeof response.data !== 'object') { 71 if (typeof response.data !== 'object') {
73 const e = new Error(`${MODULE_NAME} E64BCD17: Response data is not a JSON`); 72 const e = new Error(`${MODULE_NAME} E64BCD17: Response data is not a JSON`);
74 e.rc = isPay ? '68' : '90'; 73 e.rc = isPay ? '68' : '90';
75 e.response = response; 74 e.response = response;
76 throw e; 75 throw e;
77 } 76 }
78 77
79 lastResponse = response; 78 lastResponse = response;
80 79
81 logger.verbose(`${MODULE_NAME} 924E4510: Got a direct response`, { 80 logger.verbose(`${MODULE_NAME} 924E4510: Got a direct response`, {
82 xid, 81 xid,
83 responseBody: response.data, 82 responseBody: response.data,
84 }); 83 });
85 84
86 report(xid, { 85 report(xid, {
87 command: response.data.command || hitType, 86 command: response.data.command || hitType,
88 trx_id: task.trx_id, 87 trx_id: task.trx_id,
89 rc: response.data.rc ? translateRc[response.data.rc] || response.data.rc 88 rc: response.data.rc ? translateRc[response.data.rc] || response.data.rc
90 : '68', 89 : '68',
91 sn: response.data.sn || null, 90 sn: response.data.sn || null,
92 amount: Number(response.data.amount) || undefined, 91 amount: Number(response.data.amount) || undefined,
93 amount_to_charge: Number(response.data.amount_to_charge) || undefined, 92 amount_to_charge: Number(response.data.amount_to_charge) || undefined,
94 balance: Number(response.data.ending_balance) 93 balance: Number(response.data.ending_balance)
95 || Number(response.data.balance) 94 || Number(response.data.balance)
96 || undefined, 95 || undefined,
97 base_bill_amount: (response.data.base_bill_amount) || undefined, 96 base_bill_amount: (response.data.base_bill_amount) || undefined,
98 bill_count: Number(response.data.bill_count) || undefined, 97 bill_count: Number(response.data.bill_count) || undefined,
99 message: { 98 message: {
100 xid, 99 xid,
101 'DIRECT-RESPONSE': response.data, 100 'DIRECT-RESPONSE': response.data,
102 }, 101 },
103 info: response.data.info || undefined, 102 info: response.data.info || undefined,
104 detail: response.data.detail || undefined, 103 detail: response.data.detail || undefined,
105 data: response.data.data || undefined, 104 data: response.data.data || undefined,
106 struk: response.data.struk || undefined, 105 struk: response.data.struk || undefined,
107 }); 106 });
108 } catch (e) { 107 } catch (e) {
109 const rc = e.rc 108 const rc = e.rc
110 || (axiosErrorIsSafe(e) && '91') 109 || (axiosErrorIsSafe(e) && '91')
111 || (!isPay && '91') 110 || (!isPay && '91')
112 || '68'; 111 || '68';
113 112
114 logger.warn(`${MODULE_NAME} 57764852: Exception`, { 113 logger.warn(`${MODULE_NAME} 57764852: Exception`, {
115 xid, 114 xid,
116 eCode: e.code, 115 eCode: e.code,
117 eMessage: e.message, 116 eMessage: e.message,
118 eRc: e.rc, 117 eRc: e.rc,
119 rc, 118 rc,
120 responseHttpStatus: e.response && e.response.status, 119 responseHttpStatus: e.response && e.response.status,
121 responseBody: e.response && e.response.data, 120 responseBody: e.response && e.response.data,
122 }); 121 });
123 122
124 lastResponse = e.response; 123 lastResponse = e.response;
125 124
126 report(xid, { 125 report(xid, {
127 command: hitType, 126 command: hitType,
128 trx_id: task.trx_id, 127 trx_id: task.trx_id,
129 rc, 128 rc,
130 message: { 129 message: {
131 xid, 130 xid,
132 'KOMODO-GW-ERROR': { 131 'KOMODO-GW-ERROR': {
133 eCode: e.code, 132 eCode: e.code,
134 eMessage: e.message, 133 eMessage: e.message,
135 responseHttpStatus: e.response && e.response.status, 134 responseHttpStatus: e.response && e.response.status,
136 responseBody: e.response && e.response.data, 135 responseBody: e.response && e.response.data,
137 }, 136 },
138 }, 137 },
139 }); 138 });
140 } finally { 139 } finally {
141 dumpReqRes( 140 dumpReqRes(
142 xid, 141 xid,
143 task, 142 task,
144 'GET', 143 'GET',
145 endpointUrl, 144 endpointUrl,
146 params, 145 params,
147 lastResponse && lastResponse.data, 146 lastResponse && lastResponse.data,
148 lastResponse && lastResponse.status, 147 lastResponse && lastResponse.status,
149 lastResponse, 148 lastResponse,
150 false, 149 false,
151 ); 150 );
152 } 151 }
153 }; 152 };
154 153
lib/hit/prepaid-advice.js
1 const MODULE_NAME = 'HIT.PREPAID-ADVICE'; 1 const MODULE_NAME = 'HIT.PREPAID-ADVICE';
2 2
3 // const axios = require('axios').default; 3 const axios = require('axios');
4 const axios = require('axios/dist/node/axios.cjs');
5 const urljoin = require('url-join'); 4 const urljoin = require('url-join');
6 5
7 const config = require('komodo-sdk/config'); 6 const config = require('komodo-sdk/config');
8 const logger = require('tektrans-logger'); 7 const logger = require('tektrans-logger');
9 8
10 const report = require('../report/prepaid'); 9 const report = require('../report/prepaid');
11 const translateRc = require('../translate-rc'); 10 const translateRc = require('../translate-rc');
12 const dumpReqRes = require('./dump-req-res'); 11 const dumpReqRes = require('./dump-req-res');
13 12
14 module.exports = async (xid, task) => { 13 module.exports = async (xid, task) => {
15 logger.verbose(`${MODULE_NAME} 90350EF7: Processing task`, { 14 logger.verbose(`${MODULE_NAME} 90350EF7: Processing task`, {
16 xid, 15 xid,
17 task, 16 task,
18 }); 17 });
19 18
20 const params = { 19 const params = {
21 request_id: task.trx_id, 20 request_id: task.trx_id,
22 terminal_name: config.partner.terminal_name, 21 terminal_name: config.partner.terminal_name,
23 password: config.partner.password, 22 password: config.partner.password,
24 }; 23 };
25 24
26 const endpointUrl = urljoin(config.partner.url, '/trx-status'); 25 const endpointUrl = urljoin(config.partner.url, '/trx-status');
27 let lastResponse = null; 26 let lastResponse = null;
28 27
29 try { 28 try {
30 logger.verbose(`${MODULE_NAME} 453A48DC: Going to HIT ADVICE endpoint`, { 29 logger.verbose(`${MODULE_NAME} 453A48DC: Going to HIT ADVICE endpoint`, {
31 xid, 30 xid,
32 endpointUrl, 31 endpointUrl,
33 params, 32 params,
34 }); 33 });
35 34
36 const response = await axios.get(endpointUrl, { 35 const response = await axios.get(endpointUrl, {
37 headers: { 36 headers: {
38 'User-Agent': 'KOMODO-GW-HTTPGETX', 37 'User-Agent': 'KOMODO-GW-HTTPGETX',
39 }, 38 },
40 timeout: config.partner.hit_timeout_ms || 10 * 1000, 39 timeout: config.partner.hit_timeout_ms || 10 * 1000,
41 params, 40 params,
42 }); 41 });
43 42
44 if (!response) { 43 if (!response) {
45 const e = new Error(`${MODULE_NAME} FD20A1AF: Empty response`); 44 const e = new Error(`${MODULE_NAME} FD20A1AF: Empty response`);
46 e.rc = '68'; 45 e.rc = '68';
47 e.response = response; 46 e.response = response;
48 throw e; 47 throw e;
49 } 48 }
50 49
51 if (!response.data) { 50 if (!response.data) {
52 const e = new Error(`${MODULE_NAME} 17FF8971: Empty response data`); 51 const e = new Error(`${MODULE_NAME} 17FF8971: Empty response data`);
53 e.rc = '68'; 52 e.rc = '68';
54 e.response = response; 53 e.response = response;
55 throw e; 54 throw e;
56 } 55 }
57 56
58 if (typeof response.data !== 'object') { 57 if (typeof response.data !== 'object') {
59 const e = new Error(`${MODULE_NAME} A6761E9F: Response data is not a JSON`); 58 const e = new Error(`${MODULE_NAME} A6761E9F: Response data is not a JSON`);
60 e.rc = '68'; 59 e.rc = '68';
61 e.response = response; 60 e.response = response;
62 throw e; 61 throw e;
63 } 62 }
64 63
65 lastResponse = response; 64 lastResponse = response;
66 65
67 logger.verbose(`${MODULE_NAME} 3B5C70C4: Got a direct response`, { 66 logger.verbose(`${MODULE_NAME} 3B5C70C4: Got a direct response`, {
68 xid, 67 xid,
69 responseBody: response.data, 68 responseBody: response.data,
70 }); 69 });
71 70
72 if (!response.data.trx_found || !response.data.trx) { 71 if (!response.data.trx_found || !response.data.trx) {
73 report(xid, { 72 report(xid, {
74 trx_id: task.trx_id, 73 trx_id: task.trx_id,
75 rc: '40', 74 rc: '40',
76 message: { 75 message: {
77 xid, 76 xid,
78 'ADVICE-DIRECT-RESPONSE': response.data, 77 'ADVICE-DIRECT-RESPONSE': response.data,
79 }, 78 },
80 }); 79 });
81 80
82 return; 81 return;
83 } 82 }
84 83
85 report(xid, { 84 report(xid, {
86 trx_id: task.trx_id, 85 trx_id: task.trx_id,
87 rc: response.data.trx.rc ? translateRc[response.data.trx.rc] || response.data.trx.rc 86 rc: response.data.trx.rc ? translateRc[response.data.trx.rc] || response.data.trx.rc
88 : '68', 87 : '68',
89 sn: response.data.trx.sn || null, 88 sn: response.data.trx.sn || null,
90 amount: Number(response.data.trx.amount) || undefined, 89 amount: Number(response.data.trx.amount) || undefined,
91 balance: Number(response.data.trx.ending_balance) || undefined, 90 balance: Number(response.data.trx.ending_balance) || undefined,
92 message: { 91 message: {
93 xid, 92 xid,
94 'ADVICE-DIRECT-RESPONSE': response.data, 93 'ADVICE-DIRECT-RESPONSE': response.data,
95 }, 94 },
96 }); 95 });
97 } catch (e) { 96 } catch (e) {
98 const rc = e.rc || '68'; 97 const rc = e.rc || '68';
99 98
100 logger.warn(`${MODULE_NAME} 1427175A: Exception`, { 99 logger.warn(`${MODULE_NAME} 1427175A: Exception`, {
101 xid, 100 xid,
102 eCode: e.code, 101 eCode: e.code,
103 eMessage: e.message, 102 eMessage: e.message,
104 eRc: e.rc, 103 eRc: e.rc,
105 rc, 104 rc,
106 responseHttpStatus: e.response && e.response.status, 105 responseHttpStatus: e.response && e.response.status,
107 responseBody: e.response && e.response.data, 106 responseBody: e.response && e.response.data,
108 }); 107 });
109 108
110 lastResponse = e.response; 109 lastResponse = e.response;
111 110
112 report(xid, { 111 report(xid, {
113 trx_id: task.trx_id, 112 trx_id: task.trx_id,
114 rc, 113 rc,
115 message: { 114 message: {
116 xid, 115 xid,
117 'KOMODO-GW-ADVICE-ERROR': { 116 'KOMODO-GW-ADVICE-ERROR': {
118 eCode: e.code, 117 eCode: e.code,
119 eMessage: e.message, 118 eMessage: e.message,
120 responseHttpStatus: e.response && e.response.status, 119 responseHttpStatus: e.response && e.response.status,
121 responseBody: e.response && e.response.data, 120 responseBody: e.response && e.response.data,
122 }, 121 },
123 }, 122 },
124 }); 123 });
125 } finally { 124 } finally {
126 dumpReqRes( 125 dumpReqRes(
127 xid, 126 xid,
128 task, 127 task,
129 'GET', 128 'GET',
130 endpointUrl, 129 endpointUrl,
131 params, 130 params,
132 lastResponse && lastResponse.data, 131 lastResponse && lastResponse.data,
133 lastResponse && lastResponse.status, 132 lastResponse && lastResponse.status,
134 lastResponse, 133 lastResponse,
135 true, 134 true,
136 ); 135 );
137 } 136 }
138 }; 137 };
139 138
lib/hit/prepaid-topup.js
1 const MODULE_NAME = 'HIT.PREPAID-TOPUP'; 1 const MODULE_NAME = 'HIT.PREPAID-TOPUP';
2 2
3 // const axios = require('axios').default; 3 const axios = require('axios');
4 const axios = require('axios/dist/node/axios.cjs');
5 const urljoin = require('url-join'); 4 const urljoin = require('url-join');
6 5
7 const config = require('komodo-sdk/config'); 6 const config = require('komodo-sdk/config');
8 const logger = require('tektrans-logger'); 7 const logger = require('tektrans-logger');
9 8
10 const report = require('../report/prepaid'); 9 const report = require('../report/prepaid');
11 const translateRc = require('../translate-rc'); 10 const translateRc = require('../translate-rc');
12 const composeCallbackUrl = require('./compose-callback-url'); 11 const composeCallbackUrl = require('./compose-callback-url');
13 const dumpReqRes = require('./dump-req-res'); 12 const dumpReqRes = require('./dump-req-res');
14 const axiosErrorIsSafe = require('./axios-error-is-safe'); 13 const axiosErrorIsSafe = require('./axios-error-is-safe');
15 14
16 module.exports = async (xid, task) => { 15 module.exports = async (xid, task) => {
17 logger.verbose(`${MODULE_NAME} 2272F01F: Processing task`, { 16 logger.verbose(`${MODULE_NAME} 2272F01F: Processing task`, {
18 xid, 17 xid,
19 task, 18 task,
20 }); 19 });
21 20
22 const params = { 21 const params = {
23 request_id: task.trx_id, 22 request_id: task.trx_id,
24 terminal_name: config.partner.terminal_name, 23 terminal_name: config.partner.terminal_name,
25 password: config.partner.password, 24 password: config.partner.password,
26 destination: task.destination, 25 destination: task.destination,
27 product_name: task.remote_product, 26 product_name: task.remote_product,
28 reverse_url: composeCallbackUrl(xid, task, false), 27 reverse_url: composeCallbackUrl(xid, task, false),
29 }; 28 };
30 29
31 const endpointUrl = urljoin(config.partner.url, '/topup'); 30 const endpointUrl = urljoin(config.partner.url, '/topup');
32 let lastResponse = null; 31 let lastResponse = null;
33 32
34 try { 33 try {
35 logger.verbose(`${MODULE_NAME} 4AAD4F99: Going to HIT prepaid endpoint`, { 34 logger.verbose(`${MODULE_NAME} 4AAD4F99: Going to HIT prepaid endpoint`, {
36 xid, 35 xid,
37 endpointUrl, 36 endpointUrl,
38 params, 37 params,
39 }); 38 });
40 39
41 const response = await axios.get(endpointUrl, { 40 const response = await axios.get(endpointUrl, {
42 headers: { 41 headers: {
43 'User-Agent': 'KOMODO-GW-HTTPGETX', 42 'User-Agent': 'KOMODO-GW-HTTPGETX',
44 }, 43 },
45 timeout: config.partner.hit_timeout_ms || 60 * 1000, 44 timeout: config.partner.hit_timeout_ms || 60 * 1000,
46 params, 45 params,
47 }); 46 });
48 47
49 if (!response) { 48 if (!response) {
50 const e = new Error(`${MODULE_NAME} 8CF4E04D: Empty response`); 49 const e = new Error(`${MODULE_NAME} 8CF4E04D: Empty response`);
51 e.rc = '68'; 50 e.rc = '68';
52 e.response = response; 51 e.response = response;
53 throw e; 52 throw e;
54 } 53 }
55 54
56 if (!response.data) { 55 if (!response.data) {
57 const e = new Error(`${MODULE_NAME} E72B5A53: Empty response data`); 56 const e = new Error(`${MODULE_NAME} E72B5A53: Empty response data`);
58 e.rc = '68'; 57 e.rc = '68';
59 e.response = response; 58 e.response = response;
60 throw e; 59 throw e;
61 } 60 }
62 61
63 if (typeof response.data !== 'object') { 62 if (typeof response.data !== 'object') {
64 const e = new Error(`${MODULE_NAME} 507680AB: Response data is not a JSON`); 63 const e = new Error(`${MODULE_NAME} 507680AB: Response data is not a JSON`);
65 e.rc = '68'; 64 e.rc = '68';
66 e.response = response; 65 e.response = response;
67 throw e; 66 throw e;
68 } 67 }
69 68
70 lastResponse = response; 69 lastResponse = response;
71 70
72 logger.verbose(`${MODULE_NAME} E51AFBBA: Got a direct response`, { 71 logger.verbose(`${MODULE_NAME} E51AFBBA: Got a direct response`, {
73 xid, 72 xid,
74 responseBody: response.data, 73 responseBody: response.data,
75 }); 74 });
76 75
77 report(xid, { 76 report(xid, {
78 trx_id: task.trx_id, 77 trx_id: task.trx_id,
79 rc: response.data.rc ? translateRc[response.data.rc] || response.data.rc 78 rc: response.data.rc ? translateRc[response.data.rc] || response.data.rc
80 : '68', 79 : '68',
81 sn: response.data.sn || null, 80 sn: response.data.sn || null,
82 amount: Number(response.data.amount) || undefined, 81 amount: Number(response.data.amount) || undefined,
83 balance: Number(response.data.ending_balance) || undefined, 82 balance: Number(response.data.ending_balance) || undefined,
84 message: { 83 message: {
85 xid, 84 xid,
86 'DIRECT-RESPONSE': response.data, 85 'DIRECT-RESPONSE': response.data,
87 }, 86 },
88 }); 87 });
89 } catch (e) { 88 } catch (e) {
90 const rc = e.rc 89 const rc = e.rc
91 || (axiosErrorIsSafe(e) && '91') 90 || (axiosErrorIsSafe(e) && '91')
92 || '68'; 91 || '68';
93 92
94 logger.warn(`${MODULE_NAME} 8E8E49F5: Exception`, { 93 logger.warn(`${MODULE_NAME} 8E8E49F5: Exception`, {
95 xid, 94 xid,
96 eCode: e.code, 95 eCode: e.code,
97 eMessage: e.message, 96 eMessage: e.message,
98 eRc: e.rc, 97 eRc: e.rc,
99 rc, 98 rc,
100 responseHttpStatus: e.response && e.response.status, 99 responseHttpStatus: e.response && e.response.status,
101 responseBody: e.response && e.response.data, 100 responseBody: e.response && e.response.data,
102 }); 101 });
103 102
104 lastResponse = e.response; 103 lastResponse = e.response;
105 104
106 report(xid, { 105 report(xid, {
107 trx_id: task.trx_id, 106 trx_id: task.trx_id,
108 rc, 107 rc,
109 message: { 108 message: {
110 xid, 109 xid,
111 'KOMODO-GW-ERROR': { 110 'KOMODO-GW-ERROR': {
112 eCode: e.code, 111 eCode: e.code,
113 eMessage: e.message, 112 eMessage: e.message,
114 responseHttpStatus: e.response && e.response.status, 113 responseHttpStatus: e.response && e.response.status,
115 responseBody: e.response && e.response.data, 114 responseBody: e.response && e.response.data,
116 }, 115 },
117 }, 116 },
118 }); 117 });
119 } finally { 118 } finally {
120 dumpReqRes( 119 dumpReqRes(
121 xid, 120 xid,
122 task, 121 task,
123 'GET', 122 'GET',
124 endpointUrl, 123 endpointUrl,
125 params, 124 params,
126 lastResponse && lastResponse.data, 125 lastResponse && lastResponse.data,
127 lastResponse && lastResponse.status, 126 lastResponse && lastResponse.status,
128 lastResponse, 127 lastResponse,
129 false, 128 false,
130 ); 129 );
131 } 130 }
132 }; 131 };
133 132