diff --git a/lib/partner-listener/index.js b/lib/partner-listener/index.js index def26e8..573d83a 100644 --- a/lib/partner-listener/index.js +++ b/lib/partner-listener/index.js @@ -13,6 +13,7 @@ const routerInquiry = require('./routers/inquiry'); const routerPay = require('./routers/pay'); const routerTopup = require('./routers/topup'); const routerTrxStatus = require('./routers/trx-status'); +const routerProductTree = require('./routers/product-tree'); const app = express(); @@ -49,6 +50,7 @@ app.use('/inquiry', routerInquiry); app.use('/pay', routerPay); app.use('/topup', routerTopup); app.use('/trx-status', routerTrxStatus); +app.use('/product-tree', routerProductTree); app.use('/', routerTopup); app.use((req, res) => { diff --git a/lib/partner-listener/routers/product-tree.js b/lib/partner-listener/routers/product-tree.js new file mode 100644 index 0000000..650e048 --- /dev/null +++ b/lib/partner-listener/routers/product-tree.js @@ -0,0 +1,53 @@ +const MODULE_NAME = 'PARTNER-LISTENER.ROUTERS.PRODUCT-TREE'; + +const axios = require('axios').default; +const express = require('express'); +const urlJoin = require('url-join'); + +const coreUrl = require('komodo-sdk/core-url'); +const logger = require('tektrans-logger'); + +const getFromBodyQsParams = require('../../get-from-body-qs-params'); + +const CORE_ENDPOINT = urlJoin(coreUrl, '/product-tree'); + +const router = express.Router(); +module.exports = router; + +const mainHandler = async (req, res) => { + const { xid } = res.locals; + + const terminalName = getFromBodyQsParams(req, 'terminal_name'); + const password = getFromBodyQsParams(req, 'password'); + + try { + const result = await axios.get(CORE_ENDPOINT, { + params: { + terminal_name: terminalName, + password, + }, + }); + + if (!result) { + const e = new Error(`${MODULE_NAME} B7555411: Invalid result from CORE`); + throw e; + } + + result.httpgetx_xid = xid; + res.json(result); + } catch (e) { + logger.warn(`${MODULE_NAME} 5AA99A06: Exception`, { + xid, + eCode: e.code, + eMessage: e.message || e, + }); + + res.json({ + xid, + ts: new Date(), + error: e.message || e, + }); + } +}; + +router.get('/', mainHandler); diff --git a/package-lock.json b/package-lock.json index 05f1545..aece717 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "request": "^2.88.0", "tektrans-logger": "^1.2.3", "uniqid": "^5.3.0", + "url-join": "^5.0.0", "uuid": "^3.3.3" }, "devDependencies": { @@ -2113,6 +2114,11 @@ "macaddress": "^0.2.8" } }, + "node_modules/komodo-sdk/node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", @@ -4194,9 +4200,12 @@ } }, "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, "node_modules/util-deprecate": { "version": "1.0.2", @@ -6305,6 +6314,11 @@ "requires": { "macaddress": "^0.2.8" } + }, + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" } } }, @@ -7919,9 +7933,9 @@ } }, "url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" }, "util-deprecate": { "version": "1.0.2", diff --git a/package.json b/package.json index b811e74..309f62f 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "request": "^2.88.0", "tektrans-logger": "^1.2.3", "uniqid": "^5.3.0", + "url-join": "^5.0.0", "uuid": "^3.3.3" } }