From ae566890d7b00355bb41ead28ecb86ffd2d13301 Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Thu, 11 Jul 2024 23:29:12 +0700
Subject: [PATCH] Webhook support

---
 config.sample.json                    |  1 +
 lib/core-callback/sender.js           | 15 +++++++++++++++
 lib/partner-listener/routers/topup.js | 17 +++++++++++++++++
 3 files changed, 33 insertions(+)

diff --git a/config.sample.json b/config.sample.json
index 933c14f..56d3d9e 100644
--- a/config.sample.json
+++ b/config.sample.json
@@ -8,6 +8,7 @@
         "partner": {
             "trust_proxy": ["loopback", "linklocal"],
             "port": 25614,
+            "# webhook": "http://PLEASE_CHANGE_ME/PLEASE_CHANGE_ME",
             "dump": false
         },
         "core": {
diff --git a/lib/core-callback/sender.js b/lib/core-callback/sender.js
index 9595006..11ace1d 100644
--- a/lib/core-callback/sender.js
+++ b/lib/core-callback/sender.js
@@ -180,6 +180,21 @@ const sender = async (data, xid, retry) => {
             delete matrix.callback_sender.active_sending[xid];
         }
 
+        if (config.listener.partner.webhook) {
+            try {
+                axios.post(config.listener.partner.webhook, {
+                    webhookType: 'KOMODO-CENTER-HTTPGETX.CORE-CALLBACK',
+                    body: params,
+                });
+            } catch (e) {
+                logger.warn(`${MODULE_NAME} F722520A: Exception on calling webhook`, {
+                    xid,
+                    eCode: e.code,
+                    eMessage: e.message || e.toString(),
+                });
+            }
+        }
+
         dumper(
             xid,
             isHttpPost ? 'POST' : 'GET',
diff --git a/lib/partner-listener/routers/topup.js b/lib/partner-listener/routers/topup.js
index 50683b3..ada11e4 100644
--- a/lib/partner-listener/routers/topup.js
+++ b/lib/partner-listener/routers/topup.js
@@ -1,6 +1,7 @@
 const MODULE_NAME = 'PARTNER-LISTENER.ROUTER.TOPUP';
 
 const express = require('express');
+const axios = require('axios');
 
 const config = require('komodo-sdk/config');
 const logger = require('tektrans-logger');
@@ -149,6 +150,22 @@ async function pageIndex(req, res) {
     };
 
     res.json(responseToPartner);
+
+    if (config.listener.partner.webhook) {
+        try {
+            axios.post(config.listener.partner.webhook, {
+                webhookType: 'KOMODO-CENTER-HTTPGETX.PARTNER-LISTENER.DIRECT-RESPONSE',
+                body: responseToPartner,
+            });
+        } catch (e) {
+            logger.warn(`${MODULE_NAME} ECC37ECA: Exception on calling webhook`, {
+                xid,
+                eCode: e.code,
+                eMessage: e.message || e.toString(),
+            });
+        }
+    }
+
     dumper(xid, req, responseToPartner);
 }
 
-- 
1.9.0