import { redis } from './redis'; import { getRedisKey, parseRedisInt } from './quota-utils'; const TTL_SECONDS = 90 * 24 * 60 * 60; export function trackFeatureUsage( userId: string, feature: string, tokensUsed: number, ): void { if (tokensUsed < 0) { console.warn('[usage-tracker] Negative tokensUsed ignored:', tokensUsed); return; } if (tokensUsed === 0) return; const key = getRedisKey(userId, feature); redis .pipeline() .incrbyfloat(`${key}:tokens`, tokensUsed) .expire(`${key}:tokens`, TTL_SECONDS) .exec() .catch((err) => { console.error('[usage-tracker] Failed to track token usage:', err); }); } export async function getUsageCounter( userId: string, feature: string, ): Promise<{ requests: number; tokens: number }> { const key = getRedisKey(userId, feature); const [requests, tokens] = await Promise.all([ redis.get(key), redis.get(`${key}:tokens`), ]); return { requests: parseRedisInt(requests), tokens: parseRedisInt(tokens), }; }