import CallableInstance from 'callable-instance';
import { GripInstruct, IGripConfig, Publisher, WebSocketContext } from '@fanoutio/grip';
import { IServeGripConfig } from './IServeGripConfig.js';
import type { IRequestGrip } from "./IRequestGrip.js";
import type { IResponseGrip } from "./IResponseGrip.js";
export type OnAfterSetupParams<TRequest, TResponse> = {
    req: TRequest;
    res: TResponse;
    wsContext: WebSocketContext | null;
    gripInstructGetter: () => GripInstruct | null;
};
type NextFunction = (e?: Error) => void;
export declare abstract class ServeGripBase<TRequest, TResponse> extends CallableInstance<[TRequest, TResponse, NextFunction], void> {
    gripProxies?: string | IGripConfig | IGripConfig[] | Publisher;
    prefix: string;
    isGripProxyRequired: boolean;
    _publisherClass?: {
        new (): Publisher;
    };
    _publisher?: Publisher;
    protected constructor(config?: IServeGripConfig, fn?: string);
    applyConfig(config?: IServeGripConfig): void;
    getPublisher(): Publisher;
    abstract getRequestGrip(req: TRequest): IRequestGrip | undefined;
    abstract setRequestGrip(req: TRequest, grip: IRequestGrip): void;
    abstract isRequestWsOverHttp(req: TRequest): boolean;
    abstract getRequestWebSocketContext(req: TRequest): Promise<WebSocketContext>;
    abstract getRequestHeaderValue(req: TRequest, key: string): string | undefined;
    abstract setResponseGrip(res: TResponse, grip: IResponseGrip): void;
    abstract setResponseStatus(res: TResponse, code: number): void;
    abstract endResponse(res: TResponse, chunk: string): TResponse;
    abstract onAfterSetup(params: OnAfterSetupParams<TRequest, TResponse>): void;
    run(req: TRequest, res: TResponse): Promise<boolean>;
}
export {};
//# sourceMappingURL=ServeGripBase.d.ts.map