import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs';
import { KubernetesResource, KubernetesResourceList } from '../core/public-api';
import { ClusterVersionService } from './cluster-version.service';
import { K8sResourceDefinition } from './types';
export declare abstract class ApiCompatibleInterceptor implements HttpInterceptor {
    abstract matchUrl(req: string): MatchResult;
    abstract responseAdapters: ResponseAdapter[];
    abstract requestAdapters: RequestAdapter[];
    protected clusterVersion: ClusterVersionService;
    intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>>;
    private executeRequestDowngrade;
    private executeRequestBodyDowngrade;
    private executeResponseBodyUpgrade;
}
interface Adapter {
    clusterVersion: string;
    httpMethods?: string[];
}
export interface ResponseAdapter extends Adapter {
    bodyUpgrade: (body: unknown) => unknown;
}
export interface RequestAdapter extends Adapter {
    bodyDowngrade?: (body: unknown) => unknown;
    requestDowngrade?: (req: HttpRequest<unknown>) => HttpRequest<unknown>;
}
export interface MatchResult {
    matched: boolean;
    cluster?: string;
}
export declare function k8sApiMatcher(resourceType: string | K8sResourceDefinition): (url: string) => {
    matched: boolean;
    cluster: string;
} | {
    matched: boolean;
    cluster?: undefined;
};
export declare function k8sResourceOrList(mapper: (res: KubernetesResource) => KubernetesResource): (res: KubernetesResource | KubernetesResourceList) => KubernetesResource | {
    items: KubernetesResource[];
    metadata?: import("../core/public-api").ObjectMeta;
    spec?: unknown;
    status?: unknown;
    kind?: string;
    apiVersion?: string;
};
export {};
