import { type URLSearchParamsInit } from '@opra/common';
import { Observable } from 'rxjs';
import { kBackend, kContext } from '../constants.js';
import { HttpObserveType } from './enums/http-observable-type.enum.js';
import { HttpBackend } from './http-backend.js';
import { HttpResponse } from './http-response.js';
import { type HttpEvent } from './interfaces/http-event.js';
/**
 *
 * @class HttpRequestObservable
 */
export declare class HttpRequestObservable<T, TBody = T, TRequestOptions = {}, TResponseExt = {}> extends Observable<T> {
    [kBackend]: HttpBackend;
    [kContext]: {
        observe: HttpObserveType;
        method: string;
        url: URL;
        headers: Headers;
        [key: string]: any;
    };
    constructor(backend: HttpBackend, init?: HttpBackend.RequestInit);
    clone(): HttpRequestObservable<T, TBody, TRequestOptions, TResponseExt>;
    options(options: TRequestOptions): HttpRequestObservable<T, TBody, TRequestOptions, TResponseExt>;
    header(headers: HeadersInit): this;
    header(name: string, value?: string | number | boolean | null): this;
    param(params: URLSearchParamsInit | Record<string, string | number | boolean | Date>): this;
    param(name: string, value: any): this;
    observe(observe: HttpObserveType.Body): HttpRequestObservable<TBody, TBody, TRequestOptions, TResponseExt>;
    observe(observe: HttpObserveType.ResponseHeader): HttpRequestObservable<HttpResponse<void> & TResponseExt, TBody, TRequestOptions, TResponseExt>;
    observe(observe: HttpObserveType.Response): HttpRequestObservable<HttpResponse<TBody> & TResponseExt, TBody, TRequestOptions, TResponseExt>;
    observe(observe: HttpObserveType.Events): HttpRequestObservable<HttpEvent<TBody, TResponseExt>, TBody, TRequestOptions, TResponseExt>;
    getBody(): Promise<TBody>;
    getResponse(): Promise<HttpResponse<TBody> & TResponseExt>;
}
