export declare const NOT_MEDIA_PAYLOAD: "NOT_MEDIA_PAYLOAD";
/**
 * Thrown when a file behind a `<video>`/`<audio>` src is a text document
 * (HTML, XML, SVG, JSON) rather than a media container.
 *
 * Motivating incident: STUDIO-5433 — an authoring bug produced an a-roll
 * element whose src pointed at a `streamed-preview.html` URL that downloaded
 * to a legitimate 6.5 KB `<!DOCTYPE html>` page instead of the expected MP4.
 * ffprobe's `[mov,mp4,m4a,3gp,3g2,mj2 @ ...] moov atom not found` masked the
 * cause (the `mov,mp4,…` prefix is ffprobe's demuxer probe order, not the
 * file's true format), so the alert routed as an ffmpeg/codec bug.
 *
 * Only a 2xx response reaches this classifier. `downloadToTemp` rejects a
 * 404/410 as `http_not_found` before writing a byte (urlDownloader.ts
 * `classifyHttpFailure`), and every ffprobe input is local — an http src is
 * downloaded first. So the shapes that land here are a soft-404 or
 * interstitial HTML body, an S3/CloudFront error document, or a JSON API error
 * body, each served with a success status.
 *
 * Deliberately says nothing about *why* the payload is a document: an
 * unresolved nested-composition URL and a CDN error page served with a 200
 * both land here, and naming only the first sends on-call after the wrong
 * cause.
 *
 * Message discipline mirrors `AssetMediaTypeMismatchError`: bounded text with
 * hashed element correlation keys, never the authored src or the payload's own
 * bytes — producer forwards `error.message` to API clients.
 */
export declare class NotMediaPayloadError extends Error {
    readonly code: "NOT_MEDIA_PAYLOAD";
    readonly owner: "user";
    readonly retryable: false;
    readonly elementFingerprints: readonly string[];
    constructor(elementFingerprints: readonly string[]);
}
/** Stable, bounded correlation key. Never the raw element id or source. */
export declare function fingerprintElementId(elementId: string): string;
/**
 * True when the file's first meaningful byte opens a text document (`<`, `{`,
 * `[`) rather than a media container. BOM- and whitespace-tolerant.
 *
 * Three bytes replace an allowlist of document shapes: `<!doctype`, `<html`,
 * `<?xml`, a prolog-less `<svg`, an S3 `<Error>` body, and a JSON
 * `{"detail": "requested file not found"}` all start with one of them, and no
 * container this pipeline supports does — mp4/mov start with a box size,
 * Matroska/WebM `1A 45 DF A3`, Ogg `OggS`, RIFF `RIFF`, MPEG-TS `0x47`, FLAC
 * `fLaC`, ADTS `FF Fx`, MP3 `ID3`. An allowlist would need a new entry every
 * time a new payload shape shows up in production.
 *
 * Never throws: this is a classifier, not a gate. An unreadable file (EACCES,
 * EISDIR, a temp file evicted between `existsSync` and here) reports "not a
 * document" so the real probe still produces the real error, exactly as it did
 * before the sniff existed.
 */
export declare function isNotMediaPayload(filePath: string): Promise<boolean>;
/**
 * Throw {@link NotMediaPayloadError} if `filePath` is a text document.
 *
 * Only for sources whose element type can never legitimately be one —
 * `<video>` and `<audio>`. An `<img>` src may be an SVG, which ffprobe reads
 * through its `svg_pipe` demuxer, so image sources must not be sniffed.
 */
export declare function assertMediaPayload(filePath: string, elementId: string): Promise<void>;
//# sourceMappingURL=notMediaPayload.d.ts.map