import { OpenAlexConfig } from "./types";
export interface FetchResponse<T> {
    data: T;
    status: number;
    statusText: string;
    headers: Headers;
}
export declare class OpenAlexClient {
    private config;
    private abortController?;
    constructor(config?: OpenAlexConfig);
    private buildURL;
    private makeRequest;
    private parseJSON;
    private safeParseJSON;
    private createHTTPError;
    private shouldRetry;
    private handleError;
    private sleep;
    get<T>(endpoint: string, params?: Record<string, any>): Promise<FetchResponse<T>>;
    post<T>(endpoint: string, data?: any, params?: Record<string, any>): Promise<FetchResponse<T>>;
    put<T>(endpoint: string, data?: any, params?: Record<string, any>): Promise<FetchResponse<T>>;
    delete<T>(endpoint: string, params?: Record<string, any>): Promise<FetchResponse<T>>;
    updateConfig(newConfig: Partial<OpenAlexConfig>): void;
    abort(): void;
    getConfig(): Required<OpenAlexConfig>;
}
//# sourceMappingURL=client.d.ts.map