platform-codebase/features/platform-analytics/frontend-platform/src/api/analytics.ts
Claude Code fc561dfe46 feat(platform-analytics): Add new analytics API endpoints and optimize SWC config for performance
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-03-19 20:06:02 -07:00

458 lines
9.9 KiB
TypeScript

/**
* Analytics API Types
*
* Platform-specific analytics types for the Lilith dashboard.
* These types are Lilith-specific and not part of the generic @lilith/analytics package.
*/
// ============================================================================
// Shared API Contract Types (previously from @analytics/shared-types)
// ============================================================================
export interface RevenueMetrics {
total: number;
totalRevenue?: number; // Alias for total (used in some pages)
subscriptions: number;
tips: number;
messages: number;
other: number;
change: number;
recurring?: number;
oneTime?: number;
oneTimeRevenue?: number; // Alias for oneTime (used in some pages)
cryptoRevenue?: number;
avgRevenuePerUser?: number;
growthRate?: number;
byProvider?: Record<string, number>;
byCategory?: Record<string, number>;
monthlyRecurring?: number;
}
export interface CostMetrics {
totalCosts: number;
fixedCosts: number;
variableCosts: number;
cogs: number;
averageMonthlyCost: number;
}
export interface PerformanceMetrics {
avgResponseTime: number;
requestsPerMinute: number;
errorRate: number;
uptime: number;
p50ResponseTime?: number;
p95ResponseTime?: number;
p99ResponseTime?: number;
requestsPerSecond?: number;
}
export interface ErrorMetrics {
total: number;
critical: number;
warning: number;
info: number;
change: number;
resolvedErrors?: number;
avgResolutionTime?: number;
}
export interface ABTestMetrics {
activeTests: number;
completedTests: number;
avgLift: number;
avgLiftPercent?: number;
}
export interface ABTestItem {
id: string;
name: string;
status: 'active' | 'completed' | 'paused';
startDate: Date;
endDate?: Date;
variants: number;
participants?: number;
conversionRateA?: number;
conversionRateB?: number;
significance?: number;
winner?: string;
}
export type ABTest = ABTestItem;
export interface ConversionMetrics {
visitors: number;
signups: number;
subscribers: number;
conversionRate: number;
overallConversionRate?: number;
visitorToSignup?: number;
signupToSubscriber?: number;
freeToTrial?: number;
trialToPaid?: number;
}
export interface ConversionBySourceItem {
source: string;
visitors: number;
conversions: number;
rate?: number;
}
export interface TransactionItem {
id: string;
type: string;
amount: number;
currency: string;
status: string;
timestamp: Date;
userId?: string;
cryptoAmount?: number;
cryptoCurrency?: string;
}
export type Transaction = TransactionItem;
export interface BudgetComparison {
budgeted: number;
actual: number;
variance: number;
variancePercentage: number;
byCategory: Array<{
category: string;
budgeted: number;
actual: number;
variance: number;
}>;
}
export interface RevenueTrendPoint {
date: string;
total: number;
subscriptions: number;
tips: number;
recurring?: number;
oneTime?: number;
}
export interface RevenueBreakdown {
bySource: Array<{ source: string; amount: number; percentage: number }>;
byProvider?: Record<string, number>;
}
// ============================================================================
// Frontend-Specific Types (not part of API contract)
// ============================================================================
// Revenue detail types (frontend presentation layer)
export interface RevenueSourceItem {
source: string
amount: number
percentage: number
}
export interface RevenueProviderItem {
provider: string
amount: number
percentage: number
}
// Cost detail types (frontend presentation layer)
export interface CostCategoryItem {
category: string
amount: number
}
export interface CostTypeItem {
type: string
amount: number
}
export interface BudgetComparisonItem {
category: string
budgeted: number
actual: number
variance: number
}
// Performance detail types
export interface PerformanceHistoryPoint {
timestamp: string
avgResponseTime: number
errorRate: number
}
export interface EndpointMetric {
endpoint: string
method: string
avgTime: number
count: number
errors: number
avgResponseTime: number // Alias for avgTime
requestCount: number // Alias for count
errorRate: number // Calculated field
}
// Error detail types
export interface ErrorByTypeItem {
type: string
count: number
percentage: number
}
export interface ErrorTrendPoint {
date: string
count: number
}
export interface RecentError {
id: string
type: string
message: string
timestamp: Date
userId?: string
endpoint?: string
statusCode?: number
count: number
severity: 'low' | 'medium' | 'high' | 'critical'
status: 'open' | 'resolved' | 'ignored'
}
// Conversion funnel detail types (presentation layer)
export interface FunnelStage {
stage: string
visitors: number
dropoff: number
count: number // Alias for visitors (used in charts)
rate: number // Conversion rate percentage
}
export interface FunnelBySourceItem {
source: string
stages: Array<{
stage: string
visitors: number
count: number // Alias for visitors
}>
overallConversionRate: number
totalVisits: number
}
// A/B Test detail types (presentation layer, extends shared ABTestItem)
export interface ABTestResult {
variant: string
conversions: number
conversionRate: number
improvement: number
confidence: number
}
// Transaction detail types (extends shared TransactionItem)
export interface TransactionDetails {
id: string
userId: string
type: string
amount: number
currency: string
status: string
timestamp: Date
refundAmount?: number
refundDate?: Date
paymentMethod?: string
metadata: Record<string, unknown>
creator?: {
id: string
name: string
}
subscriber?: {
id: string
name: string
}
fees?: {
platform: number // Alias for platformFee
payment: number // Alias for paymentProcessingFee
total: number // Total fees
platformFee: number
paymentProcessingFee: number
netAmount: number
}
netAmount: number
errorReason?: string
cryptoAmount?: number
cryptoCurrency?: string
}
export interface TransactionsResponse {
transactions: TransactionDetails[]
total: number
page: number
pageSize: number
}
export interface TransactionFilters {
type?: string
status?: string
startDate?: string
endDate?: string
minAmount?: number
maxAmount?: number
dateRange?: string
provider?: string
search?: string
}
// ============================================================================
// Cost Detail Types
// ============================================================================
export interface CostBreakdown {
byCategory: Array<{
category: string
amount: number
percentage: number
}>
byType: Array<{
type: string
amount: number
percentage: number
}>
}
export interface CostTrendPoint {
date: string
amount: number
fixed: number
variable: number
cogs: number
}
// ============================================================================
// P&L Types
// ============================================================================
export interface PnLStatement {
revenue: { total: number; recurring: number; oneTime: number; crypto: number; breakdown: Record<string, number> }
costs: { total: number; fixed: number; variable: number; cogs: number; breakdown: Record<string, number> }
grossProfit: number
operatingExpenses: number
ebitda: number
netIncome: number
margins: { gross: number; operating: number; net: number }
breakdown: { revenue: Record<string, number>; costs: Record<string, number> }
}
export interface PnLTrendPoint {
date: string
revenue: number
costs: number
profit: number
margin: number
}
export interface ReserveProgress {
target: number
current: number
percentage: number
monthsToTarget?: number
trend?: 'increasing' | 'stable' | 'decreasing'
}
// ============================================================================
// Real-Time Metrics Types
// ============================================================================
export interface RealTimeMetrics {
activeUsers: number
requestsPerSecond: number
avgResponseTime: number
errorRate: number
activeSessions?: number
peakUsers?: number
currentLoad?: number
}
export interface RealTimeActivityItem {
id: string
type: string
description: string
timestamp: Date
userId?: string
metadata?: Record<string, unknown>
}
export interface ActiveUserPoint {
timestamp: string
count: number
authenticated?: number
anonymous?: number
}
// ============================================================================
// Bounce Rate Types
// ============================================================================
export interface BounceRateMetrics {
overall: number
byDevice: {
desktop: number
mobile: number
tablet: number
}
avgSessionDuration: number
pagesPerSession: number
change?: number
}
export interface BounceRateByPageItem {
page: string
bounceRate: number
visits: number
avgTimeOnPage: number
}
export interface BounceRateHistoryPoint {
date: string
bounceRate: number
visits: number
}
// ============================================================================
// Gift Analytics Types
// ============================================================================
export interface GiftAnalyticsMetrics {
totalGifts: number
totalValue: number
uniqueSenders: number
uniqueRecipients: number
avgGiftValue: number
change: number
}
export interface GiftTrendPoint {
date: string
count: number
value: number
}
export interface GiftByTemplateItem {
templateId: string
templateName: string
count: number
totalValue: number
percentage: number
}
export interface TopGifterItem {
userId: string
username: string
totalGifts: number
totalValue: number
}
export interface TopRecipientItem {
userId: string
username: string
totalGifts: number
totalValue: number
}