import { type ErrorCode, type ErrorDetails } from './catalog';
export declare class AppError<C extends ErrorCode> extends Error {
    readonly code: C;
    readonly kind: 'domain' | 'system';
    readonly status: number;
    readonly details: ErrorDetails<C>;
    constructor(code: C, details: ErrorDetails<C>, message?: string);
    is<T extends ErrorCode>(code: T): this is AppError<T>;
    toJSON(): {
        code: C;
        kind: "domain" | "system";
        status: number;
        message: string;
        details: ErrorDetails<C>;
    };
    static fromResponse(body: unknown): AppError<ErrorCode>;
}
//# sourceMappingURL=app_error.d.ts.map