/**
 * Request - HTTP Request wrapper
 * Wraps Node.js IncomingMessage with additional utilities
 */
import type { FileUploadOptions, IFileUploadHandler, UploadedFile } from './FileUpload';
import type * as http from '../node-singletons/http';
import type { JwtPayload } from '../security/JwtManager';
type HeadParam = string | string[] | undefined;
export interface IRequest {
    sessionId: HeadParam;
    user: JwtPayload | undefined;
    params: Record<string, string>;
    body: Record<string, unknown>;
    validated: {
        body?: unknown;
        query?: unknown;
        params?: unknown;
        headers?: unknown;
    };
    getMethod(): string;
    getPath(): string;
    getHeaders(): http.IncomingHttpHeaders;
    readonly headers: http.IncomingHttpHeaders;
    getHeader(name: string): HeadParam;
    getParams(): Record<string, string>;
    getParam(key: string): string | undefined;
    setParams(params: Record<string, string>): void;
    getQuery(): Record<string, string | string[]>;
    getQueryParam(key: string): HeadParam;
    setBody(body: unknown): void;
    getBody(): unknown;
    isJson(): boolean;
    getRaw(): http.IncomingMessage;
    context: Record<string, unknown>;
    file(fieldName: string, options?: FileUploadOptions): UploadedFile | undefined;
    files(fieldName: string, options?: FileUploadOptions): UploadedFile[];
    hasFile(fieldName: string): boolean;
    fileUpload(): IFileUploadHandler;
    /**
     * Unified data access
     * Returns merged object from Body > Path Params > Query Params
     */
    data(): Record<string, unknown>;
    /**
     * Get specific field from unified data
     */
    get<T = unknown>(key: string, defaultValue?: T): T;
}
export type ValidatedRequest<TBody = unknown, TQuery = unknown, TParams = unknown, THeaders = unknown> = Omit<IRequest, 'validated'> & {
    validated: {
        body: TBody;
        query: TQuery;
        params: TParams;
        headers: THeaders;
    };
};
export declare const Request: Readonly<{
    /**
     * Create a new request instance
     */
    create(req: http.IncomingMessage): IRequest;
}>;
export default Request;
//# sourceMappingURL=Request.d.ts.map