infra/stacks/f1-stream/files
Viktor Barzin da33919368 f1-stream: verifier — wrap m3u8 fetches through /proxy
The frontend already routes every m3u8 URL through `getProxyUrl` →
`/proxy?url=…` so CORS-restricted hosts work for users. The verifier
was the odd one out: it loaded m3u8 URLs directly into hls.js inside a
`data:` URL test page, which has Origin `null`. Hosts like
`oe1.ossfeed.store` (pitsport's playlist CDN) only set ACAO when the
request's Origin is `https://pushembdz.store`, so hls.js got an instant
`fatal_network_error` and every pitsport stream was marked dead even
though they play fine for real users.

Wrap the m3u8 URL the same way the verifier already wraps embed URLs:
`{PROXY_BASE}/proxy?url=<b64>`. Stays same-origin for hls.js, gets
ACAO:* from our proxy, and the rewritten variants are also proxy-wrapped
so subsequent fetches stay clean.

For sites whose CDN serves any IP without Origin tricks (stremio,
dd12), this is transparent — proxy just forwards.

Side effect: every verified m3u8 hits our proxy once during extraction.
Cheap (1 cluster-internal request + 1 upstream HEAD/GET) and only
during the 5/30-min extraction cycle.
2026-05-24 22:26:56 +00:00
..
.claude [ci skip] Flatten module wrappers into stack roots 2026-02-22 15:13:55 +00:00
backend f1-stream: verifier — wrap m3u8 fetches through /proxy 2026-05-24 22:26:56 +00:00
frontend f1-stream: drop broken curated, dedupe streams, accept all pitsport categories 2026-05-07 15:42:24 +00:00
.dockerignore [ci skip] f1-stream: add gitignore for __pycache__, remove committed .pyc 2026-02-23 22:55:38 +00:00
.gitignore [ci skip] f1-stream: add gitignore for __pycache__, remove committed .pyc 2026-02-23 22:55:38 +00:00
Dockerfile f1-stream: only show streams confirmed playable by headless browser 2026-05-06 21:00:07 +00:00
redeploy.sh [ci skip] f1-stream: replace Go service with Python/FastAPI skeleton 2026-02-23 22:47:06 +00:00