import { T_RunnerResults } from '../../types'; import { isHtmlContentType, getContentType, redactImageData, encodeBase64 } from '../../utils'; import htmlTemplateString from './template'; import { walkAndMask } from '../../masking'; const generateHtmlReport = ({ runnerResults, version = '', // Default to empty string if not provided environment = null, // Default environment if not provided runCompletionTime = '', // Default run completion time if not provided secretValues = [] // Default to empty array if not provided }: { runnerResults: T_RunnerResults[]; version?: string; environment?: string | null; runCompletionTime?: string; secretValues?: string[]; }): string => { const resultsWithSummaryAndCleanData = runnerResults.map(({ iterationIndex, results, summary }) => { return { iterationIndex, results: results.map((result) => { const { request, response } = result || {}; const requestContentType = request?.headers ? getContentType(request?.headers) : ''; const responseContentType = response?.headers ? getContentType(response?.headers) : ''; const maskedResult = walkAndMask(result, { secretValues }); return { ...maskedResult, request: { ...maskedResult.request, data: maskedResult.request?.data ? redactImageData(maskedResult.request.data, requestContentType) : maskedResult.request?.data, isHtml: isHtmlContentType(requestContentType) }, response: { ...maskedResult.response, data: maskedResult.response?.data ? redactImageData(maskedResult.response.data, responseContentType) : maskedResult.response?.data, isHtml: isHtmlContentType(responseContentType) } }; }), summary }; }); const htmlString = htmlTemplateString(encodeBase64(JSON.stringify({ results: resultsWithSummaryAndCleanData, version, environment, runCompletionTime }))); return htmlString; }; export { generateHtmlReport };