diff --git a/mobile/src/lib/sxyprnResolver.ts b/mobile/src/lib/sxyprnResolver.ts index d8b9200..599c658 100644 --- a/mobile/src/lib/sxyprnResolver.ts +++ b/mobile/src/lib/sxyprnResolver.ts @@ -91,21 +91,25 @@ export async function resolveSxyprnPage(pageUrl: string): Promise _diag('fetch_error'); return []; } - // Challenge / ad-gate: gdy user dostaje CF/turnstile albo interstitial zamiast strony - // z playerem, resolve pada i coś w fallbacku pokazuje reklamę. To najbardziej - // podejrzana ścieżka dla "ładuje reklamy" (region/IP-specific). - if (/cf-challenge|challenge-platform|turnstile|Just a moment|Attention Required|Checking your browser/i.test(html)) { - _diag(`challenge_${html.length}b`); - return []; - } - if (html.includes('Post Not Found')) { - _diag('post_not_found'); // usunięty post - return []; - } + // DIAGNOSTYKA MUSI BYĆ CZYSTO OBSERWACYJNA — najpierw prawdziwy sygnał (data-vnfo), + // dopiero potem "dlaczego nie ma". Wcześniejsza wersja gate'owała na wzorcu challenge + // PRZED sprawdzeniem vnfo, a `challenge-platform` to skrypt Cloudflare JSD wstrzykiwany + // do KAŻDEJ strony za CF (bez żadnego challenge) → false positive → return [] na DOBRYCH + // stronach → phone-resolve padał wszystkim → WebView z reklamami. Regresja 2026-07-22, + // naprawiona 2026-07-26. Nigdy nie przerywaj resolve na podstawie heurystyki tekstowej. const m = _VNFO_RE.exec(html); if (!m) { - // Brak data-vnfo: albo zmiana struktury, albo user dostał inną stronę (ad-gate). - // Długość HTML rozróżnia "pełna strona bez vnfo" od "krótki interstitial". + if (html.includes('Post Not Found')) { + _diag('post_not_found'); // usunięty post + return []; + } + // Brak vnfo → DOPIERO teraz diagnozuj powód. Prawdziwy challenge (nie JSD-script): + // interstitial CF/Turnstile zamiast strony z playerem. + if (/cf-challenge|turnstile|Just a moment|Attention Required|Checking your browser/i.test(html)) { + _diag(`challenge_${html.length}b`); + return []; + } + // Pełna strona bez vnfo (zmiana struktury) vs krótki interstitial — rozróżnia długość. _diag(`no_vnfo_${html.length}b`); return []; }