import type { NextFunction, Request, Response } from 'express';
import Joi from 'joi';
export interface ValidationConfig {
    stripUnknown?: boolean;
    abortEarly?: boolean;
    allowUnknown?: boolean;
    context?: Record<string, unknown>;
    errorFormatter?: (error: Joi.ValidationError) => import('@iota-big3/sdk-types').ApiError;
}
export interface ValidationSchemas {
    body?: Joi.Schema;
    query?: Joi.Schema;
    params?: Joi.Schema;
    headers?: Joi.Schema;
}
export interface ValidationContext {
    body?: unknown;
    params?: Record<string, string>;
    query?: Record<string, unknown>;
    headers?: Record<string, string | string[] | undefined>;
    context?: Record<string, unknown>;
}
export declare class InputValidator {
    private config;
    private logger?;
    private schemas;
    private violations;
    constructor(config?: ValidationConfig, logger?: Logger);
    registerSchema(): void;
    validate(): (req: Request, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>;
    private validateDataAsync;
    private defaultErrorFormatter;
    static schemas: {
        id: Joi.StringSchema<string>;
        email: Joi.StringSchema<string>;
        password: Joi.StringSchema<string>;
        username: Joi.StringSchema<string>;
        phone: Joi.StringSchema<string>;
        url: Joi.StringSchema<string>;
        pagination: {
            page: Joi.NumberSchema<number>;
            limit: Joi.NumberSchema<number>;
            sort: Joi.StringSchema<string>;
            sortBy: Joi.StringSchema<string>;
        };
        createUser: {
            body: Joi.ObjectSchema<any>;
        };
        updateUser: {
            body: Joi.ObjectSchema<any>;
        };
        login: {
            body: Joi.ObjectSchema<any>;
        };
    };
    static createValidator(name: string, validator: (value: unknown, helpers: Joi.CustomHelpers) => unknown): any;
    static sanitizers: {
        trim: (value: string) => string;
        lowercase: (value: string) => string;
        uppercase: (value: string) => string;
        escape: (value: string) => string;
        normalizeEmail: (value: string) => string;
    };
}
//# sourceMappingURL=input-validator.d.ts.map