44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
import { getAuth } from './auth'
|
|
|
|
export type UserPlan = 'free' | 'pro' | 'business' | 'enterprise'
|
|
|
|
export const PLAN_LIMITS = {
|
|
free: {
|
|
maxMonitors: 3,
|
|
minFrequency: 60, // minutes
|
|
features: ['email_alerts', 'basic_noise_filtering'],
|
|
},
|
|
pro: {
|
|
maxMonitors: 20,
|
|
minFrequency: 5,
|
|
features: ['email_alerts', 'slack_integration', 'webhook_integration', 'keyword_alerts', 'smart_noise_filtering', 'audit_export'],
|
|
},
|
|
business: {
|
|
maxMonitors: 100,
|
|
minFrequency: 1,
|
|
features: ['email_alerts', 'slack_integration', 'webhook_integration', 'keyword_alerts', 'smart_noise_filtering', 'audit_export', 'api_access', 'team_members'],
|
|
},
|
|
enterprise: {
|
|
maxMonitors: Infinity,
|
|
minFrequency: 1,
|
|
features: ['email_alerts', 'slack_integration', 'webhook_integration', 'keyword_alerts', 'smart_noise_filtering', 'audit_export', 'api_access', 'team_members', 'custom_integrations', 'sla'],
|
|
},
|
|
} as const
|
|
|
|
export function usePlan() {
|
|
const auth = getAuth()
|
|
const plan = (auth?.user?.plan as UserPlan) || 'free'
|
|
const limits = PLAN_LIMITS[plan] || PLAN_LIMITS.free
|
|
|
|
return {
|
|
plan,
|
|
limits,
|
|
canUseSlack: limits.features.includes('slack_integration' as any),
|
|
canUseWebhook: limits.features.includes('webhook_integration' as any),
|
|
canUseKeywords: limits.features.includes('keyword_alerts' as any),
|
|
canUseSmartNoise: limits.features.includes('smart_noise_filtering' as any),
|
|
maxMonitors: limits.maxMonitors,
|
|
minFrequency: limits.minFrequency,
|
|
}
|
|
}
|