From 4e8acd21b0ff36e2f353ac62707f5799a4a043c5 Mon Sep 17 00:00:00 2001 From: goon-foss Date: Sun, 26 Jul 2026 16:12:14 +0200 Subject: [PATCH] =?UTF-8?q?fix(sxyprn):=20diagnostyka=20gate'owa=C5=82a=20?= =?UTF-8?q?resolve=20na=20false-positive=20challenge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit REGRESJA z 3355372 (diagnostyka sxyprn): wzorzec challenge sprawdzany PRZED data-vnfo, a 'challenge-platform' to skrypt Cloudflare JSD wstrzykiwany do KAŻDEJ strony za CF (bez challenge) → false positive na DOBRYCH stronach → return [] → phone-resolve padał wszystkim → fallback backend/proxy → CAŁE wideo przez VPS (potwierdzone: 49MB/chunk na trafficdeposit) + WebView z reklamami. Fix: najpierw prawdziwy sygnał (data-vnfo), diagnoza powodu DOPIERO gdy go brak. 'challenge-platform' usunięty z listy (za szeroki). Diagnostyka znów czysto obserwacyjna — nie przerywa resolve na heurystyce tekstowej. Wykryte przez samą diagnostykę: sxyprn=challenge_197503b / challenge_75831b (197KB/75KB = pełne strony, nie interstitiale). --- mobile/src/lib/sxyprnResolver.ts | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) 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 []; }