/**
 * 请求插件系统
 *
 * 插件系统提供生命周期钩子，允许扩展请求能力
 */
import type { RequestOptions, Response, RequestContext } from '../types';
/**
 * 插件生命周期阶段
 */
export declare enum PluginLifecycleStage {
    /**
     * 初始化阶段
     */
    INIT = "init",
    /**
     * 请求前阶段
     */
    BEFORE_REQUEST = "beforeRequest",
    /**
     * 请求后阶段（成功）
     */
    AFTER_REQUEST = "afterRequest",
    /**
     * 错误处理阶段
     */
    ON_ERROR = "onError",
    /**
     * 最终阶段（无论成功或失败）
     */
    FINALLY = "finally"
}
/**
 * 插件优先级
 */
export declare enum PluginPriority {
    /**
     * 最高优先级（如：认证、签名）
     */
    HIGHEST = 0,
    /**
     * 高优先级（如：请求转换、参数验证）
     */
    HIGH = 25,
    /**
     * 默认优先级
     */
    NORMAL = 50,
    /**
     * 低优先级（如：日志、监控）
     */
    LOW = 75,
    /**
     * 最低优先级（如：缓存、重试）
     */
    LOWEST = 100
}
/**
 * 请求插件接口
 *
 * @template TRequestMeta - 请求元数据类型
 * @template TResponseMeta - 响应元数据类型
 * @template TContextMeta - 上下文元数据类型
 */
export interface RequestPlugin<TContextMeta = Record<string, unknown>> {
    /**
     * 插件名称
     */
    readonly name: string;
    /**
     * 插件版本
     */
    readonly version?: string;
    /**
     * 插件优先级（数字越小优先级越高）
     */
    readonly priority?: number;
    /**
     * 插件依赖列表（插件名称数组）
     */
    readonly dependencies?: string[];
    /**
     * 初始化钩子
     *
     * @param context - 请求上下文
     */
    onInit?(context: RequestContext<RequestOptions, Response, TContextMeta>): void | Promise<void>;
    /**
     * 请求前钩子
     *
     * 可以修改请求配置、添加请求头、验证参数等
     *
     * @param context - 请求上下文
     * @returns 修改后的请求配置（可选）
     */
    onBeforeRequest?(context: RequestContext<RequestOptions, Response, TContextMeta>): RequestOptions | void | Promise<RequestOptions | void>;
    /**
     * 请求后钩子（成功）
     *
     * 可以修改响应数据、添加响应元数据等
     *
     * @param context - 请求上下文
     * @returns 修改后的响应（可选）
     */
    onAfterRequest?(context: RequestContext<RequestOptions, Response, TContextMeta>): Response | void | Promise<Response | void>;
    /**
     * 错误处理钩子
     *
     * 可以处理错误、重试、降级等
     *
     * @param context - 请求上下文
     * @returns 是否已处理错误（如果返回 true，错误不会继续传播）
     */
    onError?(context: RequestContext<RequestOptions, Response, TContextMeta>): boolean | void | Promise<boolean | void>;
    /**
     * 最终钩子（无论成功或失败）
     *
     * 可以清理资源、记录日志等
     *
     * @param context - 请求上下文
     */
    onFinally?(context: RequestContext<RequestOptions, Response, TContextMeta>): void | Promise<void>;
}
/**
 * 插件管理器
 */
export declare class PluginManager {
    private plugins;
    private pluginOrder;
    /**
     * 注册插件
     *
     * @param plugin - 请求插件
     */
    register(plugin: RequestPlugin): void;
    /**
     * 注销插件
     *
     * @param name - 插件名称
     */
    unregister(name: string): void;
    /**
     * 获取插件
     *
     * @param name - 插件名称
     * @returns 插件实例
     */
    get(name: string): RequestPlugin | undefined;
    /**
     * 获取所有插件
     *
     * @returns 插件数组
     */
    getAll(): RequestPlugin[];
    /**
     * 更新插件执行顺序（考虑依赖和优先级）
     */
    private updatePluginOrder;
    /**
     * 执行插件钩子
     *
     * @param stage - 生命周期阶段
     * @param context - 请求上下文
     * @returns 处理结果
     */
    executeHook<TContext extends RequestContext>(stage: PluginLifecycleStage, context: TContext): Promise<RequestOptions | Response | boolean | void>;
    /**
     * 清除所有插件
     */
    clear(): void;
}
//# sourceMappingURL=RequestPlugin.d.ts.map