/**
 * Audit log service.
 *
 * Контракт:
 *   - `recordToolCall` записывает строку в `mcp_audit.audit_log`.
 *   - Hash-chain: каждая запись хранит sha256(prev row content) и sha256(этой
 *     row). Внутри транзакции SELECT FOR UPDATE предыдущей строки + INSERT.
 *   - Silent fail: если БД недоступна / ошибка вставки — логируем warn и не
 *     падаем (tool-call продолжает работать). Audit не блокирует business flow.
 *   - Hash считается над **detерминированным** JSON-представлением полей (см.
 *     `rowContent`), чтобы потом chain-verifier мог пересчитать.
 *
 * См. 06-security.md §3.
 */
import type { Logger } from 'pino';
import { type McpPrismaClient } from './prisma.js';
export interface RecordToolCallParams {
    appId: string;
    /** Первые 8 chars API-ключа (НЕ полный key). */
    keyId: string;
    tool: string;
    args: Record<string, unknown>;
    resultBytes: number;
    latencyMs: number;
    cacheHit?: boolean;
    ip?: string | null;
    userAgent?: string | null;
    sessionId?: string | null;
    statusCode: number;
    error?: string | null;
}
export interface AuditServiceOptions {
    databaseUrl?: string;
    log?: Logger;
    /** Для тестов — позволяет инжектировать mock-prisma. */
    prismaOverride?: McpPrismaClient | null;
}
/**
 * Детерминированная сериализация для hash-chain. Поля упорядочены, BigInt'ы
 * приведены к string, undefined пропущены. Если когда-нибудь захотим
 * пересчитать chain — будем использовать ту же функцию.
 */
export declare function rowContent(p: {
    appId: string;
    keyId: string;
    tool: string;
    args: Record<string, unknown>;
    resultBytes: number;
    latencyMs: number;
    cacheHit: boolean;
    statusCode: number;
    error?: string | null;
    createdAt: string;
    prevHash: string | null;
}): string;
export declare function sha256Hex(input: string): string;
export interface AuditService {
    recordToolCall(params: RecordToolCallParams): Promise<void>;
    /** Для тестов / health-checks. */
    verifyChain(appId: string): Promise<{
        ok: boolean;
        brokenAt?: string;
    }>;
}
/**
 * Создаёт audit-service. Если prisma недоступен — все методы no-op.
 */
export declare function createAuditService(opts?: AuditServiceOptions): AuditService;
export declare function getAuditService(opts?: AuditServiceOptions): AuditService;
/** Для тестов. */
export declare function setAuditServiceForTests(svc: AuditService | null): void;
//# sourceMappingURL=service.d.ts.map