/**
 * 请求队列插件
 *
 * 当检测到特定的响应 code 或 status 时，暂停后续请求并放入队列，
 * 执行回调方法，等待回调完成后继续执行队列中的请求
 */
import type { RequestPlugin } from './RequestPlugin';
import type { RequestContext, Response } from '../types';
/**
 * 触发条件配置
 */
export interface QueueTriggerCondition {
    /**
     * 响应数据中的 code 字段值（业务状态码）
     * 如果响应数据是对象且包含 code 字段，且值匹配则触发
     */
    code?: number | string | ((code: unknown) => boolean);
    /**
     * HTTP 状态码
     * 如果 HTTP status 匹配则触发
     */
    status?: number | number[] | ((status: number) => boolean);
    /**
     * 自定义检查函数
     * 返回 true 表示应该触发队列暂停
     */
    check?: (response: Response, context: RequestContext) => boolean;
}
/**
 * 队列插件配置
 */
export interface QueuePluginConfig {
    /**
     * 触发条件列表
     * 当响应匹配任一条件时，会暂停队列并执行回调
     */
    triggers?: QueueTriggerCondition[];
    /**
     * 回调函数
     * 当检测到触发条件时执行，返回 Promise 表示异步操作
     *
     * @param response - 触发条件的响应
     * @param context - 请求上下文
     * @returns Promise 或 void
     */
    onTrigger?: (response: Response, context: RequestContext) => Promise<void> | void;
    /**
     * 是否启用队列功能
     * @default true
     */
    enabled?: boolean;
    /**
     * 是否在错误时也检查触发条件
     * @default true
     */
    checkOnError?: boolean;
    /**
     * 队列超时时间（毫秒）
     * 如果队列暂停超过此时间，会自动恢复并拒绝队列中的请求
     * @default 30000 (30秒)
     */
    queueTimeout?: number;
}
/**
 * 创建请求队列插件
 *
 * @param config - 队列插件配置
 * @returns 队列插件实例
 *
 * @example
 * ```typescript
 * import { createRequestClient } from '@vlian/framework/request';
 * import { createQueuePlugin } from '@vlian/framework/request/plugin';
 *
 * const client = await createRequestClient({
 *   plugins: [
 *     createQueuePlugin({
 *       triggers: [
 *         { code: 401 }, // 业务 code 401 表示未授权
 *         { status: 401 }, // HTTP 401 未授权
 *       ],
 *       onTrigger: async (response, context) => {
 *         // 刷新 token 或跳转登录
 *         await refreshToken();
 *       },
 *     }),
 *   ],
 * });
 * ```
 */
export declare function createQueuePlugin(config?: QueuePluginConfig): RequestPlugin;
//# sourceMappingURL=queue.d.ts.map