import { type IncomingMessage, type ServerResponse } from 'node:http';
import { GripInstruct, WebSocketContext } from '@fanoutio/grip';
import { type IRequestGrip } from '../IRequestGrip.js';
import { type IResponseGrip } from '../IResponseGrip.js';
import { type IServeGripConfig } from '../IServeGripConfig.js';
import { type OnAfterSetupParams, ServeGripBase } from '../ServeGripBase.js';
declare module 'node:http' {
    interface IncomingMessage {
        grip?: IRequestGrip;
    }
    interface ServerResponse {
        grip?: IResponseGrip;
    }
}
type NextFunction = (e?: Error) => void;
export declare class ServeGrip extends ServeGripBase<IncomingMessage, ServerResponse> {
    koa: (ctx: any, next: () => Promise<void>) => Promise<void>;
    constructor(config?: IServeGripConfig, fn?: string);
    exec(req: IncomingMessage, res: ServerResponse, fn: NextFunction): void;
    getRequestGrip(req: IncomingMessage): IRequestGrip | undefined;
    setRequestGrip(req: IncomingMessage, grip: IRequestGrip): void;
    isRequestWsOverHttp(req: IncomingMessage): boolean;
    getRequestWebSocketContext(req: IncomingMessage): Promise<WebSocketContext>;
    getRequestHeaderValue(req: IncomingMessage, key: string): string | undefined;
    setResponseGrip(res: ServerResponse, grip: IResponseGrip): void;
    setResponseStatus(res: ServerResponse, code: number): void;
    endResponse(res: ServerResponse, chunk: string): ServerResponse<IncomingMessage>;
    onAfterSetup(params: OnAfterSetupParams<IncomingMessage, ServerResponse>): void;
    monkeyPatchResMethodsForWebSocket(res: ServerResponse, wsContext: WebSocketContext): void;
    monkeyPatchResMethodsForGripInstruct(res: ServerResponse, gripInstructGetter: () => GripInstruct | null): void;
}
export {};
//# sourceMappingURL=ServeGrip.d.ts.map