/**
 * Copyright (c) 2020-present, Goldman Sachs
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import type { PlainObject } from '../CommonUtils.js';
import { type Parameters, type RequestHeaders, type RequestProcessConfig, type ResponseProcessConfig, HttpMethod } from './NetworkUtils.js';
import type { TraceData, TracerService } from './TracerService.js';
export interface ServerClientConfig {
    baseUrl?: string;
    queryBaseUrl?: string | undefined;
    networkClientOptions?: PlainObject;
    enableCompression?: boolean;
    /**
     * Allowing debugging payload so we can see the payload being sent to the server
     * This is needed due to a limitation with certain browsers (e.g. Chrome) where
     * when then payload gets huge, the developer tools can no longer display them
     * which makes it hard to debug.
     */
    enableDebuggingPayload?: boolean;
    payloadDebugger?: ((payload: unknown, identifier: string) => void) | undefined;
    baseHeaders?: RequestHeaders | undefined;
    /**
     * This supports a basic re-authenticate mechanism using <iframe>.
     * The provided URL will be loaded in the <iframe> in the background
     * and supposedly re-authentication would happen without user's action
     * i.e. could be that auth cookie is being refreshed.
     *
     * NOTE: this is very specific to the deployment context.
     */
    autoReAuthenticateUrl?: string;
}
/**
 * This is a template for server clients, it is a wrapper around `NetworkClient` with more features
 * such as request payload compression, etc.
 */
export declare abstract class AbstractServerClient {
    private networkClient;
    private _tracerService?;
    enableCompression: boolean;
    enableDebuggingPayload: boolean;
    payloadDebugger?: ((payload: unknown, identifier: string) => void) | undefined;
    baseUrl?: string | undefined;
    baseHeaders?: RequestHeaders | undefined;
    autoReAuthenticateUrl?: string | undefined;
    constructor(config: ServerClientConfig);
    setBaseUrl(val: string | undefined): void;
    setCompression(val: boolean): void;
    setDebugPayload(val: boolean): void;
    debugPayload<T>(payload: T, identifier: string): T;
    setTracerService(val: TracerService): void;
    private get tracerService();
    get<T>(url: string, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    put<T>(url: string, data?: unknown, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    post<T>(url: string, data?: unknown, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    delete<T>(url: string, data?: unknown, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    getWithTracing<T>(traceData: TraceData, url: string, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    putWithTracing<T>(traceData: TraceData, url: string, data?: unknown, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    postWithTracing<T>(traceData: TraceData, url: string, data?: unknown, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    deleteWithTracing<T>(traceData: TraceData, url: string, data?: unknown, options?: RequestInit, headers?: RequestHeaders, parameters?: Parameters, requestProcessConfig?: RequestProcessConfig, responseProcessConfig?: ResponseProcessConfig): Promise<T>;
    request<T>(method: HttpMethod, url: string, data: unknown, options: RequestInit, headers?: RequestHeaders | undefined, parameters?: Parameters | undefined, requestProcessConfig?: RequestProcessConfig | undefined, responseProcessConfig?: ResponseProcessConfig | undefined, traceData?: TraceData | undefined): Promise<T>;
}
//# sourceMappingURL=AbstractServerClient.d.ts.map