/**
 * 基于 Proxy 的沙箱实现
 *
 * 这个模块提供了一个安全的代码执行环境，通过 Proxy 劫持全局对象的访问，
 * 防止恶意代码对宿主环境造成破坏，同时提供受控的 API 访问。
 *
 * 主要特性：
 * - 全局对象隔离
 * - API 访问控制
 * - 内存管理
 * - 错误捕获和处理
 * - 执行超时控制
 *
 * @author md-editor
 * @version 1.0.0
 */
/**
 * 沙箱配置接口
 */
export interface SandboxConfig {
    /** 允许访问的全局对象白名单 */
    allowedGlobals?: string[];
    /** 禁止访问的全局对象黑名单 */
    forbiddenGlobals?: string[];
    /** 是否允许访问 console API */
    allowConsole?: boolean;
    /** 是否允许访问 setTimeout/setInterval */
    allowTimers?: boolean;
    /** 代码执行超时时间（毫秒） */
    timeout?: number;
    /** 是否启用严格模式 */
    strictMode?: boolean;
    /** 自定义的全局变量 */
    customGlobals?: Record<string, any>;
    /** 是否允许访问 DOM API */
    allowDOM?: boolean;
    /** 最大内存使用限制（字节） */
    maxMemoryUsage?: number;
}
/**
 * 沙箱执行结果接口
 */
export interface SandboxResult {
    /** 执行结果 */
    result: any;
    /** 是否执行成功 */
    success: boolean;
    /** 错误信息 */
    error?: Error;
    /** 执行时间（毫秒） */
    executionTime: number;
    /** 内存使用情况 */
    memoryUsage?: number;
}
/**
 * 基于 Proxy 的沙箱类
 */
export declare class ProxySandbox {
    private config;
    private globalProxy;
    private sandboxGlobal;
    private isActive;
    private timeoutId;
    private startTime;
    constructor(config?: SandboxConfig);
    /**
     * 创建安全的 document 代理对象
     * 允许访问 document 但限制敏感操作
     */
    private createSafeDocument;
    /**
     * 创建安全的 window 代理对象
     * 允许访问 window 但限制敏感信息
     */
    private createSafeWindow;
    /**
     * 创建安全的沙箱全局对象
     */
    private createSandboxGlobal;
    /**
     * 创建安全的 console 对象
     */
    private createSafeConsole;
    /**
     * 创建安全的 setTimeout
     */
    private createSafeTimeout;
    /**
     * 创建安全的 setInterval
     */
    private createSafeInterval;
    /**
     * 创建全局对象的 Proxy
     */
    private createGlobalProxy;
    /**
     * 在沙箱中执行代码
     */
    execute(code: string, injectedParams?: Record<string, any>): Promise<SandboxResult>;
    /**
     * 检查是否是明显的死循环
     */
    private isObviousInfiniteLoop;
    /**
     * 带超时的普通执行
     * 注意：对于同步死循环，setTimeout 无法中断，需要使用 Worker 或指令计数
     * 这个方法只适用于不包含死循环的代码
     */
    private executeWithTimeout;
    /**
     * 使用指令计数限制执行时间
     * 这是处理同步死循环的唯一方法（在不使用 Worker 的情况下）
     */
    private executeWithInstructionLimit;
    /**
     * 在代码中注入指令计数器
     * 在循环体内部注入检查点，确保死循环能够被检测到
     */
    private instrumentCode;
    /**
     * 使用 Worker 执行代码以实现真正的超时控制
     */
    private executeWithWorker;
    /**
     * 尝试序列化参数，失败则回退到同步执行
     */
    private trySerializeParams;
    /**
     * 回退到同步执行
     */
    private fallbackToSyncExecution;
    /**
     * 创建 Worker 实例
     */
    private createWorkerInstance;
    /**
     * 生成 Worker 代码
     */
    private generateWorkerCode;
    /**
     * 设置 Worker 超时
     */
    private setupWorkerTimeout;
    /**
     * 设置 Worker 消息处理器
     */
    private setupWorkerHandlers;
    /**
     * 处理控制台消息
     */
    private handleConsoleMessage;
    /**
     * 清理 Worker 资源
     */
    private cleanupWorker;
    /**
     * 执行代码的核心方法（同步版本）
     */
    private executeCode;
    /**
     * 验证代码安全性
     */
    private validateCode;
    /**
     * 获取内存使用情况
     */
    private getMemoryUsage;
    /**
     * 清理资源
     */
    private cleanup;
    /**
     * 销毁沙箱
     */
    destroy(): void;
    /**
     * 检查沙箱是否处于活动状态
     */
    isRunning(): boolean;
    /**
     * 添加自定义全局变量
     */
    addGlobal(name: string, value: any): void;
    /**
     * 移除自定义全局变量
     */
    removeGlobal(name: string): void;
    /**
     * 获取沙箱配置
     */
    getConfig(): Readonly<Required<SandboxConfig>>;
}
/**
 * 创建沙箱实例的工厂函数
 */
export declare function createSandbox(config?: SandboxConfig): ProxySandbox;
/**
 * 快速执行代码的工具函数
 */
export declare function runInSandbox(code: string, config?: SandboxConfig, injectedParams?: Record<string, any>): Promise<SandboxResult>;
