import type Client from "@tai-kun/surrealdb/basic-client";
import type { EngineEventMap } from "@tai-kun/surrealdb/engine";
import { TaskEmitter } from "@tai-kun/surrealdb/utils";
export type AutoReconnectEventMap = {
    enqueue: [endpoint: URL];
    pending: [endpoint: URL, duration: number];
    connect: [endpoint: URL];
    success: [endpoint: URL];
    failure: [endpoint: URL, error: unknown];
    error: [error: unknown];
};
export interface AutoReconnectOptions {
    readonly backoffLimit?: number | undefined;
    readonly initialDelay?: number | undefined;
    readonly maxDelay?: number | undefined;
    readonly shouldReconnect?: {
        readonly ping?: {
            readonly threshold: number;
            readonly perMillis: number;
        } | undefined;
    } | ((...args: EngineEventMap["error"]) => boolean) | undefined;
}
export type ReconnectionInfo = {
    state: "waiting";
    phase: "waiting" | "pending";
} | {
    state: "running";
    phase: "closing" | "connecting";
} | {
    state: "success";
    phase: "pending" | "succeeded";
} | {
    state: "failure";
    phase: "pending" | "failed";
};
export type ReconnectionState = ReconnectionInfo["state"];
export type ReconnectionPhase = ReconnectionInfo["phase"];
declare class AutoReconnect extends TaskEmitter<AutoReconnectEventMap> {
    readonly db: Client;
    readonly maxDelay: number;
    readonly backoffLimit: number;
    readonly initialDelay: number;
    readonly shouldReconnect: (...args: EngineEventMap["error"]) => boolean;
    private _enabled;
    private _counter;
    private _info;
    constructor(db: Client, options?: AutoReconnectOptions | undefined);
    getReconnectionInfo(): ReconnectionInfo;
    get state(): ReconnectionState;
    get phase(): ReconnectionPhase;
    get enabled(): boolean;
    enable(): void;
    disable(): void;
    reset(): void;
}
/**
 * @experimental
 */
export default function autoReconnect(...args: ConstructorParameters<typeof AutoReconnect>): AutoReconnect;
export {};
//# sourceMappingURL=auto-reconnect.d.ts.map