UNPKG

@flamesshield/rules-engine

Version:

Independent rules engine for security analysis of Firebase

72 lines 2.93 kB
import { executeRules, createRuleExecutionContext } from '../rule-engine/index.js'; import { generateSARIF } from '../sarif-generator/index.js'; /** * Generate a unique scan ID */ export function generateScanId() { return `scan_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; } /** * Analyze a project using the configured rules */ export async function analyzeProject(projectId, projectInfo, rules) { const scanId = generateScanId(); const timestamp = new Date().toISOString(); console.log(`Starting analysis for project ${projectId} with scan ID ${scanId}`); try { // Create execution context const context = createRuleExecutionContext(projectInfo, rules); // Execute rules const ruleResults = await executeRules(context); // Create analysis result const analysisResult = { status: 'finished', scanId: scanId, project_id: projectId, timestamp, total_rules: rules.length, triggered_rules: ruleResults.filter(r => r.triggered).length, results: ruleResults }; const summary = { total_rules: rules.length, triggered_rules: ruleResults.filter(r => r.triggered).length, critical_issues: ruleResults.filter(r => r.triggered && r.severity === 'critical').length, high_issues: ruleResults.filter(r => r.triggered && r.severity === 'high').length, medium_issues: ruleResults.filter(r => r.triggered && r.severity === 'medium').length, low_issues: ruleResults.filter(r => r.triggered && r.severity === 'low').length }; console.log(`Analysis completed for project ${projectId}:`, summary); return analysisResult; } catch (error) { console.error(`Analysis failed for project ${projectId}:`, error); throw error; } } /** * Analyze project and generate SARIF output */ export async function analyzeProjectWithSARIF(projectId, projectInfo, rules) { const analysis = await analyzeProject(projectId, projectInfo, rules); const sarif = generateSARIF(analysis); return { analysis, sarif }; } /** * Get analysis summary statistics */ export function getAnalysisSummary(result) { const triggeredResults = result.results.filter(r => r.triggered); return { total_issues: triggeredResults.length, severity_breakdown: { critical: triggeredResults.filter(r => r.severity === 'critical').length, high: triggeredResults.filter(r => r.severity === 'high').length, medium: triggeredResults.filter(r => r.severity === 'medium').length, low: triggeredResults.filter(r => r.severity === 'low').length }, completion_rate: result.total_rules > 0 ? (result.results.length / result.total_rules) * 100 : 0 }; } //# sourceMappingURL=index.js.map