tonhowtf/omniget · info · Error
HLS nao e suportado neste navegador
Error message
HLS nao e suportado neste navegador
What it means
Raised by extract_graphql_media when the GraphQL result for a tweet is a tombstone whose reason is not NsfwLoggedOut and whose text is not age-restricted (e.g. suspended, deleted, or blocked tweets). The library maps any unexplained tombstone to the generic "Post not available" because the media cannot be extracted.
Solutions
- Treat as a permanent skip: mark the tweet_id unavailable and continue the batch
- Log the tombstone reason/text from the raw response to distinguish deleted vs suspended vs withheld
- Re-check the tweet via the syndication endpoint before permanently discarding it
- Remove the dead tweet_id from the queue to avoid re-hitting the error
Example fix
// before
Err(anyhow!("Post not available"))
// after
Err(TwitterError::Tombstone { tweet_id, reason: reason.to_string() }) // preserves why the post is gone Defensive patterns
Strategy: try-catch
Validate before calling
// Cheap existence probe before full media extraction
const r = await fetch(`https://syndication.twitter.com/srv/timeline-profile/screen-name/${author}`);
if (!r.ok) throw new SkipError('tweet likely deleted or suspended'); Type guard
function isTombstone(result) {
return result?.__typename === 'TweetTombstone';
} Try / catch
match tweet.extract_graphql_media(id) {
Err(e) if e.to_string() == "Post not available" => mark_unavailable(id),
other => other,
} Prevention
- Treat tombstoned tweets as permanently unavailable; do not retry indefinitely
- Record the tombstone reason from the raw response for diagnostics
- Purge deleted tweet_ids from work queues
- Keep raw GraphQL responses for post-hoc triage of new tombstone reasons
When it happens
Trigger: extract_graphql_media encounters a tombstone entry with a reason other than "NsfwLoggedOut" (deleted post, suspended account, country-withheld content), so it falls through to the final Err(anyhow!("Post not available")) after the age-restriction check.
Common situations: Fetching a tweet that was deleted between enqueue and fetch; the author's account was suspended; the tweet is withheld in the scraper's region; stale tweet_ids in a batch job producing repeated failures.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Não capturei seu login. Tenta de novo.
- ERR_TOO_MANY_ATTACHMENTS
- refresh returned no audio format
- post indisponivel
- Twitter API retornou HTTP
AI-assisted analysis of tonhowtf/omniget@8600b91f42 (2026-09-12).
Data as JSON: /api/errors/025e9fcfcf927b2e.
Report an issue: GitHub.
Appendix: source
Thrown at src/lib/study-music/hls-loader.svelte.ts:20
export type HlsHandle = {
destroy: () => void;
};
export async function attachHls(audio: HTMLAudioElement, m3u8Url: string): Promise<HlsHandle> {
if (audio.canPlayType("application/vnd.apple.mpegurl") !== "") {
audio.src = m3u8Url;
return {
destroy: () => {
try {
audio.src = "";
} catch {}
},
};
}
if (!Hls.isSupported()) {
throw new Error("HLS nao e suportado neste navegador");
}
const hls = new Hls({
enableWorker: false,
lowLatencyMode: false,
});
hls.loadSource(m3u8Url);
hls.attachMedia(audio);
return {
destroy: () => {
try {
hls.destroy();
} catch {}
},
};
}
View on GitHub (pinned to 8600b91f42)