import { z } from 'zod'; import type { NotificationPreferences } from '@/types/notifications'; /** * Schema for channel preferences */ export const channelPreferencesSchema = z.object({ in_app: z.boolean(), email: z.boolean(), push: z.boolean(), sms: z.boolean() }); /** * Schema for workflow preferences (dynamic keys) */ export const workflowPreferencesSchema = z.record(z.string(), z.boolean()); /** * Schema for frequency settings */ export const frequencySettingsSchema = z.object({ digest: z.enum(['realtime', 'hourly', 'daily', 'weekly'] as const), max_per_hour: z.number().int().min(1).max(999) }); /** * Complete notification preferences schema */ export const notificationPreferencesSchema = z.object({ channelPreferences: channelPreferencesSchema, workflowPreferences: workflowPreferencesSchema, frequencySettings: frequencySettingsSchema }); /** * Schema for subscriber data */ export const subscriberDataSchema = z.object({ subscriberId: z.string().uuid('Invalid subscriber ID'), email: z.string().email('Invalid email').optional(), firstName: z.string().max(100).optional(), lastName: z.string().max(100).optional(), phone: z.string().max(20).optional(), avatar: z.string().url('Invalid avatar URL').optional(), data: z.record(z.string(), z.any()).optional() }); /** * Default notification preferences for new users */ export const DEFAULT_NOTIFICATION_PREFERENCES: NotificationPreferences = { channelPreferences: { in_app: true, email: true, push: false, sms: false }, workflowPreferences: {}, frequencySettings: { digest: 'daily', max_per_hour: 10 } };