import 'server-only' import { getSupabaseAdminClient } from './supabase-admin' /** Monthly list price per tier, in USD. */ const TIER_MONTHLY_USD: Record<'pro' | 'pro_plus' | 'free', number> = { pro: 9.9, pro_plus: 19.9, free: 0, } export interface SubscriptionRevenue { mrrUsd: number arrUsd: number activeCount: number tierBreakdown: { pro: number; pro_plus: number; free: number } } /** * Aggregates real subscription revenue from Supabase. * Only status === 'active' subscriptions contribute to MRR/ARR. * MRR = Σ(monthly price of each active subscription's tier); ARR = MRR * 12. */ export async function fetchSubscriptionRevenue(): Promise { const supabase = await getSupabaseAdminClient('manager') const rows: Array> = [] for (let page = 0; page < 100; page += 1) { const { data, error } = await supabase .from('subscriptions') .select('tier, status') .range(page * 1000, page * 1000 + 999) if (error) throw new Error('Supabase subscription revenue query failed') rows.push(...((data ?? []) as Array>)) if ((data?.length ?? 0) < 1000) break if (page === 99) throw new Error('Supabase subscription directory exceeds the supported administrative window') } const tierBreakdown = { pro: 0, pro_plus: 0, free: 0 } let mrrUsd = 0 let activeCount = 0 for (const row of rows) { if (row.status !== 'active') continue activeCount += 1 const tier = row.tier if (tier === 'pro' || tier === 'pro_plus' || tier === 'free') { tierBreakdown[tier] += 1 mrrUsd += TIER_MONTHLY_USD[tier] } } mrrUsd = Math.round(mrrUsd * 100) / 100 const arrUsd = Math.round(mrrUsd * 12 * 100) / 100 return { mrrUsd, arrUsd, activeCount, tierBreakdown } }