{"version":3,"sources":["../src/core/Provider.ts","../src/storage/index.ts","../src/core/context.ts","../src/utils/costs.ts","../src/cloud/pricingFetcher.ts","../src/config/index.ts","../src/cloud/index.ts","../src/core/gating.ts","../src/features/hooks.ts","../src/features/recommendations.ts","../src/core/Tracker.ts","../src/providers/openai.ts","../src/providers/anthropic.ts","../src/providers/gemini.ts","../src/index.ts","../src/middleware/index.ts","../src/middleware/context.ts","../src/features/alerts.ts","../src/core/auto.ts"],"sourcesContent":["import { UsageMetrics } from '../types/index.js';\n\nexport interface AIProviderTracker<T = any, R = any> {\n  name: string;\n  trackRequest(params: T): void;\n  trackResponse(response: R): UsageMetrics;\n  calculateCost(model: string, promptTokens: number, completionTokens: number): number;\n}\n\nexport abstract class BaseProviderTracker<T = any, R = any> implements AIProviderTracker<T, R> {\n  abstract name: string;\n  protected costTable: Record<string, { prompt: number; completion: number }>;\n\n  constructor(costTable: Record<string, { prompt: number; completion: number }>) {\n    this.costTable = costTable;\n  }\n\n  abstract trackRequest(params: T): void;\n  abstract trackResponse(response: R): UsageMetrics;\n\n  calculateCost(model: string, promptTokens: number, completionTokens: number): number {\n    const costInfo = this.costTable[model] || { prompt: 0, completion: 0 };\n    const promptCost = (promptTokens / 1000) * costInfo.prompt;\n    const completionCost = (completionTokens / 1000) * costInfo.completion;\n    return Number((promptCost + completionCost).toFixed(6));\n  }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { UsageMetrics } from '../types/index.js';\n\nexport interface StorageProvider {\n  save(metrics: UsageMetrics): Promise<void>;\n  getAll(): Promise<UsageMetrics[]>;\n}\n\nexport class JSONStorage implements StorageProvider {\n  private filePath: string;\n\n  constructor(filePath?: string) {\n    this.filePath = filePath || path.join(process.cwd(), '.ai-usage.json');\n  }\n\n  private async ensureFile(): Promise<void> {\n    if (!fs.existsSync(this.filePath)) {\n      await fs.promises.writeFile(this.filePath, JSON.stringify([], null, 2));\n    }\n  }\n\n  async save(metrics: UsageMetrics): Promise<void> {\n    await this.ensureFile();\n    const data = await this.getAll();\n    data.push(metrics);\n    await fs.promises.writeFile(this.filePath, JSON.stringify(data, null, 2));\n  }\n\n  async getAll(): Promise<UsageMetrics[]> {\n    await this.ensureFile();\n    const content = await fs.promises.readFile(this.filePath, 'utf-8');\n    try {\n      return JSON.parse(content);\n    } catch (e) {\n      return [];\n    }\n  }\n}\n","import { AsyncLocalStorage } from 'async_hooks';\nimport { AITrackingContext } from '../types/index.js';\n\nconst contextStorage = new AsyncLocalStorage<AITrackingContext>();\n\nexport function setGlobalAIContext(context: AITrackingContext) {\n  // This sets a default for the current execution context\n  const current = contextStorage.getStore() || {};\n  contextStorage.enterWith({ ...current, ...context });\n}\n\nexport function getGlobalAIContext(): AITrackingContext {\n  return contextStorage.getStore() || {};\n}\n\nexport { contextStorage };\n","import { CostTable } from '../types/index.js';\n\nexport const OPENAI_COSTS: CostTable = {\n  'gpt-4o': { prompt: 0.005, completion: 0.015 },\n  'gpt-4o-mini': { prompt: 0.00015, completion: 0.0006 },\n  'gpt-4-turbo': { prompt: 0.01, completion: 0.03 },\n  'gpt-3.5-turbo': { prompt: 0.0005, completion: 0.0015 },\n};\n\nexport const ANTHROPIC_COSTS: CostTable = {\n  'claude-3-opus': { prompt: 0.015, completion: 0.075 },\n  'claude-3-sonnet': { prompt: 0.003, completion: 0.015 },\n  'claude-3-haiku': { prompt: 0.00025, completion: 0.00125 },\n  'claude-3-5-sonnet': { prompt: 0.003, completion: 0.015 },\n};\n\nexport const GEMINI_COSTS: CostTable = {\n  'gemini-1.5-pro': { prompt: 0.0035, completion: 0.0105 },\n  'gemini-1.5-flash': { prompt: 0.00035, completion: 0.00105 },\n  'gemini-2.5-pro': { prompt: 0.00125, completion: 0.00375 },\n  'gemini-2.5-flash': { prompt: 0.0001, completion: 0.0004 },\n};\n","import fs from 'fs';\nimport path from 'path';\nimport { OPENAI_COSTS, ANTHROPIC_COSTS, GEMINI_COSTS } from '../utils/costs.js';\n\nconst CACHE_FILE = path.join(process.cwd(), '.ai-pricing.json');\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst PRICING_URL = 'https://ai-monitor-740g.onrender.com/api/v1/meta/pricing';\n\nfunction applyPricing(data: any) {\n  if (data?.pricing?.openai) Object.assign(OPENAI_COSTS, data.pricing.openai);\n  if (data?.pricing?.anthropic) Object.assign(ANTHROPIC_COSTS, data.pricing.anthropic);\n  if (data?.pricing?.google) Object.assign(GEMINI_COSTS, data.pricing.google);\n}\n\nexport function loadFromCache(): boolean {\n  try {\n    if (!fs.existsSync(CACHE_FILE)) return false;\n    \n    const raw = fs.readFileSync(CACHE_FILE, 'utf-8');\n    const data = JSON.parse(raw);\n    \n    // Check TTL\n    const age = Date.now() - new Date(data.lastUpdated).getTime();\n    if (age > CACHE_TTL_MS) return false; // Cache is stale\n    \n    applyPricing(data);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function fetchLatestPricing(): Promise<void> {\n  try {\n    const response = await fetch(PRICING_URL, { signal: AbortSignal.timeout(5000) });\n    if (!response.ok) throw new Error(`HTTP ${response.status}`);\n    \n    const data = await response.json();\n    \n    // Persist to cache\n    fs.writeFileSync(CACHE_FILE, JSON.stringify(data, null, 2), 'utf-8');\n    \n    applyPricing(data);\n    console.log('[AI Cost Tracker] Pricing updated from cloud ☁️');\n  } catch {\n    // Silent fail — hardcoded fallbacks in costs.ts remain active\n  }\n}\n","import { AITrackerConfig } from '../types/index.js';\nimport { loadFromCache, fetchLatestPricing } from '../cloud/pricingFetcher.js';\n\nlet config: AITrackerConfig = {};\n\nexport function configureAITracker(newConfig: AITrackerConfig) {\n  config = { ...config, ...newConfig };\n\n  // 1. Load cached pricing immediately (sync, no latency)\n  loadFromCache();\n\n  // 2. Refresh from cloud in background (non-blocking)\n  fetchLatestPricing().catch(() => {\n    // Silent fail — hardcoded defaults in costs.ts remain active\n  });\n}\n\nexport function getConfig(): AITrackerConfig {\n  return config;\n}\n\nexport function isProEnabled(): boolean {\n  return !!config.apiKey;\n}\n","import { UsageMetrics } from '../types/index.js';\nimport { getConfig } from '../config/index.js';\n\nexport async function sendUsageToCloud(metrics: UsageMetrics, retries = 3): Promise<void> {\n  const config = getConfig();\n  if (!config.apiKey) return;\n\n  const endpoint = config.endpoint || 'https://ai-monitor-backend.onrender.com/api/v1/usage';\n\n  const attemptSync = async (remaining: number): Promise<void> => {\n    try {\n      const response = await fetch(endpoint, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'x-api-key': config.apiKey!,\n        },\n        body: JSON.stringify(metrics),\n      });\n\n      if (!response.ok && remaining > 0) {\n        // Simple exponential backoff or just wait a bit\n        await new Promise(resolve => setTimeout(resolve, 1000 * (4 - remaining)));\n        return attemptSync(remaining - 1);\n      }\n    } catch (error) {\n      if (remaining > 0) {\n        await new Promise(resolve => setTimeout(resolve, 1000 * (4 - remaining)));\n        return attemptSync(remaining - 1);\n      }\n      // Fail silently as requested\n    }\n  };\n\n  // Start attempt (non-blocking call from Tracker usually, but here we just return the promise)\n  return attemptSync(retries);\n}\n\n// Alias for backward compatibility if needed, but the user specifically asked for sendUsageToCloud\nexport const trackToCloud = sendUsageToCloud;\n","import { isProEnabled } from '../config/index.js';\n\nexport function requirePro(featureName: string) {\n  if (!isProEnabled()) {\n    throw new Error(`${featureName} is a paid feature. Please add an API key using configureAITracker({ apiKey: '...' }).`);\n  }\n}\n","import { UsageMetrics } from '../types/index.js';\nimport { requirePro } from '../core/gating.js';\nimport EventEmitter from 'events';\n\nconst usageEmitter = new EventEmitter();\n\nexport function onUsage(callback: (data: UsageMetrics) => void) {\n  requirePro('Real-Time Hooks');\n  usageEmitter.on('usage', callback);\n}\n\nexport function emitUsage(metrics: UsageMetrics) {\n  usageEmitter.emit('usage', metrics);\n}\n","import { UsageMetrics } from '../types/index.js';\n\nexport interface ModelMetadata {\n  id: string;\n  name: string;\n  provider: string;\n  promptCost: number; // per 1M tokens\n  completionCost: number; // per 1M tokens\n  capability: number; // 1-5 scale\n}\n\nconst MODELS: Record<string, ModelMetadata> = {\n  'gpt-4': { id: 'gpt-4', name: 'GPT-4', provider: 'OpenAI', promptCost: 30, completionCost: 60, capability: 5 },\n  'gpt-4o': { id: 'gpt-4o', name: 'GPT-4o', provider: 'OpenAI', promptCost: 5, completionCost: 15, capability: 5 },\n  'gpt-4o-mini': { id: 'gpt-4o-mini', name: 'GPT-4o-mini', provider: 'OpenAI', promptCost: 0.15, completionCost: 0.60, capability: 3 },\n  'claude-3-opus': { id: 'claude-3-opus', name: 'Claude 3 Opus', provider: 'Anthropic', promptCost: 15, completionCost: 75, capability: 5 },\n  'claude-3-5-sonnet': { id: 'claude-3-5-sonnet', name: 'Claude 3.5 Sonnet', provider: 'Anthropic', promptCost: 3, completionCost: 15, capability: 5 },\n  'claude-3-haiku': { id: 'claude-3-haiku', name: 'Claude 3 Haiku', provider: 'Anthropic', promptCost: 0.25, completionCost: 1.25, capability: 2 },\n  'gemini-2.5-pro': { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', provider: 'Google', promptCost: 1.25, completionCost: 3.75, capability: 5 },\n  'gemini-2.5-flash': { id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash', provider: 'Google', promptCost: 0.1, completionCost: 0.4, capability: 3 },\n};\n\nexport interface Recommendation {\n  currentModel: string;\n  suggestedModel: string;\n  reason: string;\n  potentialSavings: number; // percentage\n}\n\nexport function generateRecommendations(metrics: UsageMetrics[]): Recommendation[] {\n  const modelUsage = metrics.reduce((acc: any, m) => {\n    acc[m.model] = (acc[m.model] || 0) + m.cost;\n    return acc;\n  }, {});\n\n  const recommendations: Recommendation[] = [];\n\n  // Logic: If using GPT-4, suggest GPT-4o\n  if (modelUsage['gpt-4']) {\n    recommendations.push({\n      currentModel: 'gpt-4',\n      suggestedModel: 'gpt-4o',\n      reason: 'GPT-4o is faster and ~80% cheaper for the same capability level.',\n      potentialSavings: 80\n    });\n  }\n\n  // Logic: If using Opus, suggest Sonnet 3.5\n  if (modelUsage['claude-3-opus']) {\n    recommendations.push({\n      currentModel: 'claude-3-opus',\n      suggestedModel: 'claude-3-5-sonnet',\n      reason: 'Claude 3.5 Sonnet is significantly cheaper and outperforms Opus in many benchmarks.',\n      potentialSavings: 75\n    });\n  }\n\n  // Logic: If using Gemini 2.5 Pro, suggest Gemini 2.5 Flash\n  if (modelUsage['gemini-2.5-pro']) {\n    recommendations.push({\n      currentModel: 'gemini-2.5-pro',\n      suggestedModel: 'gemini-2.5-flash',\n      reason: 'Gemini 2.5 Flash is significantly cheaper and offers excellent performance for high-volume tasks.',\n      potentialSavings: 90\n    });\n  }\n\n  // Logic: If high volume but low complexity tasks (simple heuristic: low token count/req)\n  // This could be expanded later with task_type metadata\n  \n  return recommendations;\n}\n","import { UsageMetrics, UsageReport, AITrackingContext } from '../types/index.js';\nimport { StorageProvider, JSONStorage } from '../storage/index.js';\nimport { getGlobalAIContext } from './context.js';\nimport { sendUsageToCloud } from '../cloud/index.js';\nimport { isProEnabled } from '../config/index.js';\nimport { emitUsage } from '../features/hooks.js';\nimport { generateRecommendations, Recommendation } from '../features/recommendations.js';\nimport chalk from 'chalk';\n\nexport class CostTracker {\n  private storage: StorageProvider;\n\n  constructor(storage?: StorageProvider) {\n    this.storage = storage || new JSONStorage();\n  }\n\n  async recordUsage(metrics: UsageMetrics, context?: AITrackingContext): Promise<void> {\n    const globalContext = getGlobalAIContext();\n    \n    // Merge context: Request context overrides Global context\n    const finalMetrics: UsageMetrics = {\n      ...globalContext,\n      ...metrics,\n      ...context, // Request specific context\n      timestamp: metrics.timestamp || Date.now(),\n    };\n\n    await this.storage.save(finalMetrics);\n\n    // Sync to cloud if Pro is enabled (non-blocking)\n    if (isProEnabled()) {\n      emitUsage(finalMetrics);\n      sendUsageToCloud(finalMetrics).catch(() => {\n        // Silent failure already handled in sendUsageToCloud\n      });\n    } else {\n      // Viral Nudges for Free users\n      this.checkMilestones(finalMetrics.totalTokens);\n      this.maybeLogNudge();\n    }\n  }\n\n  private async checkMilestones(newTokens: number): Promise<void> {\n    const report = await this.getUsageReport();\n    const oldTokens = report.totalTokens - newTokens;\n    \n    const milestone = 10000;\n    if (Math.floor(report.totalTokens / milestone) > Math.floor(oldTokens / milestone)) {\n      console.log(chalk.green(`\\n✨ Milestone Reached: You've tracked over ${chalk.bold(Math.floor(report.totalTokens / milestone) * milestone)} tokens with AI Cost Tracker!`));\n      console.log(chalk.gray(`View your full report with: ${chalk.cyan('npx ai-cost-tracker report')}\\n`));\n    }\n  }\n\n  private maybeLogNudge(): void {\n    // 5% chance to show a subtle nudge\n    if (Math.random() < 0.05) {\n      const nudges = [\n        \"🚀 Tip: Upgrade to Pro for team-wide analytics and cost alerts.\",\n        \"💡 Pro users save an average of 30% using advanced model recommendations.\",\n        \"📱 Monitor your costs on the go with our SaaS dashboard.\",\n        \"🔗 Run 'npx ai-cost-tracker upgrade' to see what you're missing!\",\n      ];\n      const nudge = nudges[Math.floor(Math.random() * nudges.length)];\n      console.log(chalk.blue.dim(`\\n${nudge}\\n`));\n    }\n  }\n\n  async getUsageReport(): Promise<UsageReport> {\n    const allMetrics = await this.storage.getAll();\n    \n    const report: UsageReport = {\n      totalCost: 0,\n      totalTokens: 0,\n      usageByModel: {},\n      usageByProvider: {},\n    };\n\n    for (const m of allMetrics) {\n      report.totalCost += m.cost;\n      report.totalTokens += m.totalTokens;\n\n      // Model grouping\n      if (!report.usageByModel[m.model]) {\n        report.usageByModel[m.model] = { cost: 0, tokens: 0, count: 0 };\n      }\n      report.usageByModel[m.model].cost += m.cost;\n      report.usageByModel[m.model].tokens += m.totalTokens;\n      report.usageByModel[m.model].count += 1;\n\n      // Provider grouping\n      if (!report.usageByProvider[m.provider]) {\n        report.usageByProvider[m.provider] = { cost: 0, tokens: 0, count: 0 };\n      }\n      report.usageByProvider[m.provider].cost += m.cost;\n      report.usageByProvider[m.provider].tokens += m.totalTokens;\n      report.usageByProvider[m.provider].count += 1;\n    }\n\n    // Round total cost\n    report.totalCost = Number(report.totalCost.toFixed(6));\n    \n    // Round model costs\n    for (const model in report.usageByModel) {\n      report.usageByModel[model].cost = Number(report.usageByModel[model].cost.toFixed(6));\n    }\n\n    return report;\n  }\n\n  async getTotalCost(): Promise<number> {\n    const report = await this.getUsageReport();\n    return report.totalCost;\n  }\n\n  async getUsageByUser(userId: string): Promise<UsageMetrics[]> {\n    const all = await this.storage.getAll();\n    return all.filter(m => m.userId === userId);\n  }\n\n  async getUsageByFeature(feature: string): Promise<UsageMetrics[]> {\n    const all = await this.storage.getAll();\n    return all.filter(m => m.feature === feature);\n  }\n\n  async getUsageByTeam(teamId: string): Promise<UsageMetrics[]> {\n    const all = await this.storage.getAll();\n    return all.filter(m => m.teamId === teamId);\n  }\n\n  async getOptimizationSuggestions(): Promise<Recommendation[]> {\n    const all = await this.storage.getAll();\n    return generateRecommendations(all);\n  }\n}\n\n// Singleton for easy access\nexport const tracker = new CostTracker();\n","import { BaseProviderTracker } from '../core/Provider.js';\nimport { UsageMetrics } from '../types/index.js';\nimport { tracker } from '../core/Tracker.js';\nimport { OPENAI_COSTS } from '../utils/costs.js';\n\nexport class OpenAITracker extends BaseProviderTracker {\n  name = 'OpenAI';\n\n  constructor(customCosts?: Record<string, { prompt: number; completion: number }>) {\n    super({ ...OPENAI_COSTS, ...customCosts });\n  }\n\n  trackRequest(params: any): void {\n    // Optionally log request params\n  }\n\n  trackResponse(response: any): UsageMetrics {\n    const model = response.model;\n    const usage = response.usage || { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };\n    const promptTokens = usage.prompt_tokens;\n    const completionTokens = usage.completion_tokens;\n    const totalTokens = usage.total_tokens;\n\n    const cost = this.calculateCost(model, promptTokens, completionTokens);\n\n    return {\n      model,\n      promptTokens,\n      completionTokens,\n      totalTokens,\n      cost,\n      timestamp: Date.now(),\n      provider: this.name,\n    };\n  }\n}\n\nexport function trackOpenAI(client: any, options: { context?: any; customCosts?: any } = {}) {\n  const openaiTracker = new OpenAITracker(options.customCosts);\n\n  const originalCreate = client.chat.completions.create.bind(client.chat.completions);\n\n  client.chat.completions.create = async function (params: any, reqOptions: any) {\n    openaiTracker.trackRequest(params);\n    const response = await originalCreate(params, reqOptions);\n\n    if (!params.stream) {\n      const metrics = openaiTracker.trackResponse(response);\n      await tracker.recordUsage(metrics, options.context);\n    }\n\n    return response;\n  };\n\n  return client;\n}\n","import { BaseProviderTracker } from '../core/Provider.js';\nimport { UsageMetrics } from '../types/index.js';\nimport { tracker } from '../core/Tracker.js';\nimport { ANTHROPIC_COSTS } from '../utils/costs.js';\n\nexport class AnthropicTracker extends BaseProviderTracker {\n  name = 'Anthropic';\n\n  constructor(customCosts?: Record<string, { prompt: number; completion: number }>) {\n    super({ ...ANTHROPIC_COSTS, ...customCosts });\n  }\n\n  trackRequest(params: any): void {\n  }\n\n  trackResponse(response: any): UsageMetrics {\n    const model = response.model;\n    const usage = response.usage || { input_tokens: 0, output_tokens: 0 };\n    const promptTokens = usage.input_tokens;\n    const completionTokens = usage.output_tokens;\n    const totalTokens = promptTokens + completionTokens;\n\n    const cost = this.calculateCost(model, promptTokens, completionTokens);\n\n    return {\n      model,\n      promptTokens,\n      completionTokens,\n      totalTokens,\n      cost,\n      timestamp: Date.now(),\n      provider: this.name,\n    };\n  }\n}\n\nexport function trackAnthropic(client: any, options: { context?: any; customCosts?: any } = {}) {\n  const anthropicTracker = new AnthropicTracker(options.customCosts);\n\n  const originalCreate = client.messages.create.bind(client.messages);\n\n  client.messages.create = async function (params: any, reqOptions: any) {\n    anthropicTracker.trackRequest(params);\n    const response = await originalCreate(params, reqOptions);\n\n    if (!params.stream) {\n      const metrics = anthropicTracker.trackResponse(response);\n      await tracker.recordUsage(metrics, options.context);\n    }\n\n    return response;\n  };\n\n  return client;\n}\n","import { BaseProviderTracker } from '../core/Provider.js';\nimport { UsageMetrics } from '../types/index.js';\nimport { tracker } from '../core/Tracker.js';\nimport { GEMINI_COSTS } from '../utils/costs.js';\n\nexport class GeminiTracker extends BaseProviderTracker {\n  name = 'Google Gemini';\n\n  constructor(customCosts?: Record<string, { prompt: number; completion: number }>) {\n    super({ ...GEMINI_COSTS, ...customCosts });\n  }\n\n  trackRequest(params: any): void {\n  }\n\n  trackResponse(response: any): UsageMetrics {\n    // Gemini response structure is slightly different\n    const model = response._model || 'gemini-unknown';\n    const usage = response.usageMetadata || { promptTokenCount: 0, candidatesTokenCount: 0, totalTokenCount: 0 };\n    \n    const promptTokens = usage.promptTokenCount;\n    const completionTokens = usage.candidatesTokenCount;\n    const totalTokens = usage.totalTokenCount;\n\n    const cost = this.calculateCost(model, promptTokens, completionTokens);\n\n    return {\n      model,\n      promptTokens,\n      completionTokens,\n      totalTokens,\n      cost,\n      timestamp: Date.now(),\n      provider: this.name,\n    };\n  }\n}\n\nexport function trackGemini(model: any, options: { context?: any; customCosts?: any } = {}) {\n  const geminiTracker = new GeminiTracker(options.customCosts);\n\n  const originalGenerateContent = model.generateContent.bind(model);\n\n  model.generateContent = async function (...args: any[]) {\n    const response = await originalGenerateContent(...args);\n    \n    // Extract metadata from response\n    const actualResponse = response.response ? response.response : response;\n    \n    const metrics = geminiTracker.trackResponse({\n      ...actualResponse,\n      _model: model.model || args[0]?.model || 'gemini-1.5-flash'\n    });\n    \n    await tracker.recordUsage(metrics, options.context);\n\n    return response;\n  };\n\n  return model;\n}\n\n/**\n * Support for the new @google/genai SDK\n */\nexport function trackGenAI(ai: any, options: { context?: any; customCosts?: any } = {}) {\n  const geminiTracker = new GeminiTracker(options.customCosts);\n\n  // Patch generateContent on ai.models\n  const originalGenerateContent = ai.models.generateContent.bind(ai.models);\n\n  ai.models.generateContent = async function (params: any) {\n    const response = await originalGenerateContent(params);\n    \n    // The new SDK response includes model and usageMetadata at the top level\n    const metrics = geminiTracker.trackResponse({\n      ...response,\n      _model: response.model || params.model\n    });\n    \n    await tracker.recordUsage(metrics, options.context);\n\n    return response;\n  };\n\n  return ai;\n}\n","export * from './types/index.js';\nexport * from './core/Provider.js';\nexport * from './core/Tracker.js';\nexport * from './core/context.js';\nexport * from './config/index.js';\nexport * from './providers/openai.js';\nexport * from './providers/anthropic.js';\nexport * from './providers/gemini.js';\nexport * from './middleware/index.js';\nexport * from './middleware/context.js';\nexport * from './features/alerts.js';\nexport * from './features/hooks.js';\nexport * from './core/auto.js';\nexport * from './cloud/index.js';\nexport { tracker } from './core/Tracker.js';\n","import { Request, Response, NextFunction } from 'express';\nimport { tracker } from '../core/Tracker.js';\n\nexport function aiCostMiddleware() {\n  return async (req: Request, res: Response, next: NextFunction) => {\n    // We can attach the tracker to the request if needed, \n    // but the global tracker already records usage.\n    // This middleware could be used to tag requests with metadata.\n    \n    // For now, it just ensures the tracker is accessible if we want to \n    // record endpoint-specific usage later.\n    \n    const start = Date.now();\n    \n    res.on('finish', () => {\n      const duration = Date.now() - start;\n      // Potentially log duration or other metrics\n    });\n\n    next();\n  };\n}\n","import { Request, Response, NextFunction } from 'express';\nimport { contextStorage } from '../core/context.js';\nimport { AITrackingContext } from '../types/index.js';\n\nexport interface ContextMiddlewareOptions {\n  getUserId?: (req: Request) => string | undefined;\n  getTeamId?: (req: Request) => string | undefined;\n  getFeature?: (req: Request) => string | undefined;\n  getRequestId?: (req: Request) => string | undefined;\n  getMetadata?: (req: Request) => Record<string, any> | undefined;\n}\n\nexport function createAIContextMiddleware(options: ContextMiddlewareOptions) {\n  return (req: any, res: Response, next: NextFunction) => {\n    const context: AITrackingContext = {\n      userId: options.getUserId?.(req),\n      teamId: options.getTeamId?.(req),\n      feature: options.getFeature?.(req),\n      requestId: options.getRequestId?.(req),\n      metadata: options.getMetadata?.(req),\n    };\n\n    // Attach to request for easy access\n    req.aiContext = context;\n\n    // Use AsyncLocalStorage to make it available globally in this request's scope\n    contextStorage.run(context, () => {\n      next();\n    });\n  };\n}\n","import { tracker } from '../core/Tracker.js';\nimport { requirePro } from '../core/gating.js';\n\nexport interface AlertOptions {\n  dailyLimit: number;\n  onAlert?: (currentCost: number, limit: number) => void;\n}\n\nexport function enableCostAlerts(options: AlertOptions) {\n  requirePro('Cost Alerts');\n\n  // Simple implementation: check usage periodically or on every record\n  // For now, we'll provide a check function\n  console.log(`[ai-cost-tracker] Cost alerts enabled with daily limit: $${options.dailyLimit}`);\n}\n\nexport async function checkCostAlerts(limit: number) {\n  const totalCost = await tracker.getTotalCost();\n  if (totalCost > limit) {\n    console.warn(`[ai-cost-tracker] ALERT: Total cost $${totalCost.toFixed(4)} exceeds limit $${limit.toFixed(4)}`);\n  }\n}\n","import { configureAITracker } from '../config/index.js';\n\nexport async function monitorAI() {\n  console.log('[ai-cost-tracker] Initializing Zero-Config Auto Tracking...');\n\n  // 1. Auto-detect API Keys from Environment\n  const openAIKey = process.env.OPENAI_API_KEY;\n  const anthropicKey = process.env.ANTHROPIC_API_KEY;\n  const geminiKey = process.env.GEMINI_API_KEY;\n  const proApiKey = process.env.AI_TRACKER_API_KEY;\n\n  if (proApiKey) {\n    configureAITracker({ apiKey: proApiKey });\n    console.log('[ai-cost-tracker] Pro mode enabled via environment variable.');\n  }\n\n  // 2. Log detected providers\n  const activeProviders: string[] = [];\n  if (openAIKey) activeProviders.push('OpenAI');\n  if (anthropicKey) activeProviders.push('Anthropic');\n  if (geminiKey) activeProviders.push('Gemini');\n  \n  if (activeProviders.length > 0) {\n    console.log(`[ai-cost-tracker] Detected keys for: ${activeProviders.join(', ')}`);\n  } else {\n    console.warn('[ai-cost-tracker] No AI provider keys detected in environment variables.');\n  }\n\n  // 3. Monkey Patch OpenAI (if available)\n  try {\n    const OpenAI = (global as any).OpenAI || (typeof require !== 'undefined' ? require('openai') : null);\n    \n    if (OpenAI && OpenAI.prototype) {\n      const originalCreate = OpenAI.Chat?.Completions?.prototype?.create;\n      \n      if (originalCreate && !originalCreate.__isPatched) {\n        console.log('[ai-cost-tracker] ✅ Automatically patching OpenAI Chat.Completions...');\n        \n        OpenAI.Chat.Completions.prototype.create = async function(...args: any[]) {\n          const result = await originalCreate.apply(this, args);\n          const { OpenAITracker } = await import('../providers/openai.js');\n          const trackerInstance = new OpenAITracker();\n          trackerInstance.trackResponse(result);\n          return result;\n        };\n        OpenAI.Chat.Completions.prototype.create.__isPatched = true;\n      }\n    }\n  } catch (e) { /* skip */ }\n\n  // 4. Monkey Patch Gemini (if available)\n  try {\n    const genaiPkg = (global as any).GoogleGenAI || (typeof require !== 'undefined' ? require('@google/genai') : null);\n    if (genaiPkg && genaiPkg.GoogleGenAI) {\n      const { trackGenAI } = await import('../providers/gemini.js');\n      const originalConstructor = genaiPkg.GoogleGenAI;\n      \n      genaiPkg.GoogleGenAI = function(...args: any[]) {\n        const instance = new originalConstructor(...args);\n        console.log('[ai-cost-tracker] ✅ Automatically patching GoogleGenAI instance...');\n        return trackGenAI(instance);\n      };\n      genaiPkg.GoogleGenAI.prototype = originalConstructor.prototype;\n    }\n\n    const standardGeminiPkg = (global as any).GoogleGenerativeAI || (typeof require !== 'undefined' ? require('@google/generative-ai') : null);\n    if (standardGeminiPkg && standardGeminiPkg.GoogleGenerativeAI) {\n      const { trackGemini } = await import('../providers/gemini.js');\n      const prototype = standardGeminiPkg.GoogleGenerativeAI.prototype;\n      const originalGetModel = prototype.getGenerativeModel;\n\n      if (originalGetModel && !originalGetModel.__isPatched) {\n        console.log('[ai-cost-tracker] ✅ Automatically patching GoogleGenerativeAI.getGenerativeModel...');\n        prototype.getGenerativeModel = function(...args: any[]) {\n          const model = originalGetModel.apply(this, args);\n          return trackGemini(model);\n        };\n        prototype.getGenerativeModel.__isPatched = true;\n      }\n    }\n  } catch (e) { /* skip */ }\n\n  // 5. Monkey Patch Anthropic (if available)\n  try {\n    const AnthropicPkg = (global as any).Anthropic || (typeof require !== 'undefined' ? require('@anthropic-ai/sdk') : null);\n    if (AnthropicPkg && AnthropicPkg.prototype) {\n      const { trackAnthropic } = await import('../providers/anthropic.js');\n      \n      // Patch the prototype's messages.create\n      const proto = AnthropicPkg.prototype;\n      if (proto.messages && proto.messages.create && !proto.messages.create.__isPatched) {\n        console.log('[ai-cost-tracker] ✅ Automatically patching Anthropic instance creation...');\n        const originalMessagesCreate = proto.messages.create;\n        proto.messages.create = async function(params: any, options: any) {\n          const response = await originalMessagesCreate.apply(this, [params, options]);\n          const { AnthropicTracker } = await import('../providers/anthropic.js');\n          const trackerInstance = new AnthropicTracker();\n          const metrics = trackerInstance.trackResponse(response);\n          const { tracker } = await import('./Tracker.js');\n          await tracker.recordUsage(metrics);\n          return response;\n        };\n        proto.messages.create.__isPatched = true;\n      }\n    }\n  } catch (e) { /* skip */ }\n\n  console.log('[ai-cost-tracker] Auto-monitoring active.');\n}\n"],"mappings":"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","names":["path","fs","fs","import_fs","import_path","path","config","EventEmitter","chalk","OpenAITracker","trackGenAI","trackGemini","trackAnthropic","AnthropicTracker","tracker"]}