low-code-service
Version:
to handle workflow execution, handlebars execution and condition execution for low code service
69 lines (57 loc) • 2.54 kB
text/typescript
import { cleanHandleBarTemplate, getTemplateData } from '../handlebars/handlebars-handler';
import { validateDataUsingFilters } from '../condition-executor/condition-handler';
import { GetWorkFlowRequestData } from './types';
function convertToString(data: any) {
if (typeof data === 'string') {
return data;
}
return JSON.stringify(data);
}
export const getRequestData = (apiData: GetWorkFlowRequestData, params) => {
const { headerTemplate, requestTemplate, urlTemplate } = apiData;
let compiledHeaders = getTemplateData(convertToString(headerTemplate) || '', params);
compiledHeaders = cleanHandleBarTemplate(compiledHeaders, '{}');
compiledHeaders = JSON.parse(compiledHeaders);
let compiledRequestBody = getTemplateData(convertToString(requestTemplate) || '', params);
compiledRequestBody = cleanHandleBarTemplate(compiledRequestBody, '{}');
compiledRequestBody = JSON.parse(compiledRequestBody);
let compiledUrl = getTemplateData(convertToString(urlTemplate) || '', params);
compiledUrl = cleanHandleBarTemplate(compiledUrl, '');
let isFormData = false;
if (compiledHeaders) {
const contentType = compiledHeaders['Content-Type'] || compiledHeaders['content-type'];
if (contentType && contentType.includes('application/x-www-form-urlencoded')) {
isFormData = true;
}
}
return {
headers: compiledHeaders,
[isFormData ? 'form': 'body']: compiledRequestBody,
url: compiledUrl,
};
}
const getRequestBody = (obj) => {
if (!obj) {
return '';
}
let strToReturn = '';
for (const key in obj) {
strToReturn += ` -d '${key}=${obj[key]}'`;
}
return strToReturn;
}
export const getCurlCommand = (apiData: GetWorkFlowRequestData, params) => {
try {
const { method } = apiData;
const { headers: compiledHeaderTemplate, body: compiledRequestTemplate, url: compiledUrl, form: compiledFormData } = getRequestData(apiData, params);
const finalHeaders = Object.keys(compiledHeaderTemplate).reduce((acc, curr) => {
acc+=(` -H '${curr}:${compiledHeaderTemplate[curr]}'`);
return acc;
}, '');
const body = compiledFormData ? `${getRequestBody(compiledFormData)}` : `-d '${JSON.stringify(compiledRequestTemplate)}'`;
const curlCommand = `curl -X ${method} ${finalHeaders} ${body} ${compiledUrl}`;
return curlCommand;
} catch (err) {
throw new Error('Failed to generate CURL');
}
}