import type { OdsClient } from '../../clients/ods.js';
export type CloneState = 'COMPLETED' | 'FAILED' | 'IN_PROGRESS' | 'PENDING' | (string & {});
export declare class ClonePollingTimeoutError extends Error {
    readonly sandboxId: string;
    readonly cloneId: string;
    readonly timeoutSeconds: number;
    readonly lastStatus?: CloneState | undefined;
    constructor(sandboxId: string, cloneId: string, timeoutSeconds: number, lastStatus?: CloneState | undefined);
}
export declare class ClonePollingError extends Error {
    readonly sandboxId: string;
    readonly cloneId: string;
    constructor(sandboxId: string, cloneId: string, message: string);
}
export declare class CloneFailedError extends Error {
    readonly sandboxId: string;
    readonly cloneId: string;
    readonly status: CloneState;
    constructor(sandboxId: string, cloneId: string, status: CloneState);
}
export interface WaitForClonePollInfo {
    sandboxId: string;
    cloneId: string;
    elapsedSeconds: number;
    status: CloneState;
    progressPercentage?: number;
}
export interface WaitForCloneOptions {
    sandboxId: string;
    cloneId: string;
    pollIntervalSeconds: number;
    timeoutSeconds: number;
    onPoll?: (info: WaitForClonePollInfo) => void;
    sleep?: (ms: number) => Promise<void>;
}
/**
 * Waits for a sandbox clone to reach COMPLETED or FAILED state by polling its status.
 *
 * @param client - ODS client for API calls
 * @param options - Polling configuration options
 *
 * @throws {ClonePollingTimeoutError} If the timeout is exceeded before completion
 * @throws {ClonePollingError} If the API request fails
 * @throws {CloneFailedError} If the clone enters the FAILED state
 */
export declare function waitForClone(client: OdsClient, options: WaitForCloneOptions): Promise<void>;
