import { Observable } from 'rxjs';
import type { Combine, StrictOmit } from 'ts-gems';
import { HttpBackend } from './http-backend.js';
import { HttpResponse } from './http-response.js';
import { type HttpEvent } from './interfaces/http-event.js';
import type { HttpInterceptor } from './interfaces/http-interceptor.js';
/**
 *
 * @class FetchBackend
 */
export declare class FetchBackend extends HttpBackend {
    interceptors: FetchBackend.Interceptor[];
    defaults: FetchBackend.RequestDefaults;
    constructor(serviceUrl: string, options?: FetchBackend.Options);
    handle(init: FetchBackend.RequestInit): Observable<HttpEvent>;
    protected send(request: Request): Promise<Response>;
    protected prepareRequest(init: FetchBackend.RequestInit): Request;
    protected createResponse(init: HttpResponse.Initiator): HttpResponse;
    protected parseBody(fetchResponse: Response): Promise<any>;
}
type DomRequestInit = RequestInit;
/**
 * @namespace FetchBackend
 */
export declare namespace FetchBackend {
    type Interceptor = HttpInterceptor<RequestInit>;
    interface Options extends HttpBackend.Options {
        interceptors?: Interceptor[];
        defaults?: RequestDefaults;
    }
    interface RequestInit extends Combine<StrictOmit<HttpBackend.RequestInit, 'body'>, DomRequestInit> {
        duplex?: string;
        reportProgress?: boolean;
    }
    interface RequestOptions extends Partial<Pick<RequestInit, 'cache' | 'credentials' | 'integrity' | 'keepalive' | 'mode' | 'redirect' | 'referrer' | 'referrerPolicy' | 'reportProgress'>> {
    }
    type RequestDefaults = RequestOptions & {
        headers: Headers;
        params: URLSearchParams;
    };
}
export {};
