@flamesshield/rules-engine
Version:
Independent rules engine for security analysis of Firebase
72 lines • 2.93 kB
JavaScript
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