import type { TypeGuardFn } from 'guardz';
import { Status } from '../../domain/event/Status';
import type { ErrorContext } from '../../utils/safe-event-never-throws';
/**
 * Configuration for CustomEvent listeners
 */
export interface CustomEventListenerConfig<T> {
    /** Type guard function to validate event data */
    guard: TypeGuardFn<T>;
    /** Enable tolerance mode (default: false) */
    tolerance?: boolean;
    /** Allowed origins for security validation */
    allowedOrigins?: string[];
    /** Allowed sources for security validation */
    allowedSources?: string[];
    /** Callback for type mismatch errors */
    onTypeMismatch?: (errorMessage: string) => void;
    /** Callback for security violations */
    onSecurityViolation?: (origin: string, message: string) => void;
    /** Callback for other errors */
    onError?: (error: string, context: ErrorContext) => void;
}
/**
 * Safe CustomEvent listener with callback-based API
 * Usage: element.addEventListener('custom-event', safeCustomEventListener(isCustomData, { onSuccess: handleCustomData }));
 */
export declare function safeCustomEventListener<T>(guard: TypeGuardFn<T>, config: CustomEventListenerConfig<T> & {
    onSuccess: (data: T) => void;
    onError?: (result: {
        status: Status.ERROR;
        code: number;
        message: string;
    }) => void;
}): (event: CustomEvent) => void;
//# sourceMappingURL=CustomEventListener.d.ts.map