diff --git a/config.sample.json b/config.sample.json index 1048184..bdc27a7 100644 --- a/config.sample.json +++ b/config.sample.json @@ -1,5 +1,5 @@ { - "name": "gateway-sds-ss", + "name": "gateway-sds", "url": "http://localhost", "port": 11330, "apikey": "fd97cf519b979262d9d9004cba6a165629ca8b69350a6afdcaab6ab2c9a996ae", diff --git a/lib/actions/buy-to-sds.js b/lib/actions/buy-to-sds.js new file mode 100644 index 0000000..3e1e582 --- /dev/null +++ b/lib/actions/buy-to-sds.js @@ -0,0 +1,68 @@ +const MODULE_NAME = 'ACTIONS.BUY-TO-SDS'; + +const logger = require('tektrans-logger'); +const axios = require('axios').default; + +const config = require('../config'); + +const client = axios.create({ + baseURL: config.sds_ss.url, + timeout: config.sds_ss.request_timeout_ms, +}); + +/** + * request buy to sds + * + * @param {string} xid + * @param {string} requestId + * @param {string} destination + * @param {string} productName + * @param {number} quantity + * @param {string} reverseUrl + */ +module.exports = async ( + xid, + requestId, + destination, + productName, + quantity, + reverseUrl, +) => { + logger.verbose(`${MODULE_NAME} 4AD4DF41: buy to sds`, { + requestId, destination, productName, xid, + }); + + const params = { + request_id: requestId, + username: config.sds_ss.username, + password: config.komodo_http_get_x.password, + number: destination, + product: productName, + amount: quantity, + reverse_url: reverseUrl, + }; + + try { + const response = await client.get('/request', { + params, + }); + if (!response) { + throw new Error(`${MODULE_NAME} 6CE3E06E: Empty response sds`); + } + if (!response.data) { + throw new Error(`${MODULE_NAME} F236476F: Empty response sds`); + } + + return response.data; + } catch (err) { + logger.warn(`${MODULE_NAME} 48BAA6B7: Exception`, { + xid, + requestId, + destination, + productName, + quantity, + message: err.message, + }); + throw err; + } +}; diff --git a/lib/actions/buy.js b/lib/actions/buy.js index 3c6b34d..85f1f64 100644 --- a/lib/actions/buy.js +++ b/lib/actions/buy.js @@ -6,7 +6,7 @@ const axios = require('axios').default; const config = require('../config'); const configData = require('../config/data'); -const topupToKomodo = require('./topup-to-komodo'); +const buyToSDS = require('./buy-to-sds'); const client = axios.create({ baseURL: config.core.url, @@ -40,14 +40,15 @@ module.exports = async (xid, transaction) => { } const callbackUrl = `${iConfig.url}:${iConfig.port}/apikey/${iConfig.apikey}/updates`; - const result = await topupToKomodo( + const result = await buyToSDS( xid, transaction.id, transaction.destination, productName, + transaction.quantity, callbackUrl, ); - logger.verbose(`${MODULE_NAME} 5BDFAF41: result from komodo`, { + logger.verbose(`${MODULE_NAME} 5BDFAF41: result from sds`, { xid, trxId: transaction.id, result, diff --git a/lib/actions/index.js b/lib/actions/index.js index 580d9ad..5d42127 100644 --- a/lib/actions/index.js +++ b/lib/actions/index.js @@ -1,3 +1,2 @@ exports.buy = require('./buy'); -exports.inquiry = require('./inquiry'); -exports.pay = require('./pay'); + diff --git a/lib/actions/inquiry-to-komodo.js b/lib/actions/inquiry-to-komodo.js deleted file mode 100644 index 19a60c0..0000000 --- a/lib/actions/inquiry-to-komodo.js +++ /dev/null @@ -1,64 +0,0 @@ -const MODULE_NAME = 'ACTIONS.INQUIRY-TO-KOMODO'; - -const logger = require('tektrans-logger'); -const axios = require('axios').default; - -const config = require('../config'); - -const client = axios.create({ - baseURL: config.komodo_http_get_x.url, - timeout: config.komodo_http_get_x.request_timeout_ms, -}); - -/** - * request inquiry transaction to komodo - * - * @param {string} xid - * @param {string} requestId - * @param {string} destination - * @param {string} productName - * @param {string} reverseUrl - */ -module.exports = async ( - xid, - requestId, - destination, - productName, - reverseUrl, -) => { - logger.verbose(`${MODULE_NAME} 4AD4DF41: request inquiry to komodo`, { - requestId, destination, productName, reverseUrl, xid, - }); - - const params = { - request_id: requestId, - terminal_name: config.komodo_http_get_x.terminal_name, - password: config.komodo_http_get_x.password, - destination, - product_name: productName, - reverse_url: reverseUrl, - }; - - try { - const response = await client.get('/inquiry', { - params, - }); - if (!response) { - throw new Error(`${MODULE_NAME} 6CE3E06E: Empty response from komodo`); - } - if (!response.data) { - throw new Error(`${MODULE_NAME} F236476F: Empty response data from komodo`); - } - - return response.data; - } catch (err) { - logger.warn(`${MODULE_NAME} 48BAA6B7: Exception`, { - xid, - requestId, - destination, - productName, - message: err.message, - }); - throw err; - } -}; diff --git a/lib/actions/inquiry.js b/lib/actions/inquiry.js deleted file mode 100644 index 555e31c..0000000 --- a/lib/actions/inquiry.js +++ /dev/null @@ -1,71 +0,0 @@ -const MODULE_NAME = 'ACTIONS.INQUIRY'; - -const logger = require('tektrans-logger'); -const axios = require('axios').default; - -const config = require('../config'); -const configData = require('../config/data'); - -const inquiryToKomodo = require('./inquiry-to-komodo'); - -const client = axios.create({ - baseURL: config.core.url, - timeout: config.core.request_timeout_ms, - headers: { - 'x-access-token': config.core.access_token, - }, -}); - -/** - * Inquiry a product from supplier komodo - * - * @param {string} xid - * @param {object} transaction - * - */ -module.exports = async (xid, transaction) => { - try { - logger.verbose(`${MODULE_NAME} ABE82225: Inquiry product to komodo`, { - xid, - transaction, - }); - const iConfig = await configData.all(); - - let productName = transaction.product_name; - if ( - iConfig.postpaid_products[transaction.product_name] - && iConfig.postpaid_products[transaction.product_name].remote - ) { - productName = iConfig.postpaid_products[transaction.product_name].remote; - } - - const callbackUrl = `${iConfig.url}:${iConfig.port}/apikey/${iConfig.apikey}/updates`; - const result = await inquiryToKomodo( - xid, - transaction.id, - transaction.destination, - productName, - callbackUrl, - ); - logger.verbose(`${MODULE_NAME} 076C1206: result from komodo`, { - xid, - trxId: transaction.id, - result, - }); - const params = { - id: result.request_id, - rc: result.rc, - amount: result.amount || null, - message: result.message, - sn: result.sn || null, - }; - - await client.post('/transactions/gateway-update', params); - } catch (e) { - logger.warn(`${MODULE_NAME} D1A1B698: Exception`, { - xid, - message: e.message, - code: e.code, - }); - } -}; diff --git a/lib/actions/pay.js b/lib/actions/pay.js deleted file mode 100644 index ac7ed6f..0000000 --- a/lib/actions/pay.js +++ /dev/null @@ -1,71 +0,0 @@ -const MODULE_NAME = 'ACTIONS.PAY'; - -const logger = require('tektrans-logger'); -const axios = require('axios').default; - -const config = require('../config'); -const configData = require('../config/data'); - -const paymentToKomodo = require('./payment-to-komodo'); - -const client = axios.create({ - baseURL: config.core.url, - timeout: config.core.request_timeout_ms, - headers: { - 'x-access-token': config.core.access_token, - }, -}); - -/** - * Pay a product from supplier komodo - * - * @param {string} xid - * @param {object} transaction - * - */ -module.exports = async (xid, transaction) => { - try { - logger.verbose(`${MODULE_NAME} CB9506E9: Pay product to komodo`, { - xid, - transaction, - }); - const iConfig = await configData.all(); - - let productName = transaction.product_name; - if ( - iConfig.postpaid_products[transaction.product_name] - && iConfig.postpaid_products[transaction.product_name].remote - ) { - productName = iConfig.postpaid_products[transaction.product_name].remote; - } - - const callbackUrl = `${iConfig.url}:${iConfig.port}/apikey/${iConfig.apikey}/updates`; - const result = await paymentToKomodo( - xid, - transaction.id, - transaction.destination, - productName, - callbackUrl, - ); - logger.verbose(`${MODULE_NAME} 4F45F9E3: result from komodo`, { - xid, - trxId: transaction.id, - result, - }); - const params = { - id: result.request_id, - rc: result.rc, - amount: result.amount || null, - message: result.message, - sn: result.sn || null, - }; - - await client.post('/transactions/gateway-update', params); - } catch (e) { - logger.warn(`${MODULE_NAME} EF0EE887: Exception`, { - xid, - message: e.message, - code: e.code, - }); - } -}; diff --git a/lib/actions/payment-to-komodo.js b/lib/actions/payment-to-komodo.js deleted file mode 100644 index 3132ef0..0000000 --- a/lib/actions/payment-to-komodo.js +++ /dev/null @@ -1,64 +0,0 @@ -const MODULE_NAME = 'ACTIONS.PAY-TO-KOMODO'; - -const logger = require('tektrans-logger'); -const axios = require('axios').default; - -const config = require('../config'); - -const client = axios.create({ - baseURL: config.komodo_http_get_x.url, - timeout: config.komodo_http_get_x.request_timeout_ms, -}); - -/** - * request pay transaction to komodo - * - * @param {string} xid - * @param {string} requestId - * @param {string} destination - * @param {string} productName - * @param {string} reverseUrl - */ -module.exports = async ( - xid, - requestId, - destination, - productName, - reverseUrl, -) => { - logger.verbose(`${MODULE_NAME} 740EF164: pay to komodo`, { - requestId, destination, productName, xid, - }); - - const params = { - request_id: requestId, - terminal_name: config.komodo_http_get_x.terminal_name, - password: config.komodo_http_get_x.password, - destination, - product_name: productName, - reverse_url: reverseUrl, - }; - - try { - const response = await client.get('/pay', { - params, - }); - if (!response) { - throw new Error(`${MODULE_NAME} 29D8D56F: Empty response from komodo`); - } - if (!response.data) { - throw new Error(`${MODULE_NAME} 288CD049: Empty response data from komodo`); - } - - return response.data; - } catch (err) { - logger.warn(`${MODULE_NAME} DCE65215: Exception`, { - xid, - requestId, - destination, - productName, - message: err.message, - }); - throw err; - } -}; diff --git a/lib/actions/topup-to-komodo.js b/lib/actions/topup-to-komodo.js deleted file mode 100644 index c712eac..0000000 --- a/lib/actions/topup-to-komodo.js +++ /dev/null @@ -1,64 +0,0 @@ -const MODULE_NAME = 'ACTIONS.TOPUP-TO-KOMODO'; - -const logger = require('tektrans-logger'); -const axios = require('axios').default; - -const config = require('../config'); - -const client = axios.create({ - baseURL: config.komodo_http_get_x.url, - timeout: config.komodo_http_get_x.request_timeout_ms, -}); - -/** - * request topup transaction to komodo - * - * @param {string} xid - * @param {string} requestId - * @param {string} destination - * @param {string} productName - * @param {string} reverseUrl - */ -module.exports = async ( - xid, - requestId, - destination, - productName, - reverseUrl, -) => { - logger.verbose(`${MODULE_NAME} 4AD4DF41: topup to komodo`, { - requestId, destination, productName, xid, - }); - - const params = { - request_id: requestId, - terminal_name: config.komodo_http_get_x.terminal_name, - password: config.komodo_http_get_x.password, - destination, - product_name: productName, - reverse_url: reverseUrl, - }; - - try { - const response = await client.get('/topup', { - params, - }); - if (!response) { - throw new Error(`${MODULE_NAME} 6CE3E06E: Empty response from komodo`); - } - if (!response.data) { - throw new Error(`${MODULE_NAME} F236476F: Empty response data from komodo`); - } - - return response.data; - } catch (err) { - logger.warn(`${MODULE_NAME} 48BAA6B7: Exception`, { - xid, - requestId, - destination, - productName, - message: err.message, - }); - throw err; - } -}; diff --git a/lib/http-server/routers/postpaid-products/index.js b/lib/http-server/routers/postpaid-products/index.js deleted file mode 100644 index 3901983..0000000 --- a/lib/http-server/routers/postpaid-products/index.js +++ /dev/null @@ -1,80 +0,0 @@ -const MODULE_NAME = 'HTTP-SERVER.ROUTER.POSTPAID-PRODUCTS'; - -const express = require('express'); -const logger = require('tektrans-logger'); - -const configData = require('../../../config/data'); -const configSaveProduct = require('../../../config/save-postpaid-product'); -const configRemoveProduct = require('../../../config/remove-postpaid-product'); - -const router = express.Router(); - -module.exports = router; - -const pageIndex = async (req, res) => { - const { xid } = res.locals; - try { - logger.verbose(`${MODULE_NAME} 24D7D9B4: get postpaid product configuration`, { xid }); - const products = (await configData.all()).postpaid_products || {}; - res.json({ error: false, message: 'OK', result: products }); - } catch (e) { - logger.warn(`${MODULE_NAME} 1DB45AC5: Exception.`, { - xid, eMessage: e.message, eCode: e.code, - }); - res.status(500).json({ - error: true, - error_code: e.code, - message: e.message, - }); - } -}; - -const pageSave = async (req, res) => { - const { xid } = res.locals; - const { name, remote = null, active = 0 } = req.body; - try { - logger.verbose(`${MODULE_NAME} A083E9DC: save postpaid product configuration`, { xid, data: req.body }); - - const params = { - name, - remote, - active, - }; - await configSaveProduct(xid, name, params); - res.json({ error: false, message: 'OK' }); - } catch (e) { - logger.warn(`${MODULE_NAME} 88B9218F: Exception.`, { - xid, eMessage: e.message, eCode: e.code, - }); - res.status(500).json({ - error: true, - error_code: e.code, - message: e.message, - }); - } -}; - -const pageRemove = async (req, res) => { - const { xid } = res.locals; - const { name } = req.body; - try { - logger.verbose(`${MODULE_NAME} 7AD392AE: remove postpaid product configuration`, { xid, name }); - - await configRemoveProduct(xid, name); - res.json({ error: false, message: 'OK' }); - } catch (e) { - logger.warn(`${MODULE_NAME} F714088B: Exception.`, { - xid, eMessage: e.message, eCode: e.code, - }); - res.status(500).json({ - error: true, - error_code: e.code, - message: e.message, - }); - } -}; - -router.get('/', [express.json()], pageIndex); - -router.post('/save', [express.json()], pageSave); -router.post('/remove', [express.json()], pageRemove); diff --git a/lib/http-server/routers/updates/index.js b/lib/http-server/routers/updates/index.js index 1bbf3ac..beb2ef1 100644 --- a/lib/http-server/routers/updates/index.js +++ b/lib/http-server/routers/updates/index.js @@ -26,7 +26,7 @@ const pageUpdate = async (req, res) => { } try { - logger.verbose(`${MODULE_NAME} 9E5C70C8: update from komodo`, { xid, data }); + logger.verbose(`${MODULE_NAME} 9E5C70C8: update from sds`, { xid, data }); const params = { id: data.request_id, rc: data.rc, diff --git a/lib/pull/get-inquiry.js b/lib/pull/get-inquiry.js deleted file mode 100644 index 00aac65..0000000 --- a/lib/pull/get-inquiry.js +++ /dev/null @@ -1,70 +0,0 @@ -const MODULE_NAME = 'PULL.GET-INQUIRY'; - -const logger = require('tektrans-logger'); -const axios = require('axios').default; -const uniqid = require('uniqid'); -const config = require('../config'); -const configData = require('../config/data'); -const actions = require('../actions'); - -const client = axios.create({ - baseURL: config.core.url, - timeout: config.core.request_timeout_ms, - headers: { - 'x-access-token': config.core.access_token, - }, -}); - -let onPull = false; - -/** - * pull unprocessed inquiry transaction from core - */ -module.exports = async () => { - logger.verbose(`${MODULE_NAME} 64E2EFDE: Pull inquiry transaction from core`); - if (onPull) { - logger.verbose(`${MODULE_NAME} EECB3ECC: Pull inquiry already running`); - return false; - } - onPull = true; - - const xid = uniqid(); - - try { - const products = await configData.getActiveProductPostpaidArray(xid); - const response = await client.post('/transactions/inquiry-pull', { - gateway: { - name: `${config.name}-postpaid`, - url: `${config.url}:${config.port}/apikey/${config.apikey}/postpaid`, - postpaid: 1, - }, - products, - }); - if (response.data.error) { - logger.info(`${MODULE_NAME} E082E007: Error when pulling inquiry transaction`, { - xid, - message: response.data.message, - error: response.data.error, - }); - } - - if (!response.data.result) { - logger.info(`${MODULE_NAME} 72C1FAC5: Empty inquiry transaction result`, { - xid, - result: response.data.result, - }); - return null; - } - - await actions.inquiry(xid, response.data.result); - } catch (e) { - logger.warn(`${MODULE_NAME} 1E5D9D56: Exception`, { - xid, - message: e.message, - code: e.code, - }); - } finally { - onPull = false; - } - return true; -}; diff --git a/lib/pull/get-payment.js b/lib/pull/get-payment.js deleted file mode 100644 index a7587be..0000000 --- a/lib/pull/get-payment.js +++ /dev/null @@ -1,70 +0,0 @@ -const MODULE_NAME = 'PULL.GET-PAYMENT'; - -const logger = require('tektrans-logger'); -const axios = require('axios').default; -const uniqid = require('uniqid'); -const config = require('../config'); -const configData = require('../config/data'); -const actions = require('../actions'); - -const client = axios.create({ - baseURL: config.core.url, - timeout: config.core.request_timeout_ms, - headers: { - 'x-access-token': config.core.access_token, - }, -}); - -let onPull = false; - -/** - * pull unprocessed payment transaction from core - */ -module.exports = async () => { - logger.verbose(`${MODULE_NAME} 68CB1245: Pull payment transaction from core`); - if (onPull) { - logger.verbose(`${MODULE_NAME} 576C1D1A: Pull payment already running`); - return false; - } - onPull = true; - - const xid = uniqid(); - - try { - const products = await configData.getActiveProductPostpaidArray(xid); - const response = await client.post('/transactions/payment-pull', { - gateway: { - name: `${config.name}-postpaid`, - url: `${config.url}:${config.port}/apikey/${config.apikey}/postpaid`, - postpaid: 1, - }, - products, - }); - if (response.data.error) { - logger.info(`${MODULE_NAME} E3093F6D: Error when pulling payment transaction`, { - xid, - message: response.data.message, - error: response.data.error, - }); - } - - if (!response.data.result) { - logger.info(`${MODULE_NAME} 230E9E0F: Empty payment transaction result`, { - xid, - result: response.data.result, - }); - return null; - } - - await actions.pay(xid, response.data.result); - } catch (e) { - logger.warn(`${MODULE_NAME} 7E6D9444: Exception`, { - xid, - message: e.message, - code: e.code, - }); - } finally { - onPull = false; - } - return true; -}; diff --git a/lib/pull/run.js b/lib/pull/run.js index 9d818b6..ae953d3 100644 --- a/lib/pull/run.js +++ b/lib/pull/run.js @@ -2,9 +2,7 @@ const MODULE_NAME = 'PULL.RUN'; const logger = require('tektrans-logger'); const config = require('../config'); -const getInquiry = require('./get-inquiry'); const getPrepaid = require('./get-prepaid'); -const getPayment = require('./get-payment'); /** * Run pulling schedule @@ -16,7 +14,5 @@ module.exports = async () => { setInterval(() => { logger.verbose(`${MODULE_NAME} 06B8C652: Pull run`); getPrepaid(); - getInquiry(); - getPayment(); }, config.pull_interval_ms); };