UNPKG

quala-widget

Version:

Smart feedback widget for SaaS trial optimization

113 lines 2.96 kB
export interface AntiSpamConfig { enabled: boolean; globalCooldownMs: number; enablePriorityOverride: boolean; triggerPriorities: { console_error: number; api_failure: number; form_failure: number; exit_intent: number; time: number; manual: number; }; maxWidgetsPerSession: number; priorityOverrideThreshold: number; } export interface AntiSpamState { lastWidgetShownAt: number; lastWidgetPriority: number; lastWidgetTriggerType: string; widgetsShownThisSession: number; sessionStartTime: number; isAnyWidgetOpen: boolean; } export interface WidgetDecision { allowed: boolean; reason: string; details?: { triggerType: string; priority: number; timeSinceLastWidget?: number; sessionCount?: number; cooldownRemaining?: number; }; } export declare class AntiSpamManager { private config; private state; private debug; private static readonly DEFAULT_CONFIG; constructor(debug?: boolean); private log; private initializeState; /** * Load configuration from API response */ loadConfig(config: AntiSpamConfig | null): void; /** * Validate configuration and merge with defaults for missing fields */ private validateAndMergeConfig; /** * Load persisted state from localStorage */ private loadPersistedState; /** * Persist current state to localStorage */ private persistState; /** * Reset state (for new sessions or errors) */ resetState(): void; /** * Get priority for a trigger type */ private getTriggerPriority; /** * Main decision method: Should we show a widget for this trigger? */ shouldShowWidget(triggerType: string): WidgetDecision; /** * Record that a widget was shown */ onWidgetShown(triggerType: string): void; /** * Record that a widget was hidden/dismissed */ onWidgetHidden(triggerType: string): void; /** * Record that a widget failed to show (to revert state) */ onWidgetShowFailed(triggerType: string): void; /** * Get current anti-spam status for debugging */ getStatus(): { config: AntiSpamConfig | null; state: AntiSpamState; nextAllowedAt?: Date; remainingInSession: number; }; /** * Update configuration (for runtime changes) */ updateConfig(newConfig: Partial<AntiSpamConfig>): void; /** * Manual override to force allow next widget (for debugging) */ forceAllow(): void; /** * Check if anti-spam is currently active */ isEnabled(): boolean; /** * Get configuration (for external inspection) */ getConfig(): AntiSpamConfig | null; /** * Cleanup (called on SDK destroy) */ destroy(): void; } //# sourceMappingURL=AntiSpamManager.d.ts.map