/**
 * Suppression System Types
 * Defines types for the finding suppression/ignore system
 */
import type { VulnerabilityCategory, VulnerabilitySeverity } from '../types';
/**
 * Suppression configuration file structure
 * Supports .oculum.yaml, .oculum.yml, oculum.config.json, .oculumrc
 */
export interface SuppressionConfig {
    /** Config schema version */
    version: 1;
    /** Suppression rules */
    suppressions?: {
        /** Rule-based suppressions (by category) */
        rules?: RuleSuppression[];
        /** Finding-based suppressions (by hash) */
        findings?: FindingSuppression[];
    };
    /** Path patterns to ignore entirely (glob format) */
    ignore?: string[];
}
/**
 * Suppress all findings of a specific category/rule
 */
export interface RuleSuppression {
    /** Category to suppress (e.g., 'high_entropy_string') */
    category: VulnerabilityCategory;
    /** Reason for suppression (required for audit trail) */
    reason: string;
    /** Optional: Only suppress in specific files (glob patterns) */
    paths?: string[];
    /** Optional: Expiration date (ISO 8601 format) */
    expires?: string;
    /** Optional: Who added this suppression */
    suppressedBy?: string;
    /** Optional: When this was added (ISO 8601 format) */
    suppressedAt?: string;
}
/**
 * Suppress a specific finding by its hash
 */
export interface FindingSuppression {
    /** Finding hash (computed from file path, content, and category) */
    hash: string;
    /** File path where the finding was detected */
    file: string;
    /** Line number (for reference, not used in matching) */
    line?: number;
    /** Reason for suppression (required for audit trail) */
    reason: string;
    /** Optional: Expiration date (ISO 8601 format) */
    expires?: string;
    /** Optional: Who added this suppression */
    suppressedBy?: string;
    /** Optional: When this was added (ISO 8601 format) */
    suppressedAt?: string;
}
/**
 * Inline suppression from code comments
 */
export interface InlineSuppression {
    /** Line number this suppression applies to */
    lineNumber: number;
    /** Type of inline suppression */
    type: 'next-line' | 'same-line' | 'block-start' | 'block-end';
    /** Reason from the comment */
    reason: string;
    /** Optional: Specific rule/category to suppress */
    ruleId?: VulnerabilityCategory;
    /** Original comment text */
    commentText: string;
}
/**
 * Result of checking if a finding is suppressed
 */
export interface SuppressionMatch {
    /** Whether the finding is suppressed */
    suppressed: boolean;
    /** The matching suppression (if any) */
    match?: {
        /** Type of suppression that matched */
        type: 'inline' | 'config-finding' | 'config-rule';
        /** Reason for suppression */
        reason: string;
        /** Expiration date (if any) */
        expires?: string;
        /** Whether the suppression is expired */
        expired?: boolean;
    };
    /** Hash of the finding (always computed) */
    hash: string;
}
/**
 * Suppressed vulnerability with metadata
 */
export interface SuppressedVulnerability {
    /** The original vulnerability */
    vulnerability: {
        id: string;
        filePath: string;
        lineNumber: number;
        category: VulnerabilityCategory;
        severity: VulnerabilitySeverity;
        title: string;
    };
    /** Suppression details */
    suppression: {
        /** Type of suppression that matched */
        type: 'inline' | 'config-finding' | 'config-rule';
        /** Reason for suppression */
        reason: string;
        /** Expiration date (if any) */
        expires?: string;
        /** Finding hash */
        hash: string;
    };
}
/**
 * Result of applying suppressions to findings
 */
export interface SuppressionResult {
    /** Findings that passed through (not suppressed) */
    findings: import('../types').Vulnerability[];
    /** Findings that were suppressed */
    suppressed: SuppressedVulnerability[];
    /** Count of expired suppressions (findings reappear) */
    expiredSuppressions: number;
    /** Statistics */
    stats: {
        /** Total findings before suppression */
        total: number;
        /** Findings suppressed by inline comments */
        inlineSuppressed: number;
        /** Findings suppressed by config (finding hash) */
        configFindingSuppressed: number;
        /** Findings suppressed by config (rule) */
        configRuleSuppressed: number;
        /** Findings that would have been suppressed but suppression expired */
        expired: number;
    };
}
/**
 * Suppression configuration file names (in order of priority)
 */
export declare const SUPPRESSION_CONFIG_FILES: readonly [".oculum.yaml", ".oculum.yml", "oculum.config.json", ".oculumrc"];
/**
 * Default suppression config (empty)
 */
export declare const DEFAULT_SUPPRESSION_CONFIG: SuppressionConfig;
//# sourceMappingURL=types.d.ts.map