@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
JavaScript
;
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