import type { AnyObject } from '../_util/type'; import { MessageInfo, SimpleType } from '../x-chat'; import type { SSEOutput, XStreamOptions } from '../x-stream'; import type { XFetchMiddlewares } from './x-fetch'; export interface XRequestCallbacks { /** * @description Callback when the request is successful */ onSuccess: (chunks: Output[], responseHeaders: Headers, chatMessage?: MessageInfo) => void; /** * @description Callback when the request fails */ onError: (error: Error, errorInfo?: any, responseHeaders?: Headers, fallbackMsg?: MessageInfo) => void; /** * @description Callback when the request is updated */ onUpdate?: (chunk: Output, responseHeaders: Headers, chatMessage?: MessageInfo) => void; } export interface XRequestOptions extends RequestInit { /** * @description Callbacks for the request */ callbacks?: XRequestCallbacks; /** * @description The parameters to be sent */ params?: Partial; /** * @description The custom headers to be sent */ headers?: Record; /** * @description The timeout for the request */ timeout?: number; /** * @description The timeout for the stream mode request,when the stream mode request is timeout, the request will be aborted */ streamTimeout?: number; /** * @description Custom fetch */ fetch?: (baseURL: Parameters[0], options: XRequestOptions) => Promise; /** * @description Middlewares for the request and response */ middlewares?: XFetchMiddlewares; /** * @description Custom stream transformer, can use to adapt the stream data to the custom format */ transformStream?: XStreamOptions['transformStream'] | ((baseURL: string, responseHeaders: Headers) => XStreamOptions['transformStream']); /** * @description Separator for stream data parsing */ streamSeparator?: string; /** * @description Separator for different parts within the stream */ partSeparator?: string; /** * @description Separator for key-value pairs in the stream data */ kvSeparator?: string; /** * @description Whether to manually run the request */ manual?: boolean; /** * @description The interval after the request is failed */ retryInterval?: number; /** * @description Retry times limit, valid when retryInterval is set or onError returns a number */ retryTimes?: number; } export type XRequestGlobalOptions = Pick, 'headers' | 'timeout' | 'streamTimeout' | 'middlewares' | 'fetch' | 'transformStream' | 'manual'>; export type XRequestFunction = (baseURL: string, options?: XRequestOptions) => XRequestClass; /** * Set global options for the request * @param options XRequestGlobalOptions */ export declare function setXRequestGlobalOptions(options: XRequestGlobalOptions): void; export declare abstract class AbstractXRequestClass { baseURL: string; options: XRequestOptions; constructor(baseURL: string, options?: XRequestOptions); abstract get asyncHandler(): Promise; abstract get isTimeout(): boolean; abstract get isStreamTimeout(): boolean; abstract get isRequesting(): boolean; abstract get manual(): boolean; abstract run(params?: Input): void; abstract abort(): void; } export declare class XRequestClass extends AbstractXRequestClass { private _asyncHandler; private timeoutHandler; private _isTimeout; private streamTimeoutHandler; private _isStreamTimeout; private abortController; private _isRequesting; private _manual; private lastManualParams?; private retryTimes; private retryTimer; private lastEventId; get asyncHandler(): Promise; get isTimeout(): boolean; private set isTimeout(value); get isStreamTimeout(): boolean; private set isStreamTimeout(value); get isRequesting(): boolean; get manual(): boolean; constructor(baseURL: string, options?: XRequestOptions); run(params?: Input): boolean; abort(): void; private init; private startRequest; private finishRequest; private customResponseHandler; private sseResponseHandler; private processStream; private jsonResponseHandler; private resetRetry; } declare function XRequest(baseURL: string, options?: XRequestOptions): AbstractXRequestClass; export default XRequest;