Skip to content

Configuration Validator ​

Validate your ngxsmk-gatekeeper configuration for type errors, performance issues, and security concerns.

Overview ​

The configuration validator helps you:

  • Type Check - Ensure configuration matches expected types
  • Performance Analysis - Identify potential performance bottlenecks
  • Security Recommendations - Get security best practice suggestions
  • Best Practices - Validate against recommended patterns

Quick Start ​

typescript
import { validateConfig } from 'ngxsmk-gatekeeper';

const config = {
  middlewares: [authMiddleware],
  onFail: '/login',
};

const result = validateConfig(config);

if (!result.valid) {
  console.error('Configuration errors:', result.errorIssues);
}

Usage ​

Basic Validation ​

typescript
import { ConfigValidator } from 'ngxsmk-gatekeeper';
import { inject } from '@angular/core';

@Component({...})
export class AppComponent {
  private validator = inject(ConfigValidator);

  ngOnInit() {
    const config = this.getConfig();
    const result = this.validator.validate(config);

    if (!result.valid) {
      console.error('Configuration is invalid:', result.errorIssues);
    }

    if (result.warnings > 0) {
      console.warn('Configuration warnings:', result.warningIssues);
    }
  }
}

Validation Options ​

typescript
const result = this.validator.validate(config, {
  checkTypes: true, // Enable type checking
  checkPerformance: true, // Enable performance analysis
  checkSecurity: true, // Enable security analysis
  checkBestPractices: true, // Enable best practice checks
  maxMiddlewareCount: 10, // Max middlewares before warning
  maxExecutionTime: 100, // Max execution time (ms) before warning
  requireAuth: true, // Require authentication middleware
  requireAuditInProduction: false, // Require audit in production
});

Validation Result ​

typescript
interface ValidationResult {
  valid: boolean; // Whether config is valid
  totalIssues: number; // Total number of issues
  errors: number; // Number of errors
  warnings: number; // Number of warnings
  info: number; // Number of info messages
  issues: ValidationIssue[]; // All issues
  errorIssues: ValidationIssue[]; // Errors only
  warningIssues: ValidationIssue[]; // Warnings only
  infoIssues: ValidationIssue[]; // Info only
  issuesByCategory: {
    // Issues grouped by category
    type: ValidationIssue[];
    performance: ValidationIssue[];
    security: ValidationIssue[];
    'best-practice': ValidationIssue[];
    configuration: ValidationIssue[];
  };
  performance?: PerformanceAnalysis; // Performance analysis
  security?: SecurityAnalysis; // Security analysis
}

Type Checking ​

Validates that configuration matches expected types:

typescript
// ❌ Invalid - middlewares is not an array
const invalid = {
  middlewares: 'not-an-array',
  onFail: '/login',
};

const result = validateConfig(invalid);
// result.valid = false
// result.errorIssues = [
//   {
//     severity: 'error',
//     category: 'type',
//     code: 'MIDDLEWARES_NOT_ARRAY',
//     message: '"middlewares" must be an array',
//     path: 'middlewares',
//   }
// ]

Performance Analysis ​

Analyzes configuration for performance issues:

typescript
const result = validateConfig(config, {
  checkPerformance: true,
  maxMiddlewareCount: 10,
  maxExecutionTime: 100,
});

if (result.performance) {
  console.log('Performance Score:', result.performance.score);
  console.log('Estimated Time:', result.performance.estimatedExecutionTime, 'ms');
  console.log('Bottlenecks:', result.performance.bottlenecks);
}

Performance Recommendations ​

  • Too Many Middlewares - Warns if middleware count exceeds threshold
  • Slow Middleware - Identifies potentially slow middleware
  • Slow Chain - Warns if estimated execution time exceeds threshold
  • Benchmark Recommended - Suggests enabling benchmark mode

Security Analysis ​

Analyzes configuration for security concerns:

typescript
const result = validateConfig(config, {
  checkSecurity: true,
  requireAuth: true,
});

if (result.security) {
  console.log('Security Score:', result.security.score);
  console.log('Missing Features:', result.security.missingFeatures);
  console.log('Risks:', result.security.risks);
}

Security Recommendations ​

  • Missing Authentication - Warns if no auth middleware found
  • Missing CSRF Protection - Suggests CSRF middleware
  • Missing Rate Limiting - Suggests rate limiting
  • Debug in Production - Warns if debug enabled in production
  • Missing Audit Logging - Suggests audit logging for production
  • Insecure Redirect - Warns about insecure redirect paths

Best Practices ​

Validates against recommended patterns:

  • Empty middlewares array
  • Debug mode in development
  • Benchmark in production
  • Compliance mode for complex chains
  • Default onFail paths

Validation Summary ​

Get a formatted summary of validation results:

typescript
const result = this.validator.validate(config);
const summary = this.validator.getSummary(result);
console.log(summary);

Output:

Configuration Validation Summary
========================================
Status: ✓ Valid
Total Issues: 3
  Errors: 0
  Warnings: 2
  Info: 1

Performance Analysis:
  Middleware Count: 5
  Estimated Time: 45ms
  Performance Score: 90/100

Security Analysis:
  Security Score: 75/100
  Missing Features: CSRF protection, Rate limiting

Validate and Throw ​

Validate configuration and throw on errors:

typescript
import { ConfigValidator } from 'ngxsmk-gatekeeper';

const validator = new ConfigValidator();

try {
  validator.validateOrThrow(config);
  console.log('Configuration is valid!');
} catch (error) {
  console.error('Configuration validation failed:', error.message);
}

Integration with CLI ​

The CLI tool uses the validator:

bash
gatekeeper analyze

This will:

  • Analyze route protection
  • Validate configuration
  • Show performance and security recommendations

Custom Validation ​

You can create custom validators:

typescript
import { ValidationIssue, ValidationSeverity, ValidationCategory } from 'ngxsmk-gatekeeper';

function customValidator(config: GatekeeperConfig): ValidationIssue[] {
  const issues: ValidationIssue[] = [];

  // Your custom validation logic
  if (config.middlewares.length === 0) {
    issues.push({
      severity: ValidationSeverity.Error,
      category: ValidationCategory.Configuration,
      code: 'CUSTOM_ERROR',
      message: 'Custom validation failed',
      path: 'middlewares',
    });
  }

  return issues;
}

Best Practices ​

  1. Validate Early - Validate configuration during development
  2. Fix Errors First - Address errors before warnings
  3. Review Warnings - Don't ignore warnings, review them
  4. Use in CI/CD - Add validation to your build pipeline
  5. Monitor Performance - Enable benchmark mode to track actual performance

Next Steps ​

Released under the MIT License.