/**
 * Event handling utility functions
 */
import { EventEmitter } from 'eventemitter3';
import { WebhookEvent, WebhookEventHandler } from '../types/webhook.types';
/**
 * Event manager class for handling webhook events
 */
export declare class EventManager extends EventEmitter {
    private handlers;
    /**
     * Register event handler
     */
    addHandler<T extends WebhookEvent = WebhookEvent>(eventType: string, handler: WebhookEventHandler<T>): this;
    /**
     * Register one-time event handler
     */
    addOnceHandler<T extends WebhookEvent = WebhookEvent>(eventType: string, handler: WebhookEventHandler<T>): this;
    /**
     * Remove event handler
     */
    removeHandler<T extends WebhookEvent = WebhookEvent>(eventType: string, handler: WebhookEventHandler<T>): this;
    /**
     * Remove all handlers for event type
     */
    removeAllListeners(eventType?: string): this;
    /**
     * Emit event to all handlers
     */
    emitAsync<T extends WebhookEvent = WebhookEvent>(eventType: string, event: T): Promise<void>;
    /**
     * Get registered event types
     */
    getEventTypes(): string[];
    /**
     * Get handler count for event type
     */
    getHandlerCount(eventType: string): number;
    /**
     * Check if event type has handlers
     */
    hasHandlers(eventType: string): boolean;
}
/**
 * Event utilities class
 */
export declare class EventUtils {
    /**
     * Check if event is a message event
     */
    static isMessageEvent(eventType: string): boolean;
    /**
     * Check if event is a group event
     */
    static isGroupEvent(eventType: string): boolean;
    /**
     * Check if event is a friend event
     */
    static isFriendEvent(eventType: string): boolean;
    /**
     * Check if event is a connection event
     */
    static isConnectionEvent(eventType: string): boolean;
    /**
     * Check if event is an error event
     */
    static isErrorEvent(eventType: string): boolean;
    /**
     * Extract message type from event type
     */
    static extractMessageType(eventType: string): string | null;
    /**
     * Extract direction from event type (sent/received)
     */
    static extractDirection(eventType: string): 'sent' | 'received' | null;
    /**
     * Extract target type from event type (user/group)
     */
    static extractTargetType(eventType: string): 'user' | 'group' | null;
    /**
     * Normalize event type
     */
    static normalizeEventType(eventType: string): string;
    /**
     * Create event filter function
     */
    static createEventFilter(criteria: {
        messageTypes?: string[];
        directions?: ('sent' | 'received')[];
        targetTypes?: ('user' | 'group')[];
        sessionIds?: string[];
        userUuids?: string[];
    }): (event: WebhookEvent) => boolean;
    /**
     * Debounce function for event handling
     */
    static debounce<T extends any[]>(func: (...args: T) => void, delay: number): (...args: T) => void;
    /**
     * Throttle function for event handling
     */
    static throttle<T extends any[]>(func: (...args: T) => void, delay: number): (...args: T) => void;
    /**
     * Create rate limiter for events
     */
    static createRateLimiter(maxEvents: number, windowMs: number): {
        canProcess(): boolean;
        getRemainingEvents(): number;
        getResetTime(): number;
    };
    /**
     * Create event aggregator
     */
    static createEventAggregator<T>(windowMs: number, processor: (events: T[]) => void): {
        add(event: T): void;
        flush(): void;
        getQueuedCount(): number;
    };
}
//# sourceMappingURL=event.utils.d.ts.map