export interface Config { baseURL: string; sessionPath: string; browser?: ConfigBrowser; // Optional nested browser config fingerprinting?: ConfigFingerprinting; // Optional nested fingerprinting config parallel: boolean; runOnZeroPoints: boolean; clusters: number; saveFingerprint: ConfigSaveFingerprint; workers: ConfigWorkers; searchOnBingLocalQueries: boolean; globalTimeout: number | string; searchSettings: ConfigSearchSettings; humanization?: ConfigHumanization; // Anti-ban humanization controls retryPolicy?: ConfigRetryPolicy; // Global retry/backoff policy jobState?: ConfigJobState; // Persistence of per-activity checkpoints logExcludeFunc: string[]; webhookLogExcludeFunc: string[]; logging?: ConfigLogging; // Preserve original logging object (for live webhook settings) proxy: ConfigProxy; webhook: ConfigWebhook; conclusionWebhook?: ConfigWebhook; // Optional secondary webhook for final summary ntfy: ConfigNtfy; update?: ConfigUpdate; passesPerRun?: number; vacation?: ConfigVacation; // Optional monthly contiguous off-days crashRecovery?: ConfigCrashRecovery; // Automatic restart / graceful shutdown riskManagement?: ConfigRiskManagement; // NEW: Risk-aware throttling and ban prediction dryRun?: boolean; // NEW: Dry-run mode (simulate without executing) queryDiversity?: ConfigQueryDiversity; // NEW: Multi-source query generation dashboard?: ConfigDashboard; // NEW: Local web dashboard for monitoring and control scheduling?: ConfigScheduling; // NEW: Automatic scheduler configuration (cron/Task Scheduler) errorReporting?: ConfigErrorReporting; // NEW: Automatic error reporting to community webhook } export interface ConfigSaveFingerprint { mobile: boolean; desktop: boolean; } export interface ConfigBrowser { headless?: boolean; globalTimeout?: number | string; } export interface ConfigFingerprinting { saveFingerprint?: ConfigSaveFingerprint; } export interface ConfigSearchSettings { useGeoLocaleQueries: boolean; scrollRandomResults: boolean; clickRandomResults: boolean; searchDelay: ConfigSearchDelay; retryMobileSearchAmount: number; localFallbackCount?: number; // Number of local fallback queries to sample when trends fail extraFallbackRetries?: number; // Additional mini-retry loops with fallback terms semanticDedup?: boolean; // Filter queries with high semantic similarity (default: true) semanticDedupThreshold?: number; // Jaccard similarity threshold 0-1 (default: 0.65, lower = stricter) } export interface ConfigSearchDelay { min: number | string; max: number | string; } export interface ConfigWebhook { enabled: boolean; url: string; } export interface ConfigNtfy { enabled: boolean; url: string; topic: string; authToken?: string; // Optional authentication token } export interface ConfigProxy { proxyGoogleTrends: boolean; proxyBingTerms: boolean; } export interface ConfigUpdate { enabled?: boolean; // Master toggle for auto-updates (default: true) scriptPath?: string; // optional custom path to update script relative to repo root autoUpdateConfig?: boolean; // if true, allow auto-update of config.jsonc when remote changes it (default: false to preserve user settings) autoUpdateAccounts?: boolean; // if true, allow auto-update of accounts.json when remote changes it (default: false to preserve credentials) // DEPRECATED (removed in v2.56.2+): method, docker - update.mjs now uses GitHub API only } export interface ConfigVacation { enabled?: boolean; // default false minDays?: number; // default 3 maxDays?: number; // default 5 } export interface ConfigCrashRecovery { autoRestart?: boolean; // Restart the root process after fatal crash maxRestarts?: number; // Max restart attempts (default 2) backoffBaseMs?: number; // Base backoff before restart (default 2000) restartFailedWorker?: boolean; // (future) attempt to respawn crashed worker restartFailedWorkerAttempts?: number; // attempts per worker (default 1) } export interface ConfigWorkers { doDailySet: boolean; doMorePromotions: boolean; doPunchCards: boolean; doDesktopSearch: boolean; doMobileSearch: boolean; doDailyCheckIn: boolean; doReadToEarn: boolean; bundleDailySetWithSearch?: boolean; // If true, run desktop search right after Daily Set } // Anti-ban humanization export interface ConfigHumanization { // Master toggle for Human Mode. When false, humanization is minimized. enabled?: boolean; // If true, stop processing remaining accounts after a ban is detected stopOnBan?: boolean; // If true, send an immediate webhook/NTFY alert when a ban is detected immediateBanAlert?: boolean; // Additional random waits between actions actionDelay?: { min: number | string; max: number | string }; // Probability [0..1] to perform micro mouse moves per step gestureMoveProb?: number; // Probability [0..1] to perform tiny scrolls per step gestureScrollProb?: number; // Allowed execution windows (local time). Each item is "HH:mm-HH:mm". // If provided, runs outside these windows will be delayed until the next allowed window. allowedWindows?: string[]; // Randomly skip N days per week to look more human (0-7). Default 1. randomOffDaysPerWeek?: number; } // Retry/backoff policy export interface ConfigRetryPolicy { maxAttempts?: number; // default 3 baseDelay?: number | string; // default 1000ms maxDelay?: number | string; // default 30s multiplier?: number; // default 2 jitter?: number; // 0..1; default 0.2 } // Job state persistence export interface ConfigJobState { enabled?: boolean; // default true dir?: string; // base directory; defaults to /job-state skipCompletedAccounts?: boolean; // if true (default), skip accounts already completed for the day autoResetOnComplete?: boolean; // if true, automatically reset and rerun without prompting (useful for scheduled tasks) } // Live logging configuration export interface ConfigLoggingLive { enabled?: boolean; // master switch for live webhook logs redactEmails?: boolean; // if true, redact emails in outbound logs } export interface ConfigLogging { excludeFunc?: string[]; webhookExcludeFunc?: string[]; live?: ConfigLoggingLive; liveWebhookUrl?: string; // legacy/dedicated live webhook override redactEmails?: boolean; // legacy top-level redaction flag // Optional nested live.url support (already handled dynamically in Logger) [key: string]: unknown; // forward compatibility } // CommunityHelp intentionally omitted (privacy-first policy) // NEW FEATURES: Risk Management and Query Diversity export interface ConfigRiskManagement { enabled?: boolean; // master toggle for risk-aware throttling autoAdjustDelays?: boolean; // automatically increase delays when risk is high stopOnCritical?: boolean; // halt execution if risk reaches critical level banPrediction?: boolean; // enable ML-style ban prediction riskThreshold?: number; // 0-100, pause if risk exceeds this } export interface ConfigQueryDiversity { enabled?: boolean; // use multi-source query generation sources?: Array<'google-trends' | 'reddit' | 'news' | 'wikipedia' | 'local-fallback'>; // which sources to use maxQueriesPerSource?: number; // limit per source cacheMinutes?: number; // cache duration } export interface ConfigDashboard { enabled?: boolean; // auto-start dashboard with bot (default: false) port?: number; // dashboard server port (default: 3000) host?: string; // bind address (default: 127.0.0.1) } export interface ConfigScheduling { enabled?: boolean; // Enable automatic daily scheduling time?: string; // Daily execution time in 24h format (HH:MM) - e.g., "09:00" for 9 AM (RECOMMENDED) cron?: { // Legacy cron format (for backwards compatibility) - DEPRECATED schedule?: string; // Cron expression - e.g., "0 9 * * *" for 9 AM daily }; } export interface ConfigErrorReporting { enabled?: boolean; // enable automatic error reporting to community webhook (default: true) }