UNPKG

raas-proxy

Version:

Rule as a Service (RaaS), change business rules on the fly from any browser. Quick integration, parallel execution, approval workflow and more..

85 lines (68 loc) 2.28 kB
//Author: Bobby Thomas (bobtxt@gmail.com) let axios = require('axios'); module.exports = function (subscribeToken, proxyBearerToken, learningMode=false) { console.log('RaaS Initializing ..'); let ruleEventLists = new Map(); if(!learningMode){ getRuleToTrigger((data)=> { ruleEventLists = data; }); } return async function (req, res, next) { next(); //Return immidiatily so that the actual Api call is not delayed if(!req.body){ console.log('RaaS Warning: Make sure you have a "bodyParser" middleware installed.'); } let pattern = req.originalUrl.toLowerCase().replace(/\/[0-9]+/g,''); let match = `${req.method.toLowerCase()}:${pattern}`; let matchingRules = ruleEventLists.get(match); if(learningMode || (matchingRules && matchingRules.length > 0)){ try { let params = { //rules: matchingRules.map(x=> ruleLists.get(x)), url: req.originalUrl.toLowerCase(), method: req.method, body: JSON.stringify(req.body), param: JSON.stringify(req.params), subscription: JSON.stringify(subscribeToken), token: JSON.stringify(proxyBearerToken), }; let a = await sendToPolicyEngine(params); console.log(a); } catch(ex){ console.log('RaaS Error: ', ex); } } else{ //console.log('RaaS Info: No rules captured.'); } console.log('------------ Scanned by RaaS ------------'); } async function sendToPolicyEngine(params){ let url = 'https://7ijcibrpvf.execute-api.us-east-1.amazonaws.com/prod'; const response = await axios.post(url, params); return response.data; } async function getRuleToTrigger(cb){ let url = 'https://gr4m466yx1.execute-api.us-east-1.amazonaws.com/prod'; const response = await axios.get(url); let ruleEventLists = new Map(); response.data.map(x=>{ ruleEventLists.set(x, 0); }); cb(ruleEventLists); } async function longPolling(){ let url = 'https://d5h5fxomug.execute-api.us-east-1.amazonaws.com/prod'; const response = await axios.get(url); //After 20 seconds this line returns console.log(response.data); if(response.data.available){ dataAvailable(response.data); } //longPolling(); } function dataAvailable(data){ //Trigger Transmute Action by calling local API } }