/// <reference types="node" />
/// <reference types="node" />
import { Request, Response } from 'node-fetch';
import { NylasConfig, OverridableNylasConfig } from './config.js';
import FormData from 'form-data';
/**
 * The header key for the debugging flow ID
 */
export declare const FLOW_ID_HEADER = "x-fastly-id";
/**
 * The header key for the request ID
 */
export declare const REQUEST_ID_HEADER = "x-request-id";
/**
 * Options for a request to the Nylas API
 * @property path The path to the API endpoint
 * @property method The HTTP method to use
 * @property headers Additional headers to send with the request
 * @property queryParams Query parameters to send with the request
 * @property body The body of the request
 * @property overrides Overrides to the default Nylas API client configuration
 * @ignore Not for public use
 */
export interface RequestOptionsParams {
    path: string;
    method: string;
    headers?: Record<string, string>;
    queryParams?: Record<string, any>;
    body?: any;
    form?: FormData;
    overrides?: OverridableNylasConfig;
}
/**
 * Options for building a request for fetch to understand
 * @property path The path to the API endpoint
 * @property method The HTTP method to use
 * @property headers Additional headers to send with the request
 * @property url The URL of the request
 * @property body The body of the request
 * @property overrides Overrides to the default Nylas API client configuration
 * @ignore Not for public use
 */
interface RequestOptions {
    path: string;
    method: string;
    headers: Record<string, string>;
    url: URL;
    body?: any;
    overrides?: Partial<NylasConfig>;
}
/**
 * The API client for communicating with the Nylas API
 * @ignore Not for public use
 */
export default class APIClient {
    /**
     * The API key to use for authentication
     */
    apiKey: string;
    /**
     * The URL to use for communicating with the Nylas API
     */
    serverUrl: string;
    /**
     * The timeout for requests to the Nylas API, in seconds
     */
    timeout: number;
    /**
     * Additional headers to send with outgoing requests
     */
    headers: Record<string, string>;
    constructor({ apiKey, apiUri, timeout, headers }: Required<NylasConfig>);
    private setRequestUrl;
    private setQueryStrings;
    private setRequestHeaders;
    private sendRequest;
    requestOptions(optionParams: RequestOptionsParams): RequestOptions;
    newRequest(options: RequestOptionsParams): Request;
    requestWithResponse<T>(response: Response): Promise<T>;
    request<T>(options: RequestOptionsParams): Promise<T>;
    requestRaw(options: RequestOptionsParams): Promise<Buffer>;
    requestStream(options: RequestOptionsParams): Promise<NodeJS.ReadableStream>;
}
export {};
