/// <reference types="node" />
import { EventEmitter } from 'events';
import { ThreatIndicator } from '../types';
export interface WebhookConfig {
    id: string;
    name: string;
    url: string;
    secret: string;
    events: WebhookEvent[];
    headers?: Record<string, string>;
    timeout?: number;
    retries?: number;
    retryDelay?: number;
    enabled: boolean;
    filters?: WebhookFilter[];
    rateLimit?: {
        maxRequests: number;
        windowMs: number;
    };
}
export type WebhookEvent = 'threat.detected' | 'threat.high_confidence' | 'threat.critical' | 'feed.updated' | 'feed.error' | 'system.alert' | 'batch.completed' | 'correlation.completed';
export interface WebhookFilter {
    field: string;
    operator: 'equals' | 'contains' | 'greater_than' | 'less_than' | 'regex';
    value: string | number;
}
export interface WebhookPayload {
    id: string;
    event: WebhookEvent;
    timestamp: string;
    data: any;
    metadata: {
        source: string;
        version: string;
        environment: string;
    };
}
export interface WebhookDelivery {
    id: string;
    webhookId: string;
    event: WebhookEvent;
    payload: WebhookPayload;
    attempt: number;
    status: 'pending' | 'success' | 'failed' | 'retrying';
    responseCode?: number;
    responseTime?: number;
    error?: string;
    createdAt: Date;
    deliveredAt?: Date;
    nextRetryAt?: Date;
}
export declare class WebhookManager extends EventEmitter {
    private webhooks;
    private deliveries;
    private rateLimiters;
    private retryQueue;
    private retryTimer?;
    constructor();
    registerWebhook(config: WebhookConfig): void;
    unregisterWebhook(webhookId: string): boolean;
    updateWebhook(webhookId: string, updates: Partial<WebhookConfig>): boolean;
    triggerEvent(event: WebhookEvent, data: any, metadata?: any): Promise<void>;
    private deliverWebhook;
    private sendWebhook;
    private handleDeliveryFailure;
    private startRetryProcessor;
    private processRetryQueue;
    private checkRateLimit;
    private passesFilters;
    private getFieldValue;
    private evaluateFilter;
    private generateSignature;
    verifySignature(secret: string, payload: WebhookPayload, signature: string): boolean;
    private generateId;
    private validateWebhookConfig;
    getWebhookStats(webhookId?: string): any;
    getDeliveryHistory(webhookId?: string, limit?: number): WebhookDelivery[];
    cleanupDeliveries(maxAge?: number): number;
    shutdown(): void;
}
export declare class WebhookEventBuilder {
    static threatDetected(result: any, target: string): {
        event: WebhookEvent;
        data: any;
    };
    static highConfidenceThreat(indicator: ThreatIndicator, target: string): {
        event: WebhookEvent;
        data: any;
    };
    static feedError(feedName: string, error: string): {
        event: WebhookEvent;
        data: any;
    };
    static batchCompleted(summary: any): {
        event: WebhookEvent;
        data: any;
    };
}
export declare function createWebhookManager(presets?: {
    slack?: {
        url: string;
        events?: WebhookEvent[];
    };
    discord?: {
        url: string;
        events?: WebhookEvent[];
    };
    teams?: {
        url: string;
        events?: WebhookEvent[];
    };
    custom?: WebhookConfig[];
}): WebhookManager;
//# sourceMappingURL=WebhookManager.d.ts.map