/**
 * Usage tracker.
 *
 * Пишет напрямую в Postgres `mcp_billing.usage_daily` (UPSERT per app+date+tool).
 * Со временем будет заменён на Redis INCR + hourly flush — интерфейс останется
 * тем же, так что вызывающий код не нужно будет править.
 *
 * Поведение:
 *   - Silent fail при ошибке БД (как и audit) — usage tracking не блокирует tool-call.
 *   - Fire-and-forget: caller вызывает через `void trackUsage(...)`.
 *   - AI-tools (см. `isAiTool` из `./limits.ts`) дополнительно учитываются в
 *     отдельной AI-квоте через `aiTodayUsage` + `checkAiQuota`.
 */
import type { Logger } from 'pino';
import { type McpPrismaClient } from '../audit/prisma.js';
import { type QuotaDecision, type Tier } from './limits.js';
export interface TrackUsageParams {
    appId: string;
    tool: string;
    bytesOut: number;
    /** Можно явно передать дату (для тестов). По умолчанию today UTC. */
    date?: Date;
}
export interface UsageTrackerOptions {
    databaseUrl?: string;
    log?: Logger;
    prismaOverride?: McpPrismaClient | null;
}
export interface UsageTracker {
    trackUsage(params: TrackUsageParams): Promise<void>;
    /**
     * Возвращает текущее число использований за сегодня UTC (sum по всем tools).
     * Используется как source для `checkQuota`.
     */
    todayUsage(appId: string, now?: Date): Promise<number>;
    checkQuota(appId: string, tier: Tier, now?: Date): Promise<QuotaDecision>;
    /**
     * Возвращает текущее число AI-tool вызовов за сегодня UTC (sum по
     * tools, отвечающим `isAiTool`).
     */
    aiTodayUsage(appId: string, now?: Date): Promise<number>;
    checkAiQuota(appId: string, tier: Tier, now?: Date): Promise<QuotaDecision>;
}
export declare function createUsageTracker(opts?: UsageTrackerOptions): UsageTracker;
export declare function getUsageTracker(opts?: UsageTrackerOptions): UsageTracker;
export declare function setUsageTrackerForTests(t: UsageTracker | null): void;
//# sourceMappingURL=tracker.d.ts.map