import type TypedEventEmitter from 'typed-emitter';
import type RTCEngine from '../room/RTCEngine';
import type Room from '../room/Room';
import type { E2EEManagerCallbacks } from './events';
import type { DecryptDataResponseMessage, E2EEManagerOptions, EncryptDataResponseMessage } from './types';
export interface BaseE2EEManager {
    setup(room: Room): void;
    setupEngine(engine: RTCEngine): void;
    isEnabled: boolean;
    isDataChannelEncryptionEnabled: boolean;
    setParticipantCryptorEnabled(enabled: boolean, participantIdentity: string): void;
    setSifTrailer(trailer: Uint8Array): void;
    encryptData(data: Uint8Array): Promise<EncryptDataResponseMessage['data']>;
    handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number): Promise<DecryptDataResponseMessage['data']>;
    on<E extends keyof E2EEManagerCallbacks>(event: E, listener: E2EEManagerCallbacks[E]): this;
}
declare const E2EEManager_base: new () => TypedEventEmitter<E2EEManagerCallbacks>;
/**
 * @experimental
 */
export declare class E2EEManager extends E2EEManager_base implements BaseE2EEManager {
    protected worker: Worker;
    protected room?: Room;
    private encryptionEnabled;
    private keyProvider;
    private decryptDataRequests;
    private encryptDataRequests;
    private dataChannelEncryptionEnabled;
    constructor(options: E2EEManagerOptions, dcEncryptionEnabled: boolean);
    get isEnabled(): boolean;
    get isDataChannelEncryptionEnabled(): boolean;
    /**
     * @internal
     */
    setup(room: Room): void;
    /**
     * @internal
     */
    setParticipantCryptorEnabled(enabled: boolean, participantIdentity: string): void;
    /**
     * @internal
     */
    setSifTrailer(trailer: Uint8Array): void;
    private onWorkerMessage;
    private onWorkerError;
    setupEngine(engine: RTCEngine): void;
    private setupEventListeners;
    encryptData(data: Uint8Array): Promise<EncryptDataResponseMessage['data']>;
    handleEncryptedData(payload: Uint8Array, iv: Uint8Array, participantIdentity: string, keyIndex: number): Promise<{
        uuid: string;
        payload: Uint8Array;
    } & {
        readonly __throws?: Error | undefined;
    }>;
    private postRatchetRequest;
    private postKey;
    private postEnable;
    private postRTPMap;
    private postSifTrailer;
    private setupE2EEReceiver;
    private setupE2EESender;
    /**
     * Handles the given {@code RTCRtpReceiver} by creating a {@code TransformStream} which will inject
     * a frame decoder.
     *
     */
    private handleReceiver;
    /**
     * Handles the given {@code RTCRtpSender} by creating a {@code TransformStream} which will inject
     * a frame encoder.
     *
     */
    private handleSender;
}
export {};
//# sourceMappingURL=E2eeManager.d.ts.map
