fix(sxyprn): diagnostyka gate'owała resolve na false-positive challenge
Some checks are pending
Backend tests / test (push) Waiting to run
Some checks are pending
Backend tests / test (push) Waiting to run
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).
This commit is contained in:
parent
33553729f8
commit
4e8acd21b0
1 changed files with 17 additions and 13 deletions
|
|
@ -91,21 +91,25 @@ export async function resolveSxyprnPage(pageUrl: string): Promise<StreamLink[]>
|
|||
_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 [];
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue