import { type Throws } from '@livekit/throws-transformer/throws';
import { DataTrackDeserializeError, DataTrackDeserializeErrorReason } from './errors';
import Serializable from './serializable';
export declare enum DataTrackExtensionTag {
    UserTimestamp = 2,
    E2ee = 1
}
declare abstract class DataTrackExtension extends Serializable {
    static tag: DataTrackExtensionTag;
    static lengthBytes: number;
}
export declare class DataTrackUserTimestampExtension extends DataTrackExtension {
    static tag: DataTrackExtensionTag;
    static lengthBytes: number;
    timestamp: bigint;
    constructor(timestamp: bigint);
    toBinaryLengthBytes(): number;
    toBinaryInto(dataView: DataView): Throws<number, never>;
    toJSON(): {
        tag: number;
        lengthBytes: number;
        timestamp: bigint;
    };
}
export declare class DataTrackE2eeExtension extends DataTrackExtension {
    static tag: DataTrackExtensionTag;
    static lengthBytes: number;
    keyIndex: number;
    iv: Uint8Array;
    constructor(keyIndex: number, iv: Uint8Array);
    toBinaryLengthBytes(): number;
    toBinaryInto(dataView: DataView): Throws<number, never>;
    toJSON(): {
        tag: number;
        lengthBytes: number;
        keyIndex: number;
        iv: Uint8Array<ArrayBufferLike>;
    };
}
export declare class DataTrackExtensions extends Serializable {
    userTimestamp?: DataTrackUserTimestampExtension;
    e2ee?: DataTrackE2eeExtension;
    constructor(opts?: {
        userTimestamp?: DataTrackUserTimestampExtension;
        e2ee?: DataTrackE2eeExtension;
    });
    toBinaryLengthBytes(): number;
    toBinaryInto(dataView: DataView): Throws<number, never>;
    static fromBinary<Input extends DataView | ArrayBuffer | Uint8Array>(input: Input): Throws<[
        extensions: DataTrackExtensions,
        byteLength: number
    ], DataTrackDeserializeError<DataTrackDeserializeErrorReason.MalformedExt>>;
    toJSON(): {
        userTimestamp: {
            tag: number;
            lengthBytes: number;
            timestamp: bigint;
        } | null;
        e2ee: {
            tag: number;
            lengthBytes: number;
            keyIndex: number;
            iv: Uint8Array<ArrayBufferLike>;
        } | null;
    };
}
export {};
//# sourceMappingURL=extensions.d.ts.map