From 93ea90c3e74bcad946be24858cc194a50a136809 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <adhisimon@gmail.com>
Date: Mon, 31 May 2021 15:03:00 +0700
Subject: [PATCH] CALLBACK-SENDER: data for postpaid trx

---
 lib/core-callback/sender.js | 66 +++++++++++++++++++++++++++++++++++----------
 1 file changed, 52 insertions(+), 14 deletions(-)

diff --git a/lib/core-callback/sender.js b/lib/core-callback/sender.js
index 522efa4..0a0e3d6 100644
--- a/lib/core-callback/sender.js
+++ b/lib/core-callback/sender.js
@@ -1,15 +1,39 @@
-const MODULE_NAME = 'CORE-CALLBACK-SENDER';
-const MAX_RETRY = 10;
-const SLEEP_BEFORE_RETRY_MS = 60 * 1000;
+const MODULE_NAME = 'CORE-CALLBACK.SENDER';
 
 const axios = require('axios').default;
+const config = require('komodo-sdk/config');
 const logger = require('komodo-sdk/logger');
 
+const HTTP_TIMEOUT = Number(
+    config.callback_sender && config.callback_sender.http_timeout_ms,
+) || 30 * 1000;
+
+const SLEEP_BEFORE_RETRY_MS = Number(
+    config.callback_sender && config.callback_sender.sleep_before_retry_ms,
+) || 10 * 1000;
+
+const MAX_RETRY = Number(
+    config.callback_sender && config.callback_sender.max_retry,
+) || 10;
+
+logger.verbose(`${MODULE_NAME} 848B9104: Initialized`, {
+    HTTP_TIMEOUT,
+    SLEEP_BEFORE_RETRY_MS,
+    MAX_RETRY,
+});
+
 const sleep = require('../sleep');
 const urlConcatQs = require('../url-concat-qs');
 
 const sender = async (data, xid, retry) => {
-    if (!data.reverse_url) return;
+    if (!data.reverse_url) {
+        logger.verbose(`${MODULE_NAME} C4FF18FB: Ignoring missing reverse url`, {
+            xid,
+            dataFromCore: data,
+        });
+
+        return;
+    }
 
     const params = {
         httpgetx_xid: xid,
@@ -21,33 +45,47 @@ const sender = async (data, xid, retry) => {
         terminal_name: data.terminal_name,
         product_name: data.product_name,
         destination: data.destination,
+
         rc: data.rc,
         sn: data.sn || undefined,
         amount: Number(data.amount) || undefined,
         ending_balance: Number(data.ending_balance) || undefined,
+
         message: data.message,
+
+        bill_count: Number(data.bill_count) || undefined,
+        bill_amount: Number(data.bill_amount) || undefined,
+        fee_per_bill: Number(data.fee) || undefined,
+        fee_total: Number(data.fee_total) || undefined,
+
+        bill_detail: data.bill_detail || undefined,
     };
 
-    if (data.command === 'INQUIRY' && Number(data.amount_to_charge)) {
-        params.amount_to_charge = Number(data.amount_to_charge);
+    if (data.command === 'INQUIRY' && data.amount_to_charge) {
+        params.amount_to_charge = data.amount_to_charge;
     }
 
     const fullUrl = urlConcatQs(data.reverse_url, params);
-    logger.info(`${MODULE_NAME} 8B6A4CEC: Sending CORE-CALLBACK to PARTNER`, {
-        xid, retry, params, fullUrl,
+    logger.info(`${MODULE_NAME} 8B6A4CEC: Sending to PARTNER`, {
+        xid,
+        retry,
+        fullUrl,
     });
 
     try {
-        const result = await axios.get(data.reverse_url, {
+        const response = await axios.get(data.reverse_url, {
             params,
-            timeout: 60 * 1000,
+            timeout: HTTP_TIMEOUT,
         });
 
-        logger.info(`${MODULE_NAME} 3641FBD7: CORE-CALLBACK has been sent to PARTNER successfully`, {
-            xid, retry, fullUrl, body: result && result.data,
+        logger.info(`${MODULE_NAME} 3641FBD7: Has been sent to PARTNER successfully`, {
+            xid,
+            retry,
+            httpStatus: response.status,
+            responseBody: response && response.data,
         });
     } catch (e) {
-        logger.warn(`${MODULE_NAME} A1EC9E70: Failed on sending CORE-CALLBACK to PARTNER`, {
+        logger.warn(`${MODULE_NAME} A1EC9E70: Failed on sending to PARTNER`, {
             xid,
             retry,
             maxRetry: MAX_RETRY,
@@ -56,7 +94,7 @@ const sender = async (data, xid, retry) => {
             reverseUrl: data.reverse_url,
             fullUrl,
             httpStatus: e.response && e.response.status,
-            body: e.response && e.response.data,
+            responseBody: e.response && e.response.data,
         });
 
         if ((retry || 0) < MAX_RETRY) {
-- 
1.9.0