export declare const NOTIFICATION_CHANNELS: readonly ["email", "slack", "in_app"]; export type NotificationChannel = (typeof NOTIFICATION_CHANNELS)[number]; export declare const toNotificationChannel: (raw: string) => NotificationChannel; export declare const NOTIFICATION_FREQUENCIES: readonly ["instant", "daily"]; export type NotificationFrequency = (typeof NOTIFICATION_FREQUENCIES)[number]; export declare const toNotificationFrequency: (raw: string) => NotificationFrequency; export interface RegistryNotificationEvent { channels: NotificationChannel[]; defaultEnabled: Partial>; displayName: string; eventId: string; suppressible: boolean; } export interface RegistryNotificationGroup { displayName: string; events: RegistryNotificationEvent[]; groupId: string; } export interface NotificationRegistry { frequencyOptions: NotificationFrequency[]; groups: RegistryNotificationGroup[]; defaultFrequency?: NotificationFrequency; } /** * The registry is a singleton (not per-tenant). We keep the wrapper so * Immer/RTK can safely represent "cleared" as `registry: undefined` — a bare * top-level `undefined` state is not observable by Immer, which prevents * the `clearAll` extraReducers case from taking effect. */ export interface NotificationRegistryState { registryEpoch: number; registry?: NotificationRegistry; }