UNPKG

@mcp-shark/mcp-shark

Version:

Aggregate multiple Model Context Protocol (MCP) servers into a single unified interface with a powerful monitoring UI. Prov deep visibility into every request and response.

99 lines (86 loc) 3.04 kB
/** * Utility functions for normalizing scan data from various API response formats */ export function getScanValue(scan, path) { const paths = path.split('.'); let value = scan; for (const p of paths) { if (value && typeof value === 'object' && p in value) { value = value[p]; } else { return null; } } return value; } export function normalizeScanData(scan) { const actualScan = scan.result || scan.data || scan; const scanId = getScanValue(scan, 'result.id') || getScanValue(scan, 'id') || getScanValue(scan, 'scan_id') || getScanValue(scan, 'data.id') || getScanValue(scan, 'data.scan_id') || (actualScan && actualScan.id) || (actualScan && actualScan.scan_id); const serverName = scan.serverName || // Check top-level first (for cached scans) scan.server_name || getScanValue(scan, 'result.mcp_server_data.server.name') || getScanValue(scan, 'mcp_server_data.server.name') || getScanValue(scan, 'server.name') || getScanValue(scan, 'data.server.name') || getScanValue(scan, 'data.data.server.name') || (scan.server && scan.server.name) || // Check nested server object 'Unknown Server'; const status = getScanValue(scan, 'result.status') || getScanValue(scan, 'status') || getScanValue(scan, 'data.status'); const overallRiskLevel = getScanValue(scan, 'result.overall_risk_level') || getScanValue(scan, 'overall_risk_level') || getScanValue(scan, 'data.overall_risk_level') || getScanValue(scan, 'data.data.overall_risk_level'); const createdAt = getScanValue(scan, 'result.created_at') || getScanValue(scan, 'created_at') || getScanValue(scan, 'data.created_at') || getScanValue(scan, 'data.data.created_at'); const updatedAt = getScanValue(scan, 'result.updated_at') || getScanValue(scan, 'updated_at') || getScanValue(scan, 'data.updated_at') || getScanValue(scan, 'data.data.updated_at'); let analysisResult = getScanValue(scan, 'result.analysis_result') || getScanValue(scan, 'analysis_result') || getScanValue(scan, 'data.analysis_result') || getScanValue(scan, 'data.data.analysis_result') || getScanValue(scan, 'data.data.data.analysis_result'); if (!analysisResult && actualScan && typeof actualScan === 'object') { if (actualScan.tool_findings || actualScan.prompt_findings || actualScan.resource_findings) { analysisResult = actualScan; } if (!analysisResult && actualScan.analysis_result) { analysisResult = actualScan.analysis_result; } } const serverData = getScanValue(scan, 'result.mcp_server_data.server') || getScanValue(scan, 'mcp_server_data.server') || getScanValue(scan, 'server') || getScanValue(scan, 'data.server') || getScanValue(scan, 'data.data.server') || getScanValue(scan, 'mcp_server_data'); return { scanId, serverName, status, overallRiskLevel, createdAt, updatedAt, analysisResult, serverData, }; }