import type { SandboxAdapter, SandboxCreateContext } from "./sandbox.js";
export type CloudflarePreviewOptions = "tunnel" | {
    readonly hostname: string;
    readonly name?: string;
    readonly token?: string;
};
export interface CloudflareSandboxAdapterOptions<Binding extends object = object> {
    readonly binding: Binding;
    readonly id?: string | ((context: SandboxCreateContext) => string);
    readonly preview?: CloudflarePreviewOptions;
    readonly sleepAfter?: string | number;
    readonly keepAlive?: boolean;
    readonly transport?: "http" | "websocket" | "rpc";
    readonly labels?: Readonly<Record<string, string>>;
    readonly containerTimeouts?: {
        readonly instanceGetTimeoutMS?: number;
        readonly portReadyTimeoutMS?: number;
        readonly waitIntervalMS?: number;
    };
}
export interface CloudflareSandboxFactoryInput<Binding extends object = object> {
    readonly binding: Binding;
    readonly id: string;
    readonly options: {
        readonly sleepAfter: string | number;
        readonly keepAlive: boolean;
        readonly enableDefaultSession: false;
        readonly normalizeId: true;
        readonly transport: "http" | "websocket" | "rpc";
        readonly labels?: Record<string, string>;
        readonly containerTimeouts?: {
            readonly instanceGetTimeoutMS?: number;
            readonly portReadyTimeoutMS?: number;
            readonly waitIntervalMS?: number;
        };
    };
}
export interface CloudflareExecResult {
    readonly exitCode: number;
    readonly stdout: string;
    readonly stderr: string;
    readonly duration: number;
}
export interface CloudflareSandboxClient {
    exec(command: string, options: {
        readonly cwd: string;
        readonly env: Record<string, string>;
        readonly timeout: number;
        readonly stream: boolean;
        readonly signal?: AbortSignal;
        readonly onOutput?: (stream: "stdout" | "stderr", data: string) => void;
    }): Promise<CloudflareExecResult>;
    mkdir(path: string, options?: {
        recursive?: boolean;
    }): Promise<{
        success: boolean;
    }>;
    writeFile(path: string, content: string | ReadableStream<Uint8Array>): Promise<{
        success: boolean;
    }>;
    readFile(path: string, options: {
        encoding: "base64";
    }): Promise<{
        success: boolean;
        content: string;
    }>;
    startProcess(command: string, options?: {
        readonly signal?: AbortSignal;
        readonly stream?: boolean;
        readonly onOutput?: (stream: "stdout" | "stderr", data: string) => void;
    }): Promise<CloudflareProcessHandle>;
    exposePort(port: number, options: {
        hostname: string;
        name?: string;
        token?: string;
    }): Promise<{
        url: string;
    }>;
    readonly tunnels: {
        get(port: number): Promise<{
            url: string;
        }>;
    };
    destroy(): Promise<void>;
}
export interface CloudflareProcessHandle {
    readonly id: string;
    kill(signal?: string): Promise<void>;
    getLogs(): Promise<{
        stdout: string;
        stderr: string;
    }>;
    waitForExit(timeout?: number): Promise<{
        exitCode: number;
    }>;
}
export type CloudflareSandboxFactory<Binding extends object = object> = (input: CloudflareSandboxFactoryInput<Binding>) => Promise<CloudflareSandboxClient>;
export declare function cloudflareSandbox<Binding extends object>(options: CloudflareSandboxAdapterOptions<Binding>, factory?: CloudflareSandboxFactory<Binding>): SandboxAdapter;
//# sourceMappingURL=sandbox-cloudflare.d.ts.map