import { ToolResponse } from '../types/index.js';
export declare enum ErrorCode {
    VALIDATION_ERROR = "VALIDATION_ERROR",
    SANITIZATION_ERROR = "SANITIZATION_ERROR",
    DATABASE_ERROR = "DATABASE_ERROR",
    SEARCH_ERROR = "SEARCH_ERROR",
    EXTERNAL_API_ERROR = "EXTERNAL_API_ERROR",
    AUTHENTICATION_ERROR = "AUTHENTICATION_ERROR",
    AUTHORIZATION_ERROR = "AUTHORIZATION_ERROR",
    NOT_FOUND = "NOT_FOUND",
    INTERNAL_ERROR = "INTERNAL_ERROR",
    RATE_LIMIT_ERROR = "RATE_LIMIT_ERROR",
    TIMEOUT_ERROR = "TIMEOUT_ERROR",
    CONFIGURATION_ERROR = "CONFIGURATION_ERROR"
}
export interface ErrorDetails {
    code: ErrorCode;
    message: string;
    field?: string;
    details?: any;
    correlationId?: string;
    timestamp?: Date;
    retryable?: boolean;
}
export declare class BaseError extends Error {
    readonly code: ErrorCode;
    readonly statusCode: number;
    readonly isOperational: boolean;
    readonly field?: string;
    readonly details?: any;
    readonly correlationId: string;
    readonly timestamp: Date;
    readonly retryable: boolean;
    constructor(errorDetails: ErrorDetails, statusCode?: number, isOperational?: boolean);
    private generateCorrelationId;
    toJSON(): {
        name: string;
        message: string;
        code: ErrorCode;
        statusCode: number;
        field: string | undefined;
        details: any;
        correlationId: string;
        timestamp: string;
        retryable: boolean;
    };
}
export declare class ValidationError extends BaseError {
    constructor(message: string, field?: string, details?: any);
}
export declare class SanitizationError extends BaseError {
    constructor(message: string, details?: any);
}
export declare class DatabaseError extends BaseError {
    constructor(message: string, details?: any, retryable?: boolean);
}
export declare class SearchError extends BaseError {
    constructor(message: string, details?: any, retryable?: boolean);
}
export declare class ExternalApiError extends BaseError {
    constructor(message: string, details?: any, retryable?: boolean);
}
export declare class NotFoundError extends BaseError {
    constructor(message: string, details?: any);
}
export declare class ConfigurationError extends BaseError {
    constructor(message: string, details?: any);
}
export declare class TimeoutError extends BaseError {
    constructor(message: string, details?: any);
}
export declare class ErrorHandlingMiddleware {
    private static instance;
    private constructor();
    static getInstance(): ErrorHandlingMiddleware;
    handleError(error: Error | BaseError, toolName?: string): ToolResponse;
    wrapAsyncOperation<T>(operation: () => Promise<T>, errorContext?: {
        toolName?: string;
        operationType?: string;
        timeout?: number;
    }): Promise<T>;
    private logError;
    private createErrorResponse;
    private normalizeError;
    private isRetryableMongoError;
    private sanitizeErrorMessage;
    private generateCorrelationId;
    isOperationalError(error: Error): boolean;
    shouldRetry(error: Error): boolean;
}
export declare const errorHandlingMiddleware: ErrorHandlingMiddleware;
