import type { ReceiverConfig } from './moq_receiver_internals.js';
export type RelayLabel = 'main' | 'backup';
/**
 * One MoQ subscribing session against one relay. Connections share nothing (not
 * even depackagers, which are stateful per stream), so a slow or dead relay
 * never delays another one. Every object is posted tagged with the relay; the
 * player de-duplicates them in its jitter buffers.
 */
export declare class ReceiverConnection {
    readonly label: RelayLabel;
    readonly url: string;
    private config;
    private moq;
    private depackagers;
    private waitingForHeader;
    private closed;
    constructor(label: RelayLabel, url: string, config: ReceiverConfig);
    /**
     * Open the session and subscribe to the configured tracks. Never rejects: a
     * failure only takes this connection down, it is logged and the other
     * connections go on.
     */
    start(): Promise<void>;
    close(): void;
    private objectHandler;
    private endOfGroupHandler;
    private handleObject;
    private depackagerFor;
    /**
     * A CMSF object that arrives before the first CMAF Header (which the
     * publisher repeats at most once a second) describes neither its timing nor
     * its codec, so it cannot be decoded. That is expected when joining mid-group:
     * skip it and report once per media type instead of failing the session.
     */
    private isDecodable;
    private toTrackTimebase;
    private reportStats;
    private log;
    private prefix;
}
//# sourceMappingURL=receiver_connection.d.ts.map