/**
 * 请求库核心类型定义
 */
/**
 * HTTP 请求方法
 */
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
/**
 * 请求头类型
 */
export type RequestHeaders = Record<string, string | number | boolean>;
/**
 * 请求查询参数类型
 */
export type RequestQuery = Record<string, string | number | boolean | null | undefined>;
/**
 * 请求体类型
 */
export type RequestBody = string | FormData | URLSearchParams | Blob | ArrayBuffer | Record<string, unknown> | null;
/**
 * 请求配置选项
 *
 * @template TResponse - 响应数据类型（用于类型推导）
 */
export interface RequestOptions<TResponse = unknown> {
    /**
     * 响应类型占位符（用于类型推导，实际不使用）
     * @internal
     */
    _responseType?: TResponse;
    /**
     * 请求方法
     */
    method?: HttpMethod;
    /**
     * 请求 URL
     */
    url: string;
    /**
     * 请求头
     */
    headers?: RequestHeaders;
    /**
     * 查询参数
     */
    query?: RequestQuery;
    /**
     * 请求体
     */
    body?: RequestBody;
    /**
     * 请求超时时间（毫秒）
     */
    timeout?: number;
    /**
     * 是否允许跨域请求
     */
    credentials?: 'include' | 'same-origin' | 'omit';
    /**
     * 响应类型
     */
    responseType?: 'json' | 'text' | 'blob' | 'arrayBuffer' | 'formData';
    /**
     * 是否中止请求
     */
    signal?: AbortSignal;
    /**
     * 请求元数据（用于插件扩展）
     */
    meta?: Record<string, unknown>;
    /**
     * 请求标签（用于缓存、监控等）
     */
    tags?: string[];
    /**
     * 是否跳过默认插件
     */
    skipPlugins?: string[];
    /**
     * 请求重试配置
     */
    retry?: RetryConfig;
    /**
     * 请求缓存配置
     */
    cache?: CacheConfig;
    /**
     * 请求验证配置
     */
    validation?: ValidationConfig;
}
/**
 * 重试配置
 */
export interface RetryConfig {
    /**
     * 最大重试次数
     */
    maxAttempts?: number;
    /**
     * 重试延迟（毫秒）
     */
    delay?: number;
    /**
     * 重试延迟策略（指数退避）
     */
    exponentialBackoff?: boolean;
    /**
     * 重试条件函数
     */
    shouldRetry?: (error: unknown, attempt: number) => boolean;
    /**
     * 重试延迟计算函数
     */
    calculateDelay?: (attempt: number) => number;
}
/**
 * 缓存配置
 */
export interface CacheConfig {
    /**
     * 缓存键
     */
    key?: string;
    /**
     * 缓存时间（毫秒）
     */
    ttl?: number;
    /**
     * 是否强制刷新
     */
    forceRefresh?: boolean;
    /**
     * 缓存存储类型
     */
    storage?: 'memory' | 'localStorage' | 'sessionStorage';
    /**
     * 缓存条件函数
     */
    shouldCache?: (response: Response<unknown>) => boolean;
}
/**
 * 验证配置
 *
 * @template TResponse - 响应数据类型
 */
export interface ValidationConfig {
    /**
     * 请求参数验证 Schema（Zod）
     */
    requestSchema?: unknown;
    /**
     * 响应数据验证 Schema（Zod）
     */
    responseSchema?: unknown;
    /**
     * 验证失败时的处理方式
     */
    onValidationError?: (error: unknown) => void;
}
/**
 * 响应对象
 *
 * @template TData - 响应数据类型
 * @template TMeta - 响应元数据类型
 */
export interface Response<TData = unknown, TMeta = Record<string, unknown>> {
    /**
     * 响应数据
     */
    data: TData;
    /**
     * HTTP 状态码
     */
    status: number;
    /**
     * HTTP 状态文本
     */
    statusText: string;
    /**
     * 响应头
     */
    headers: RequestHeaders;
    /**
     * 响应元数据（由插件注入）
     */
    meta?: TMeta;
    /**
     * 原始响应对象（适配器提供）
     */
    raw?: unknown;
}
/**
 * 请求错误类型
 */
export declare enum RequestErrorType {
    /**
     * 网络错误
     */
    NETWORK_ERROR = "NETWORK_ERROR",
    /**
     * 超时错误
     */
    TIMEOUT_ERROR = "TIMEOUT_ERROR",
    /**
     * HTTP 错误（4xx, 5xx）
     */
    HTTP_ERROR = "HTTP_ERROR",
    /**
     * 取消错误
     */
    ABORT_ERROR = "ABORT_ERROR",
    /**
     * 验证错误
     */
    VALIDATION_ERROR = "VALIDATION_ERROR",
    /**
     * 未知错误
     */
    UNKNOWN_ERROR = "UNKNOWN_ERROR"
}
/**
 * 请求错误代码
 */
export declare enum RequestErrorCode {
    /**
     * 网络连接失败
     */
    NETWORK_CONNECTION_FAILED = "NETWORK_CONNECTION_FAILED",
    /**
     * 请求超时
     */
    REQUEST_TIMEOUT = "REQUEST_TIMEOUT",
    /**
     * 服务器错误（5xx）
     */
    SERVER_ERROR = "SERVER_ERROR",
    /**
     * 客户端错误（4xx）
     */
    CLIENT_ERROR = "CLIENT_ERROR",
    /**
     * 请求被取消
     */
    REQUEST_ABORTED = "REQUEST_ABORTED",
    /**
     * 响应验证失败
     */
    RESPONSE_VALIDATION_FAILED = "RESPONSE_VALIDATION_FAILED",
    /**
     * 请求参数验证失败
     */
    REQUEST_VALIDATION_FAILED = "REQUEST_VALIDATION_FAILED"
}
/**
 * 请求错误类
 */
export declare class RequestError extends Error {
    /**
     * 错误类型
     */
    type: RequestErrorType;
    /**
     * 错误代码
     */
    code: RequestErrorCode;
    /**
     * HTTP 状态码（如果有）
     */
    status?: number;
    /**
     * 原始错误
     */
    cause?: unknown;
    /**
     * 请求配置
     */
    request?: RequestOptions;
    /**
     * 响应数据（如果有）
     */
    response?: Response;
    /**
     * 错误上下文
     */
    context?: Record<string, unknown>;
    constructor(message: string, type: RequestErrorType, code: RequestErrorCode, options?: {
        status?: number;
        cause?: unknown;
        request?: RequestOptions;
        response?: Response;
        context?: Record<string, unknown>;
    });
}
/**
 * 请求上下文
 *
 * @template TRequest - 请求配置类型
 * @template TResponse - 响应类型
 * @template TMeta - 元数据类型
 */
export interface RequestContext<TRequest = RequestOptions, TResponse = Response, TMeta = Record<string, unknown>> {
    /**
     * 请求配置
     */
    request: TRequest;
    /**
     * 响应（如果已收到）
     */
    response?: TResponse;
    /**
     * 错误（如果发生）
     */
    error?: RequestError;
    /**
     * 上下文元数据（由插件注入）
     */
    meta: TMeta;
    /**
     * 请求开始时间
     */
    startTime: number;
    /**
     * 请求结束时间（如果已完成）
     */
    endTime?: number;
    /**
     * 请求耗时（毫秒）
     */
    duration?: number;
    /**
     * 重试次数
     */
    retryCount: number;
    /**
     * 是否已取消
     */
    cancelled: boolean;
    /**
     * 中止控制器
     */
    abortController?: AbortController;
}
/**
 * 适配器能力声明
 */
export interface AdapterCapabilities {
    /**
     * 是否支持取消请求
     */
    supportsAbort?: boolean;
    /**
     * 是否支持超时
     */
    supportsTimeout?: boolean;
    /**
     * 是否支持进度追踪
     */
    supportsProgress?: boolean;
    /**
     * 是否支持拦截器
     */
    supportsInterceptors?: boolean;
}
/**
 * 请求客户端配置
 */
export interface RequestClientConfig {
    /**
     * 基础 URL
     */
    baseURL?: string;
    /**
     * 默认请求头
     */
    defaultHeaders?: RequestHeaders;
    /**
     * 默认超时时间（毫秒）
     */
    defaultTimeout?: number;
    /**
     * 默认适配器（按需加载）
     * 可以是适配器名称字符串，或返回适配器的工厂函数
     */
    defaultAdapter?: string | (() => Promise<import('./adapter/RequestAdapter').RequestAdapter>);
    /**
     * 插件列表
     */
    plugins?: Array<import('./plugin/RequestPlugin').RequestPlugin>;
    /**
     * 是否启用开发模式
     */
    devMode?: boolean;
}
//# sourceMappingURL=types.d.ts.map