export interface IPollerResponse<T = any> {
    data?: T;
    meta?: {
        status: 'IN_PROGRESS' | 'COMPLETE';
    };
}
export type TPollerRequestCallback<V> = () => Promise<V>;
export type TPollerEventCallbackArg<V extends IPollerResponse = IPollerResponse> = V | Error;
export type TPollerEventName = 'data' | 'error' | 'complete';
export type TPollerEventCallback<V extends IPollerResponse = IPollerResponse> = (arg?: TPollerEventCallbackArg<V>) => void;
export type TPollerEvents<V extends IPollerResponse = IPollerResponse> = {
    [k in TPollerEventName]: TPollerEventCallback<V>;
};
export interface IPollerOptions<U> {
    callCount?: number;
    interval?: number;
    maxCallCount?: number;
    minCallCount?: number;
    request: TPollerRequestCallback<Partial<U>>;
    type?: string;
    uuid?: string;
}
export type TRequest<R> = TPollerRequestCallback<R>;
export type TOptions<R> = Partial<IPollerOptions<R>>;
export declare class Poller<V extends IPollerResponse> {
    static instance: Poller<IPollerResponse> | null;
    readonly defaultOptions: Partial<IPollerOptions<V>>;
    private pollings;
    private events;
    static getInstance<R extends IPollerResponse>(): Poller<R>;
    poll(request: TRequest<V>, options: TOptions<V>): Poller<V>;
    on(eventName: TPollerEventName, eventCallback: TPollerEventCallback<V>): void;
    private dispatch;
    private onRequest;
    private onComplete;
    private isInProgress;
    private buildPollerOptions;
    private storeCurrentPolling;
    private isActivePoller;
    private pause;
    private removeCurrentPolling;
}
export type PollerReturn<R extends IPollerResponse = IPollerResponse> = Poller<R>;
export type TPollerCallback<T extends IPollerResponse = IPollerResponse> = (err: Error | null, result?: T) => void;
export declare function pollRequest<R extends IPollerResponse>(request: TRequest<R>, options: TOptions<R>, pollerCallback: TPollerCallback): Promise<PollerReturn>;
export declare function pollRequest<R extends IPollerResponse>(request: TRequest<R>, options: TOptions<R>): Promise<R | undefined>;
