import IRequestInit from './types/IRequestInit.js';
import IResponse from './types/IResponse.js';
import IRequestInfo from './types/IRequestInfo.js';
import IBrowserFrame from '../browser/types/IBrowserFrame.js';
import IBrowserWindow from '../window/IBrowserWindow.js';
/**
 * Handles fetch requests.
 *
 * Based on:
 * https://github.com/node-fetch/node-fetch/blob/main/src/index.js
 *
 * @see https://fetch.spec.whatwg.org/#http-network-fetch
 */
export default class Fetch {
    #private;
    private reject;
    private resolve;
    private listeners;
    private isChunkedTransfer;
    private isProperLastChunkReceived;
    private previousChunk;
    private nodeRequest;
    private nodeResponse;
    private response;
    private responseHeaders;
    private request;
    private redirectCount;
    private disableCache;
    private disableCrossOriginPolicy;
    /**
     * Constructor.
     *
     * @param options Options.
     * @param options.browserFrame Browser frame.
     * @param options.window Window.
     * @param options.url URL.
     * @param [options.init] Init.
     * @param [options.redirectCount] Redirect count.
     * @param [options.contentType] Content Type.
     * @param [options.disableCache] Disables the use of cached responses. It will still store the response in the cache.
     * @param [options.disableCrossOriginPolicy] Disables the Cross-Origin policy.
     */
    constructor(options: {
        browserFrame: IBrowserFrame;
        window: IBrowserWindow;
        url: IRequestInfo;
        init?: IRequestInit;
        redirectCount?: number;
        contentType?: string;
        disableCache?: boolean;
        disableCrossOriginPolicy?: boolean;
    });
    /**
     * Sends request.
     *
     * @returns Response.
     */
    send(): Promise<IResponse>;
    /**
     * Returns cached response.
     *
     * @returns Response.
     */
    private getCachedResponse;
    /**
     * Checks if the request complies with the Cross-Origin policy.
     *
     * @returns True if it complies with the policy.
     */
    private compliesWithCrossOriginPolicy;
    /**
     * Sends request.
     *
     * @returns Response.
     */
    private sendRequest;
    /**
     * Event listener for "socket" event.
     *
     * @param socket Socket.
     */
    private onSocket;
    /**
     * Event listener for signal "abort" event.
     *
     * @param event Event.
     */
    private onSignalAbort;
    /**
     * Event listener for request "error" event.
     *
     * @param error Error.
     */
    private onError;
    /**
     * Triggered when the async task manager aborts.
     */
    private onAsyncTaskManagerAbort;
    /**
     * Event listener for request "response" event.
     *
     * @param nodeResponse Node response.
     */
    private onResponse;
    /**
     * Handles redirect response.
     *
     * @param nodeResponse Node response.
     * @param responseHeaders Headers.
     * @returns True if redirect response was handled, false otherwise.
     */
    private handleRedirectResponse;
    /**
     * Finalizes the request.
     */
    private finalizeRequest;
    /**
     * Aborts the request.
     *
     * @param reason Reason.
     */
    private abort;
    /**
     * Wraps a Node.js stream into a browser-compatible ReadableStream.
     *
     * Enables the use of Node.js streams where browser ReadableStreams are required.
     * Handles 'data', 'end', and 'error' events from the Node.js stream.
     *
     * @param nodeStream The Node.js stream to be converted.
     * @returns ReadableStream
     */
    private nodeToWebStream;
}
//# sourceMappingURL=Fetch.d.ts.map