UNPKG

@syntropysoft/praetorian

Version:

Praetorian CLI – A universal multi-environment configuration validator for DevSecOps teams. Validate, compare, and secure YAML/ENV files with ease.

116 lines 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BasePlugin = void 0; /** * Base class for all Praetorian plugins * * Plugins extend this class to provide validation rules * and audit capabilities for specific domains. */ class BasePlugin { constructor(metadata) { this.rules = []; this.metadata = metadata; this.initializeRules(); } /** * Get plugin metadata */ getMetadata() { return this.metadata; } /** * Get all validation rules for this plugin */ getRules() { return this.rules.filter(rule => rule.enabled); } /** * Get a specific rule by ID */ getRule(ruleId) { return this.rules.find(rule => rule.id === ruleId && rule.enabled); } /** * Validate a configuration using this plugin's rules */ async validate(config, context) { const errors = []; const warnings = []; const metadata = { plugin: this.metadata.name, version: this.metadata.version, rulesChecked: 0, rulesPassed: 0, rulesFailed: 0 }; for (const rule of this.getRules()) { try { const result = await this.executeRule(rule, config, context); if (result.success) { metadata['rulesPassed']++; } else { if (rule.severity === 'error') { errors.push(...result.errors); } else { warnings.push(...result.warnings); } metadata['rulesFailed']++; } metadata['rulesChecked']++; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; errors.push({ code: 'PLUGIN_ERROR', message: `Plugin ${this.metadata.name} failed to execute rule ${rule.id}: ${errorMessage}`, severity: 'error', context: { ruleId: rule.id, plugin: this.metadata.name } }); metadata['rulesFailed']++; } } return { success: errors.length === 0, errors, warnings, metadata }; } /** * Add a validation rule to this plugin */ addRule(rule) { this.rules.push(rule); } /** * Enable or disable a rule */ setRuleEnabled(ruleId, enabled) { const rule = this.rules.find(r => r.id === ruleId); if (rule) { rule.enabled = enabled; return true; } return false; } /** * Get plugin health status */ async getHealth() { try { // Basic health check - can be overridden by subclasses return { healthy: true }; } catch (error) { return { healthy: false, message: error instanceof Error ? error.message : 'Unknown health check error' }; } } } exports.BasePlugin = BasePlugin; //# sourceMappingURL=BasePlugin.js.map