import type { HttpClient } from '../utils/http-client.js'; import type { UnknownObject } from '../../../types/common-types.js'; import type { ProviderContext } from '../api/provider-types.js'; import type { ProviderErrorAugmented } from './provider-error-types.js'; export type PreparedHttpRequest = { endpoint: string; headers: Record; targetUrl: string; targetUrls?: string[]; body: UnknownObject; entryEndpoint?: string; clientRequestId?: string; wantsSse: boolean; abortSignal?: AbortSignal; }; export type PreparedRequestExecutor = (requestInfo: PreparedHttpRequest, context: ProviderContext, captureSse: boolean) => Promise; export type HttpRequestExecutorDeps = { wantsUpstreamSse(request: UnknownObject, context: ProviderContext): boolean; getEffectiveEndpoint(): string; resolveRequestEndpoint(request: UnknownObject, defaultEndpoint: string): string; buildRequestHeaders(): Promise>; finalizeRequestHeaders(headers: Record, request: UnknownObject): Promise>; applyStreamModeHeaders(headers: Record, wantsSse: boolean): Record; getEffectiveBaseUrl(): string; getBaseUrlCandidates?(context: ProviderContext): string[] | undefined; buildHttpRequestBody(request: UnknownObject): UnknownObject; prepareSseRequestBody(body: UnknownObject, context: ProviderContext): void; getEntryEndpointFromPayload(request: UnknownObject): string | undefined; getClientRequestIdFromContext(context: ProviderContext): string | undefined; wrapUpstreamSseResponse(stream: NodeJS.ReadableStream, context: ProviderContext): Promise; executePreparedRequest?: PreparedRequestExecutor; getHttpRetryLimit(): number; shouldRetryHttpError(error: unknown, attempt: number, maxAttempts: number): boolean; delayBeforeHttpRetry(attempt: number): Promise; tryRecoverOAuthAndReplay?(error: unknown, requestInfo: PreparedHttpRequest, processedRequest: UnknownObject, captureSse: boolean, context: ProviderContext): Promise; resolveBusinessResponseError?(response: unknown, context: ProviderContext): Error | undefined; normalizeHttpError(error: unknown, processedRequest: UnknownObject, requestInfo: PreparedHttpRequest, context: ProviderContext): Promise; }; export declare class HttpRequestExecutor { private readonly httpClient; private readonly deps; constructor(httpClient: HttpClient, deps: HttpRequestExecutorDeps); execute(processedRequest: UnknownObject, context: ProviderContext): Promise; private prepareHttpRequest; private captureVisionDebugRequest; private snapshotProviderRequest; private executeHttpRequestWithRetries; private shouldTryNextTarget; private executeHttpRequestOnce; }