interface CustomRequestInit { method?: string; headers?: HeadersInit; body?: string; signal?: AbortSignal; keepalive?: boolean; } export type CustomFetchApi = ( url: string, init?: CustomRequestInit, ) => Promise; type OperationVariables = Record; export type DataChunk = Buffer | Uint8Array; type HeadersObject = Record; export type {HeadersObject as Headers}; export interface GraphQLError { message: string; locations?: {line: number; column: number}[]; path?: (string | number)[]; extensions?: { code?: string; [key: string]: any; }; } export interface ResponseErrors { networkStatusCode?: number; message?: string; graphQLErrors?: GraphQLError[]; response?: Response; } export interface GQLExtensions { cost?: { requestedQueryCost?: number; actualQueryCost?: number | null; throttleStatus?: { maximumAvailable?: number; currentlyAvailable?: number; restoreRate?: number; }; }; context?: { country?: string; language?: string; }; [key: string]: any; } export interface FetchResponseBody { data?: TData; extensions?: GQLExtensions; headers?: Headers; } export interface ClientResponse extends FetchResponseBody { errors?: ResponseErrors; } export interface ClientStreamResponse< TData = any, > extends ClientResponse { hasNext: boolean; } export interface ClientStreamIterator { [Symbol.asyncIterator](): AsyncIterator>; } export interface LogContent { type: string; content: any; } export interface HTTPResponseLog extends LogContent { type: 'HTTP-Response'; content: { requestParams: Parameters; response: Response; }; } export interface HTTPResponseGraphQLDeprecationNotice extends LogContent { type: 'HTTP-Response-GraphQL-Deprecation-Notice'; content: { requestParams: Parameters; deprecationNotice: string; }; } export interface HTTPRetryLog extends LogContent { type: 'HTTP-Retry'; content: { requestParams: Parameters; lastResponse?: Response; retryAttempt: number; maxRetries: number; }; } export type LogContentTypes = HTTPResponseLog | HTTPRetryLog | HTTPResponseGraphQLDeprecationNotice; export type Logger = ( logContent: TLogContentTypes, ) => void; export interface ClientOptions { headers: HeadersObject; url: string; customFetchApi?: CustomFetchApi; retries?: number; logger?: Logger; } export interface ClientConfig { readonly headers: ClientOptions['headers']; readonly url: ClientOptions['url']; readonly retries: Required['retries']; } export interface RequestOptions { readonly variables?: OperationVariables; readonly url?: string; readonly headers?: HeadersObject; readonly retries?: number; readonly keepalive?: boolean; readonly signal?: AbortSignal; } export type RequestParams = [operation: string, options?: RequestOptions]; export interface GraphQLClient { readonly config: ClientConfig; fetch: (...props: RequestParams) => Promise; request: ( ...props: RequestParams ) => Promise>; requestStream: ( ...props: RequestParams ) => Promise>; }