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 ResponseErrors { networkStatusCode?: number; message?: string; graphQLErrors?: any[]; response?: Response; } export type GQLExtensions = Record; 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 { variables?: OperationVariables; url?: string; headers?: HeadersObject; retries?: number; keepalive?: boolean; 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>; }