type NextFetchOptions = { next?: { tags?: string[] revalidate?: number } } type Config = { accessKeyName?: string refreshKeyName?: string languageCookieName?: string baseUrl?: string servicesWithoutToken?: RegExp[] params?: Record decamelizeRequestBodyKeys?: boolean decamelizeRequestParamsKeys?: boolean camelizeResponseDataKeys?: boolean stringifyBody?: boolean setContentType?: boolean throwError?: boolean refreshToken?: boolean tokenType?: 'Bearer' | 'Token' } type GraphQLBody = { query: string | null variables?: Record operationName?: string operationKind?: string } type ExtraHeaders = { Accept?: string 'Content-Type'?: string Authorization?: string 'Accept-Language'?: string } export interface RequestOptions extends Omit { body?: string | object | GraphQLBody headers?: RequestInit['headers'] & ExtraHeaders } export type BaseAppFetchOptions = RequestOptions & NextFetchOptions & Config export type BaseAppFetch = ( path: `/${string}` | '', options?: BaseAppFetchOptions, ) => Promise