import type { Optional } from '../utils/optionals';
export type HttpStatusCode = 200 | 201 | 204 | 400 | 401 | 403 | 404 | 422 | 500 | 502 | 503;
export type StatusCodeString = 'invalid';
export type ErrorCode = Optional<HttpStatusCode | StatusCodeString>;
export interface CustomErrorsArgs {
    message: string;
    reason?: Optional<string>;
    metadata?: Optional<Record<string, unknown>>;
    error?: Optional<Error>;
    component?: Optional<string>;
    operation?: Optional<string>;
}
export interface CustomErrorArgs {
    message: string;
    code?: ErrorCode;
    reason?: Optional<string>;
    metadata?: Optional<Record<string, unknown>>;
    error?: Optional<Error>;
    component?: Optional<string>;
    operation?: Optional<string>;
}
export declare class CustomError extends Error {
    readonly custom: boolean;
    readonly code: ErrorCode;
    readonly reason?: Optional<string>;
    readonly metadata?: Optional<Record<string, unknown>>;
    readonly error?: Optional<Error>;
    readonly time: Date;
    readonly id: string;
    readonly correlationId: string;
    readonly component?: Optional<string>;
    readonly operation?: Optional<string>;
    constructor({ message, code, reason, metadata, error, correlationId, component, operation, }: CustomErrorArgs & {
        correlationId?: string;
    });
    toJSON(): {
        name: string;
        message: string;
        code?: ErrorCode;
        reason?: string;
        metadata?: Record<string, unknown>;
        component?: string;
        operation?: string;
        error?: {
            name: string;
            message: string;
            stack?: string;
        };
        time: string;
        id: string;
        correlationId: string;
        stack?: string | undefined;
        custom: boolean;
    };
    toString(): string;
}
//# sourceMappingURL=custom.d.ts.map