import { LogContentTypes, LogContent, Logger as BaseLogger, Headers, ClientResponse, FetchResponseBody, ClientStreamIterator, } from '../graphql-client/types'; import { AllOperations, OperationVariables, ResponseWithType, ReturnData, } from './operation-types'; export type { AllOperations, InputMaybe, OperationVariables, ReturnData, ResponseWithType, } from './operation-types'; export interface UnsupportedApiVersionLog extends LogContent { type: 'Unsupported_Api_Version'; content: { apiVersion: string; supportedApiVersions: string[]; }; } export type ApiClientLogContentTypes = | LogContentTypes | UnsupportedApiVersionLog; export type ApiClientLogger = BaseLogger; export interface ApiClientConfig { storeDomain: string; apiVersion: string; headers: Headers; apiUrl: string; retries?: number; } export type ApiClientRequestOptions< Operation extends keyof Operations = string, Operations extends AllOperations = AllOperations, > = { apiVersion?: string; headers?: Headers; retries?: number; signal?: AbortSignal; } & (Operation extends keyof Operations ? OperationVariables : {variables?: Record}); export type ApiClientRequestParams< Operation extends keyof Operations, Operations extends AllOperations, > = [ operation: Operation, options?: ApiClientRequestOptions, ]; export type ApiClientFetch = < Operation extends keyof Operations = string, >( ...params: ApiClientRequestParams ) => Promise< ResponseWithType>> >; export type ApiClientRequest = ( ...params: ApiClientRequestParams ) => Promise< ClientResponse< TData extends undefined ? ReturnData : TData > >; export type ApiClientRequestStream< Operations extends AllOperations = AllOperations, > = ( ...params: ApiClientRequestParams ) => Promise< ClientStreamIterator< TData extends undefined ? ReturnData : TData > >; export interface ApiClient< TClientConfig extends ApiClientConfig = ApiClientConfig, Operations extends AllOperations = AllOperations, > { readonly config: Readonly; getHeaders: (headers?: Headers) => Headers; getApiUrl: (apiVersion?: string) => string; fetch: ApiClientFetch; request: ApiClientRequest; }