/**
 * Event Store
 * 웹훅 이벤트 저장 및 관리
 */
import { EventEmitter } from "../shared/event-emitter";
import type { WebhookEvent } from "../types/webhook.types";
import { WebhookEventType } from "../types/webhook.types";
import type { EventFilter, PaginationOptions, SearchResult, StorageConfig } from "./types";
export declare class EventStore extends EventEmitter {
    private config;
    private events;
    private indexByType;
    private indexByDate;
    private indexByProvider;
    private indexByChannel;
    private cleanupInterval;
    private defaultConfig;
    constructor(config?: Partial<StorageConfig>);
    /**
     * 이벤트 저장
     */
    saveEvent(event: WebhookEvent): Promise<void>;
    /**
     * 이벤트 조회
     */
    getEvent(eventId: string): Promise<WebhookEvent | null>;
    /**
     * 필터 조건에 맞는 이벤트 검색
     */
    searchEvents(filter?: EventFilter, pagination?: PaginationOptions): Promise<SearchResult<WebhookEvent>>;
    /**
     * 이벤트 타입별 조회
     */
    getEventsByType(eventType: WebhookEventType, limit?: number): Promise<WebhookEvent[]>;
    /**
     * 이벤트 통계 조회
     */
    getEventStats(timeRange?: {
        start: Date;
        end: Date;
    }): Promise<{
        totalEvents: number;
        eventsByType: Record<WebhookEventType, number>;
        eventsByProvider: Record<string, number>;
        eventsByChannel: Record<string, number>;
        eventsPerHour: Record<string, number>;
    }>;
    /**
     * 오래된 이벤트 정리
     */
    cleanupOldEvents(): Promise<number>;
    /**
     * 중복 이벤트 정리
     */
    cleanupDuplicateEvents(): Promise<number>;
    /**
     * 저장소 통계 조회
     */
    getStorageStats(): {
        totalEvents: number;
        memoryUsage: number;
        indexSizes: {
            byType: number;
            byDate: number;
            byProvider: number;
            byChannel: number;
        };
    };
    /**
     * 인덱스 초기화
     */
    private initializeIndexes;
    /**
     * 인덱스에 이벤트 추가
     */
    private addToIndexes;
    /**
     * 인덱스에서 이벤트 제거
     */
    private removeFromIndexes;
    /**
     * 날짜 범위로 이벤트 ID 조회
     */
    private getEventIdsByDateRange;
    /**
     * 필터 조건 매칭 확인
     */
    private matchesFilter;
    /**
     * 객체 필드 값 가져오기
     */
    private getFieldValue;
    /**
     * 메모리 사용량 추정
     */
    private estimateMemoryUsage;
    /**
     * 메모리 사용량 확인 및 정리
     */
    private checkMemoryUsage;
    /**
     * 이벤트 내용 키 생성 (중복 검사용)
     */
    private generateContentKey;
    /**
     * 정리 작업 시작
     */
    private startCleanupTask;
    /**
     * 파일에 이벤트 추가
     */
    private appendToFile;
    /**
     * 파일에서 데이터 로드
     */
    private loadFromFile;
    /**
     * 파일에 데이터 저장
     */
    private saveToFile;
    /**
     * 이벤트 저장소 종료
     */
    shutdown(): Promise<void>;
}
