import { type RequestInit } from 'node-fetch';
import { CommunicatorConfiguration } from '../CommunicatorConfiguration.js';
import { RequestHeaderGenerator } from '../RequestHeaderGenerator.js';
import type { FetchOptions } from '../types/FetchOptions.js';
export declare const MERCHANT_ID_REQUIRED_ERROR = "Merchant ID is required";
export declare const COMMERCE_CASE_ID_REQUIRED_ERROR = "Commerce Case ID is required";
export declare const CHECKOUT_ID_REQUIRED_ERROR = "Checkout ID is required";
export declare class BaseApiClient {
    protected static parseVoid(): void;
    protected static parseJson<T>(body: string): T;
    protected readonly requestHeaderGenerator: RequestHeaderGenerator;
    protected readonly config: CommunicatorConfiguration;
    private clientFetchOptions?;
    constructor(config: CommunicatorConfiguration, clientFetchOptions?: FetchOptions);
    protected getRequestHeaderGenerator(): RequestHeaderGenerator | undefined;
    getConfig(): CommunicatorConfiguration;
    /**
     * Set client-specific fetch options that will override global configuration options.
     * @param fetchOptions - Custom fetch options for this API client instance
     */
    setFetchOptions(fetchOptions: FetchOptions): void;
    /**
     * Get the effective fetch options by merging global and client-specific options.
     * Client-specific options take precedence over global options.
     */
    private getEffectiveFetchOptions;
    protected makeApiCall<T>(url: string, requestInit: RequestInit, parseBody?: (body: string) => T): Promise<T>;
}
