/// <reference types="node" />
import OT, { Device } from '@opentok/client';
import { EventEmitter } from 'events';
import { VideoOverlay } from './video-overlay/overlay';
import { VideoFilter } from '../utils/types';
declare interface Publisher {
    on(event: 'audioLevelUpdated', listener: (audioLevel: number) => void): this;
    on(event: 'videoElementCreated', listener: () => void): this;
    on(event: 'destroyed', listener: () => void): this;
    on(event: 'accessAllowed', listener: () => void): this;
    on(event: 'accessDenied', listener: () => void): this;
    on(event: 'accessDialogOpened', listener: () => void): this;
    on(event: 'accessDialogClosed', listener: (reason: string) => void): this;
}
declare class Publisher extends EventEmitter {
    otPublisher?: OT.Publisher;
    source: string;
    name?: string;
    _otPublisherPromise?: Promise<OT.Publisher>;
    overlay: VideoOverlay | undefined;
    initials?: string;
    constructor(source?: string, name?: string, initials?: string);
    initOTPublisher: (targetElement?: HTMLElement | string, publisherOptions?: OT.PublisherProperties) => Promise<OT.Publisher>;
    getOTPublisher: () => Promise<OT.Publisher> | undefined;
    onDestroyed: () => void;
    _onVideoElementCreated: () => void;
    _toggleAudioEnabled: () => void;
    isVideoEnabled: () => boolean;
    isAudioEnabled: () => boolean;
    enableVideo: () => void;
    disableVideo: () => void;
    enableAudio: () => void;
    disableAudio: () => void;
    getVideoDevice: () => Device;
    setVideoDevice: (videoDeviceId: string) => Promise<void>;
    getAudioDevice: () => Promise<Device>;
    setAudioDevice: (audioDeviceId: string) => Promise<void>;
    destroyOTPublisher: () => void;
    setVideoFilter: (videoFilter: VideoFilter) => Promise<void>;
    clearVideoFilter: () => Promise<void>;
    setDisabledImageURI: (imageURI: string) => void;
}
export default Publisher;
