/** * The correlation engine. * * Given any combination of three evidence sources — * 1. the device error (Video node errorCode/errorInfo), and/or * 2. the parsed manifest (codecs/container/DRM/segments), and/or * 3. the HTTP traffic from a Charles/HAR session — * produce ranked, plain-English root-cause findings, each with the evidence it * relied on, a confidence level, a suggested fix, and a doc link. * * Confidence rises when sources agree. For example, `errorCode -6` (DRM) * corroborated by a license POST returning 403 in the Charles session is a * high-confidence diagnosis; a manifest-only hint ("declares Opus audio") is * low confidence because the device might still play it. */ import type { NormalizedRokuError } from './error-info.js'; import type { ManifestSummary } from './manifest.js'; import type { CharlesSession } from './charles.js'; export type Confidence = 'high' | 'medium' | 'low'; /** * How badly the issue breaks playback: * - 'blocking' : the stream will not play at all (decoder/network/DRM/empty). * - 'degraded' : the stream plays but is impaired (e.g. silent audio). * - 'advisory' : a hint that may or may not matter (segment length, signaling). */ export type Severity = 'blocking' | 'degraded' | 'advisory'; export interface Finding { id: string; cause: string; /** Verbatim evidence strings that support this finding. */ evidence: string[]; confidence: Confidence; /** Playback impact, used to rank a won't-play issue above a plays-but-silent one. */ severity: Severity; fix: string; docUrl: string; } export interface DiagnosisInput { error?: NormalizedRokuError; manifest?: ManifestSummary; charles?: CharlesSession; /** DRM hint the developer told us they configured. */ declaredDrm?: { keySystem?: string; }; } export interface Diagnosis { verdict: string; findings: Finding[]; specVersion: string; specDisclaimer: string; } export declare function diagnose(input: DiagnosisInput): Diagnosis; //# sourceMappingURL=diagnose.d.ts.map