/**
 * Endpoint Manager
 * 웹훅 엔드포인트 관리를 위한 고급 기능 제공
 */
import { EventEmitter } from "../shared/event-emitter";
import type { WebhookEndpoint } from "../types/webhook.types";
import { WebhookEventType } from "../types/webhook.types";
import type { EndpointFilter, PaginationOptions, SearchResult, StorageConfig } from "./types";
export declare class EndpointManager extends EventEmitter {
    private config;
    private endpoints;
    private indexByUrl;
    private indexByEvent;
    private indexByStatus;
    private defaultConfig;
    constructor(config?: Partial<StorageConfig>);
    /**
     * 엔드포인트 추가
     */
    addEndpoint(endpoint: WebhookEndpoint): Promise<void>;
    /**
     * 엔드포인트 업데이트
     */
    updateEndpoint(endpointId: string, updates: Partial<WebhookEndpoint>): Promise<WebhookEndpoint>;
    /**
     * 엔드포인트 제거
     */
    removeEndpoint(endpointId: string): Promise<boolean>;
    /**
     * 엔드포인트 조회
     */
    getEndpoint(endpointId: string): Promise<WebhookEndpoint | null>;
    /**
     * URL로 엔드포인트 조회
     */
    getEndpointByUrl(url: string): Promise<WebhookEndpoint | null>;
    /**
     * 필터 조건에 맞는 엔드포인트 검색
     */
    searchEndpoints(filter?: EndpointFilter, pagination?: PaginationOptions): Promise<SearchResult<WebhookEndpoint>>;
    /**
     * 특정 이벤트 타입을 구독하는 활성 엔드포인트 조회
     */
    getActiveEndpointsForEvent(eventType: WebhookEventType): Promise<WebhookEndpoint[]>;
    /**
     * 엔드포인트 통계 조회
     */
    getStats(): {
        totalEndpoints: number;
        activeEndpoints: number;
        inactiveEndpoints: number;
        errorEndpoints: number;
        suspendedEndpoints: number;
        eventSubscriptions: Record<WebhookEventType, number>;
    };
    /**
     * 만료된 엔드포인트 정리
     */
    cleanupExpiredEndpoints(): Promise<number>;
    /**
     * 인덱스 초기화
     */
    private initializeIndexes;
    /**
     * 인덱스에 엔드포인트 추가
     */
    private addToIndexes;
    /**
     * 인덱스에서 엔드포인트 제거
     */
    private removeFromIndexes;
    /**
     * 필터 조건 매칭 확인
     */
    private matchesFilter;
    /**
     * 객체 필드 값 가져오기 (정렬용)
     */
    private getFieldValue;
    /**
     * 파일에서 데이터 로드
     */
    private loadFromFile;
    /**
     * 파일에 데이터 저장
     */
    private saveToFile;
    /**
     * 엔드포인트 관리자 종료
     */
    shutdown(): Promise<void>;
}
