declare class EventManager<M extends {
    [key: string]: any;
}> {
    private listeners;
    addListener<E extends keyof M>(eventName: E, callback: (data: M[E]) => void): void;
    removeListener<E extends keyof M>(eventName: E, callback: (data: M[E]) => void): void;
    protected dispatch<E extends keyof M>(eventName: E, data: M[E]): void;
}

type AircraftData = {
    icaoAddress: AircraftIcaoAddress;
};
interface AircraftDataWithLocation extends AircraftData {
    location: {
        latitude: number;
        longitude: number;
    };
}
type BeastHandlerEvents = {
    'aircraft_new': AircraftData;
    'aircraft_update': AircraftData;
    'aircraft_update_with_location': AircraftDataWithLocation;
    'warning': {
        message: string;
        context: any;
    };
    'removed_from_cache': AircraftIcaoAddress;
};
type AircraftIcaoAddress = string;
declare class BeastHandler extends EventManager<BeastHandlerEvents> {
    private readonly aircraftCache;
    private cleanUpCacheInterval;
    /**
     * don't forget to call stop() once you are done
     */
    constructor();
    stop(): void;
    private cleanUpCache;
    handleBeastData(data: Buffer<ArrayBufferLike>): void;
    private handleBeastFrame;
}

export { BeastHandler };
