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

  1. Treat as a permanent skip: mark the tweet_id unavailable and continue the batch
  2. Log the tombstone reason/text from the raw response to distinguish deleted vs suspended vs withheld
  3. Re-check the tweet via the syndication endpoint before permanently discarding it
  4. 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

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


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)