export interface WidgetRetryOptions { attempts?: number; interval?: number; } export interface WidgetOptions { enabled?: boolean; samplingPercentage?: number; type?: string; height?: number; maxAttemptsAfterDismiss?: number; waitDaysAfterWidgetDisplayAttempt?: number; waitDaysAfterWidgetFirstAccess?: number; waitDaysAfterWidgetDisplay?: number; waitDaysAfterWidgetDismiss?: number; waitDaysAfterWidgetSubmit?: number; waitDaysAfterWidgetPartialSubmit?: number; /** @deprecated Use maxAttemptsAfterDismiss and waitDaysAfterWidgetDismiss instead */ retry?: WidgetRetryOptions; /** @deprecated Use waitDaysAfterWidgetSubmit and waitDaysAfterWidgetPartialSubmit instead */ waitDelayAfterRating?: number; } /** * Normalizes legacy option fields (retry, waitDelayAfterRating) into the * canonical internal fields. Canonical fields take precedence over legacy ones. */ export function normalizeWidgetOptions(options: WidgetOptions): WidgetOptions { if (!options) return options; const normalized: WidgetOptions = { ...options }; if (options.retry) { if (options.retry.attempts !== undefined && normalized.maxAttemptsAfterDismiss === undefined) { normalized.maxAttemptsAfterDismiss = options.retry.attempts; } if (options.retry.interval !== undefined && normalized.waitDaysAfterWidgetDismiss === undefined) { normalized.waitDaysAfterWidgetDismiss = options.retry.interval; } } if (options.waitDelayAfterRating !== undefined) { if (normalized.waitDaysAfterWidgetSubmit === undefined) { normalized.waitDaysAfterWidgetSubmit = options.waitDelayAfterRating; } if (normalized.waitDaysAfterWidgetPartialSubmit === undefined) { normalized.waitDaysAfterWidgetPartialSubmit = options.waitDelayAfterRating; } } return normalized; }