import { CallbackData } from '../types';
import { IEventEmitter } from '../interfaces/IEventEmitter';
export type EventCallback<T = any> = (data: T) => void;
export interface EventMap {
    'payment.success': CallbackData;
    'payment.failed': CallbackData;
    'payment.pending': CallbackData;
    'payment.cancelled': CallbackData;
    'callback.received': CallbackData;
    'error': Error;
}
export declare class EventEmitter implements IEventEmitter {
    private events;
    /**
     * Subscribe to an event
     * @param event The event name to subscribe to
     * @param callback The callback function to execute when the event is emitted
     * @returns A function to unsubscribe from the event
     */
    on<K extends keyof EventMap>(event: K, callback: EventCallback<EventMap[K]>): () => void;
    /**
     * Subscribe to an event once
     * @param event The event name to subscribe to
     * @param callback The callback function to execute when the event is emitted
     */
    once<K extends keyof EventMap>(event: K, callback: EventCallback<EventMap[K]>): void;
    /**
     * Emit an event
     * @param event The event name to emit
     * @param data The data to pass to the event handlers
     */
    emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
    /**
     * Remove all listeners for a specific event
     * @param event The event name to remove listeners from
     */
    removeAllListeners<K extends keyof EventMap>(event: K): void;
    /**
     * Get the number of listeners for a specific event
     * @param event The event name to get listener count for
     * @returns The number of listeners for the event
     */
    listenerCount<K extends keyof EventMap>(event: K): number;
}
