diff --git a/elevate-survey/constants/routes.js b/elevate-survey/constants/routes.js new file mode 100644 index 00000000..2fa501d7 --- /dev/null +++ b/elevate-survey/constants/routes.js @@ -0,0 +1,702 @@ +module.exports = { + routes: [ + { + sourceRoute: '/samiksha/v1/admin/createIndex/solutions', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/admin/createIndex/solutions', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/admin/createIndex/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/admin/createIndex/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/polls/create', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/polls/create', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/polls/list', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/polls/list', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/polls/getPollQuestions/:id', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/polls/getPollQuestions/:id', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/pollSubmissions/make/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/pollSubmissions/make/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/files/preSignedUrls', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/files/preSignedUrls', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/files/getDownloadableUrl', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/files/getDownloadableUrl', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/create', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/create', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/details/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/details/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/details', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/details', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/verifyLink', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/verifyLink', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/verifyLink/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/verifyLink/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/fetchLink', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/fetchLink', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/fetchLink/:id', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/fetchLink/:id', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/update', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/update', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/update/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/update/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/getDetails', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/getDetails', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/getDetails/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/getDetails/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/list', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/list', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/isTargetedBasedOnUserProfile', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/isTargetedBasedOnUserProfile', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/isTargetedBasedOnUserProfile/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/isTargetedBasedOnUserProfile/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/detailsBasedOnRoleAndLocation/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/detailsBasedOnRoleAndLocation/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/detailsBasedOnRoleAndLocation/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/detailsBasedOnRoleAndLocation/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/forUserRoleAndLocation', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/forUserRoleAndLocation', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/addEntitiesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/addEntitiesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/addEntitiesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/addEntitiesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/addRolesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/addRolesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/addRolesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/addRolesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/removeEntitiesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/removeEntitiesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/removeEntitiesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/removeEntitiesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/removeRolesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/removeRolesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/removeRolesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/removeRolesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/solutions/targetedSolutions', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/solutions/targetedSolutions', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/addEntitiesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/addEntitiesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/addEntitiesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/addEntitiesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/addRolesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/addRolesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/addRolesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/addRolesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/removeEntitiesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/removeEntitiesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/removeEntitiesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/removeEntitiesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/removeRolesInScope', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/removeRolesInScope', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/removeRolesInScope/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/removeRolesInScope/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/join', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/join', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/join/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/join/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/create', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/create', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/update', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/update', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/update/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/update/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/details', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/details', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/details/:id', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/details/:id', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/programs/list', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/programs/list', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/importSurveryTemplateToSolution/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/importSurveryTemplateToSolution/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/importSurveryTemplateToSolution', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/importSurveryTemplateToSolution', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/getLink/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/getLink/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/getLink/', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/getLink/', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/createSolutionTemplate', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/createSolutionTemplate', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/mapSurverySolutionToProgram/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/mapSurverySolutionToProgram/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/mapSurverySolutionToProgram', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/mapSurverySolutionToProgram', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/userAssigned', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/userAssigned', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/details/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/details/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveys/details/', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveys/details/', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveySubmissions/update/:id', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveySubmissions/update/:id', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveySubmissions/update', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveySubmissions/update', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveySubmissions/getStatus/:id', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveySubmissions/getStatus/:id', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/surveySubmissions/getStatus', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveySubmissions/getStatus', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/surveySubmissions/list', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveySubmissions/list', + type: 'POST' + }, + }, + { + sourceRoute: '/samiksha/v1/surveySubmissions/isAllowed/:id', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveySubmissions/isAllowed/:id', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/surveySubmissions/isAllowed', + type: 'GET', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/surveySubmissions/isAllowed', + type: 'GET' + }, + }, + { + sourceRoute: '/samiksha/v1/questions/bulkCreate', + type: 'POST', + inSequence: false, + orchestrated: false, + targetRoute: { + path: '/samiksha/v1/questions/bulkCreate', + type: 'POST' + }, + }, + ], +} + +/* const fs = require('fs') +const modifiedArray = [].map((item) => ({ + ...item, + targetRoute: { + path: item.sourceRoute, + type: item.type, + }, +})) +const modifiedArrayJSON = JSON.stringify(modifiedArray, null, 2) +const filePath = 'modifiedArray.json' +fs.writeFile(filePath, modifiedArrayJSON, 'utf8', (err) => { + if (err) { + console.error('Error writing to file:', err) + } else { + console.log('Modified array has been written to', filePath) + } +}) */ diff --git a/elevate-survey/controllers/orchestrationController.js b/elevate-survey/controllers/orchestrationController.js new file mode 100644 index 00000000..e9513d94 --- /dev/null +++ b/elevate-survey/controllers/orchestrationController.js @@ -0,0 +1,13 @@ +const routesConfig = require('../constants/routes') +const samikshaController = require('./project') +const orchestrationHandler = async (req, res, responses) => { + console.log(req.targetPackages, req.inSequence, req.orchestrated, req.sourceRoute, responses) + console.log(req.body) + const selectedRouteConfig = routesConfig.routes.find((obj) => obj.sourceRoute === req.sourceRoute) + return await samikshaController[selectedRouteConfig.targetRoute.functionName](req, res, responses) +} + +const orchestrationController = { + orchestrationHandler, +} +module.exports = orchestrationController diff --git a/elevate-survey/controllers/project.js b/elevate-survey/controllers/project.js new file mode 100644 index 00000000..31bcf882 --- /dev/null +++ b/elevate-survey/controllers/project.js @@ -0,0 +1,29 @@ +// const routeConfigs = require('../constants/routes') +// const requesters = require('../utils/requester') +// const requestParser = require('../utils/requestParser') + +// const createUser = async (req, res, responses) => { +// const selectedConfig = routeConfigs.routes.find((obj) => obj.sourceRoute === req.sourceRoute) +// return await requesters.post(req.baseUrl, selectedConfig.targetRoute.path, req.body) +// } +// const updateUser = async (req, res, responses) => { +// const selectedConfig = routeConfigs.routes.find((obj) => obj.sourceRoute === req.sourceRoute) + +// //const filteredRequestBody = requestParser.transformUpdateUserBody(req.body) +// return await requesters.patch(req.baseUrl, selectedConfig.targetRoute.path, req.body, req.headers) +// } + +// const entityTypeRead = async (req, res, responses) => { +// const selectedConfig = routeConfigs.routes.find((obj) => obj.sourceRoute === req.sourceRoute) +// return await requesters.post(req.baseUrl, selectedConfig.targetRoute.path, req.body, { +// 'X-auth-token': req.headers['x-auth-token'], +// }) +// } + +const userController = { + // createUser, + // updateUser, + // entityTypeRead, +} + +module.exports = userController diff --git a/elevate-survey/index.js b/elevate-survey/index.js new file mode 100644 index 00000000..7dde7460 --- /dev/null +++ b/elevate-survey/index.js @@ -0,0 +1,37 @@ +const express = require('express') +const router = express.Router() +const routes = require('./constants/routes') +const packageRouter = require('./router') + +const getDependencies = () => { + return ['kafka', 'kafka-connect'] +} + +const getPackageMeta = () => { + return { + basePackageName: 'samiksha', + packageName: 'elevate-survey', + } +} + +const createPackage = (options) => { + return { + router: () => { + console.log('router') + }, + endpoints: [], + dependencies: [], + } +} + +router.get('/', (req, res) => { + res.send('Hello, world! From Elevate Survey') +}) + +module.exports = { + dependencies: getDependencies(), + routes, + createPackage, + packageMeta: getPackageMeta(), + packageRouter, +} diff --git a/elevate-survey/package.json b/elevate-survey/package.json new file mode 100644 index 00000000..2d683f2b --- /dev/null +++ b/elevate-survey/package.json @@ -0,0 +1,18 @@ +{ + "name": "elevate-survey", + "version": "1.0.7", + "description": "Npm package for Elevate-survey service integration with Interface service", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "PraveenDass", + "license": "ISC", + "dependencies": { + "axios": "^1.4.0", + "express": "^4.18.2", + "lodash": "^4.17.21", + "node-fetch": "^2.7.0", + "path-to-regexp": "^6.2.1" + } +} diff --git a/elevate-survey/router/index.js b/elevate-survey/router/index.js new file mode 100644 index 00000000..a8b43a85 --- /dev/null +++ b/elevate-survey/router/index.js @@ -0,0 +1,10 @@ +const { passThroughRequester } = require('../utils/requester') +const { orchestrationHandler } = require('../controllers/orchestrationController') +const packageRouter = async (req, res, responses) => { + const response = req.orchestrated + ? await orchestrationHandler(req, res, responses) + : await passThroughRequester(req, res) + return response +} + +module.exports = packageRouter diff --git a/elevate-survey/utils/pathParamSetter.js b/elevate-survey/utils/pathParamSetter.js new file mode 100644 index 00000000..130b1fe5 --- /dev/null +++ b/elevate-survey/utils/pathParamSetter.js @@ -0,0 +1,6 @@ +exports.pathParamSetter = (targetPath, params) => { + return targetPath.replace(/:\w+/g, (match) => { + const fieldName = match.substring(1) + return params[fieldName] || match + }) +} diff --git a/elevate-survey/utils/patternMatcher.js b/elevate-survey/utils/patternMatcher.js new file mode 100644 index 00000000..cc70b819 --- /dev/null +++ b/elevate-survey/utils/patternMatcher.js @@ -0,0 +1,16 @@ +exports.matchPathsAndExtractParams = (pattern, url) => { + const paramNames = [] + const regexPattern = new RegExp( + pattern.replace(/:(\w+)/g, (_, paramName) => { + paramNames.push(paramName) + return '([a-zA-Z0-9-]+)' + }) + ) + const matchResult = url.match(regexPattern) + if (!matchResult) return false + const params = {} + for (let i = 0; i < paramNames.length; i++) { + params[paramNames[i]] = matchResult[i + 1] + } + return params +} \ No newline at end of file diff --git a/elevate-survey/utils/requestParser.js b/elevate-survey/utils/requestParser.js new file mode 100644 index 00000000..ecd12e5a --- /dev/null +++ b/elevate-survey/utils/requestParser.js @@ -0,0 +1,6 @@ +const _ = require('lodash') + +// exports.transformUpdateUserBody = (requestBody) => { +// const allowedKeys = ['name', 'email', 'image', 'location', 'about', 'preferred_language'] +// return _.pick(requestBody, allowedKeys) +// } diff --git a/elevate-survey/utils/requester.js b/elevate-survey/utils/requester.js new file mode 100644 index 00000000..2f732e14 --- /dev/null +++ b/elevate-survey/utils/requester.js @@ -0,0 +1,121 @@ +const http = require('http') +const https = require('https') +const { matchPathsAndExtractParams } = require('./patternMatcher') +const routesConfig = require('../constants/routes') +const { pathParamSetter } = require('./pathParamSetter') +const axios = require('axios') +const fetch = require('node-fetch') + +const handleInterfaceError = (res, err) => { + console.log('Error: ', err) + res.writeHead(500, { 'Content-Type': 'text/plain' }) + res.end('Interface Server Error') +} + +const passThroughRequester = async (req, res) => { + try { + const sourceBaseUrl = req.protocol + '://' + req.headers.host + '/' + const sourceUrl = new URL(req.originalUrl, sourceBaseUrl) + const route = routesConfig.routes.find((route) => route.sourceRoute === req.sourceRoute) + const params = matchPathsAndExtractParams(route.sourceRoute, req.originalUrl) + console.log(params,'params') + const targetRoute = pathParamSetter(route.targetRoute.path, params) + console.log(route.targetRoute.path, params,'route.targetRoute.path, params') + console.log(targetRoute,'targetRoute') + console.log(req.baseUrl,'req.baseUrl') + const parsedUrl = new URL(targetRoute, req.baseUrl) + const options = { + method: req.method, + headers: req.headers, + hostname: parsedUrl.hostname, + port: parsedUrl.port, + path: parsedUrl.pathname + sourceUrl.search, + } + console.log({ + sourceBaseUrl, + sourceUrl, + route, + params, + targetRoute, + parsedUrl, + options, + }) + const proxyReq = (parsedUrl.protocol === 'https:' ? https : http).request(options, (proxyRes) => { + res.writeHead(proxyRes.statusCode, proxyRes.headers) + proxyRes.pipe(res, { end: true }) + }) + proxyReq.on('error', (err) => { + handleInterfaceError(res, err) + }) + req.pipe(proxyReq, { end: true }) + } catch (err) { + handleInterfaceError(res, err) + } +} + +const post = (baseUrl, route, requestBody, headers) => { + const url = baseUrl + route + return axios + .post(url, requestBody, { headers }) + .then((response) => response.data) + .catch((error) => { + if (error.response) { + return error.response + } + return error + }) +} +const patch = async (baseUrl, route, requestBody, headers) => { + try { + const url = baseUrl + route + + const options = { + method: 'PATCH', + headers: headers, + body: JSON.stringify(requestBody), + } + + const response = await fetch(url, options) + + const data = await response.json() + return data + } catch (error) { + console.error(error) + throw error + } +} +const axiosPatch = async (baseUrl, route, requestBody, headers) => { + try { + const url = baseUrl + route + console.log(url, requestBody) + const config = { + headers: headers, + } + axios + .patch(url, requestBody, config) + .then((response) => { + // Handle the successful response here + console.log('PATCH request successful:', response.data) + return response.data + }) + .catch((error) => { + // Handle any errors that occurred during the PATCH request + console.error('Error making PATCH request:', error) + if (error.response) { + return error.response + } + return error + }) + } catch (error) { + console.error('Error making PATCH request:', error) + } +} + +const requesters = { + passThroughRequester, + post, + patch, + axiosPatch, +} + +module.exports = requesters \ No newline at end of file