Changes
- Fix route restoration after captcha: replaced
Timer.scheduledTimerdebounce with timestamp-based polling — timer created insideTask { @MainActor }could silently fail to fire, leaving default route in "direct" mode permanently after captcha was solved - Prevent duplicate captcha waiters: added atomic guard (
captchaWaiterActive) so only onewaitCaptchaAndRestartgoroutine runs at a time - Periodic self-retry (every 2 min): when captcha is pending, automatically probes VK to detect cooldown — resumes without user intervention
- Probe suppression: suppresses probes for 10 min after user opens captcha WebView to prevent "Attempt limit reached" errors
- Full route removal during captcha:
suspendDNSForCaptchanow removes default route entirely (captureTraffic=false) so WebView can load CDN resources (JS, CSS, captcha images) - Remove unreliable auto-unblock:
RefreshCaptchaURLno longer auto-clears captcha state, preventing rapid WebView flashing