{"record":{"id":"0332f472a55f4a37","repo":"tonhowtf/omniget","slug":"twitch-gql-token-retornou-http-mod","errorCode":null,"errorMessage":"Twitch GQL token retornou HTTP {}","messagePattern":"Twitch GQL token retornou HTTP (.+?)","errorType":"http","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src-tauri/src/platforms/twitch/mod.rs","lineNumber":220,"sourceCode":"            \"variables\": { \"slug\": slug },\n            \"extensions\": {\n                \"persistedQuery\": {\n                    \"version\": 1,\n                    \"sha256Hash\": TOKEN_HASH\n                }\n            }\n        }]);\n\n        let response = self\n            .client\n            .post(GQL_URL)\n            .header(\"client-id\", CLIENT_ID)\n            .json(&body)\n            .send()\n            .await?;\n\n        if !response.status().is_success() {\n            return Err(anyhow!(\n                \"Twitch GQL token retornou HTTP {}\",\n                response.status()\n            ));\n        }\n\n        let json: serde_json::Value = response.json().await?;\n\n        let token_obj = json\n            .as_array()\n            .and_then(|arr| arr.first())\n            .and_then(|r| r.pointer(\"/data/clip/playbackAccessToken\"))\n            .ok_or_else(|| anyhow!(\"Access token not available for clip: {}\", slug))?;\n\n        let signature = token_obj\n            .get(\"signature\")\n            .and_then(|v| v.as_str())\n            .ok_or_else(|| anyhow!(\"Token sem signature\"))?\n            .to_string();","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/src/platforms/twitch/mod.rs#L202-L238","documentation":"The persisted-query GQL request for a clip's playback access token returned a non-success HTTP status; the {} is the raw code. The sha256Hash-pinned query was rejected at the HTTP level — typically rate limiting, an expired persisted-query hash, or a Twitch-side error.","triggerScenarios":"Thrown at src-tauri/src/platforms/twitch/mod.rs:220 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry after a short wait if rate limited","Update the app so TOKEN_HASH matches Twitch's current persisted query","Use yt-dlp download mode as a fallback for this clip"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}