/// <reference types="node" />
import { Readable } from 'stream';
export interface IRequestDefaults {
    /**
     * Request method.
     */
    method?: string;
    /**
     * Request headers.
     */
    headers?: {
        [key: string]: string;
    };
    /**
     * Gzip compression.
     */
    gzip?: boolean;
    /**
     * Body encoding used for callback functions.
     */
    encoding?: string | null;
    /**
     * Request timeout.
     */
    timeout?: number;
}
export interface IRequestOptions extends IRequestDefaults {
    /**
     * URL string.
     */
    url: string;
}
export interface IRequestResponse {
    /**
     * Status code.
     */
    statusCode: number;
    /**
     * Response headers, all lowercase.
     */
    headers: {
        [key: string]: string;
    };
}
export interface IRequestStream extends Readable {
    on(event: 'error', listener: (e: Error) => void): this;
    on(event: 'response', listener: (resp: IRequestResponse) => void): this;
    on(event: 'data', listener: (data: Buffer | string) => void): this;
    on(event: 'complete', listener: (resp: IRequestResponse) => void): this;
    on(event: string | symbol, listener: (...args: any[]) => void): this;
    abort(): void;
}
export declare type IRequestCallback = (error: any, response: IRequestResponse, body: any) => void;
export declare type IRequestFactory = (options: IRequestOptions, cb?: IRequestCallback) => IRequestStream;
/**
 * RequestStream, similar to the deprecated request module stream.
 */
export declare class RequestStream extends Readable {
    /**
     * Request options.
     */
    private _options_;
    /**
     * Abort controller.
     */
    private _abortController_;
    /**
     * Create RequestStream.
     *
     * @param options Request options.
     */
    constructor(options: Readonly<IRequestOptions>);
    /**
     * Abort request.
     */
    abort(): void;
    /**
     * Read implementation.
     *
     * @param _size Size to be read.
     */
    _read(_size: number): void;
    /**
     * Destroy implementation.
     *
     * @param error Error object.
     * @param callback Callback function.
     */
    _destroy(error: Error | null, callback: (error?: Error | null) => void): void;
    /**
     * Request factory.
     *
     * @param defaults Default options.
     * @returns Request factory.
     */
    static factory(defaults?: Readonly<IRequestDefaults>): IRequestFactory;
}
