import Event from "./Event";
import EventListener from "./EventListener";
import EventStream from "./EventStream";
export default abstract class BaseEventStream<T extends BaseEventStream<T>> implements EventStream {
    protected static readonly RETRY_TIMEOUT_MILLIS: number;
    private readonly reconnecter?;
    protected closed: boolean;
    protected events: Array<Event>;
    protected listeners: Array<EventListener>;
    protected lastErr?: string;
    constructor(reconnecter?: () => Promise<T>);
    abstract open(): void;
    protected abstract afterClose(): void;
    protected abstract onReconnect(next: T): void;
    protected reconnect(error?: Error): void;
    protected poll(): void;
    addListener(listener: EventListener): void;
    removeListener(listener: EventListener): void;
    private listenOnce;
    nextEvent(): Promise<Event>;
    close(): void;
}
