import Call from './call';
import CallError from "./callError";
declare type voiceStatus = "READY" | "OFFLINE" | "BUSY";
declare type registrationEvent = "ready" | "offline";
declare type inviteEvent = "incoming" | "cancel";
declare type callEventWithoutError = "connect" | "reconnect" | "ringing";
declare type callEventWithError = "connectFailure" | "reconnecting" | "disconnect";
declare type callEvent = callEventWithoutError | callEventWithError;
declare type voiceEvent = registrationEvent | inviteEvent | callEvent;
declare type callEventHandler = (call: Call) => void;
declare type callEventWithErrorHandler = (call: Call, err?: CallError) => void;
declare type removeHandlerFn = () => void;
declare class TwilioVoice {
    private _currentCall;
    private _nativeAppEventEmitter;
    private _internalEventHandlers;
    private _eventHandlers;
    private _isSetup;
    private _nativeVersion;
    private _availableEvents;
    constructor();
    get version(): string;
    get nativeVersion(): string | undefined;
    get status(): voiceStatus;
    setIdentity(identity: String): void;
    setToken(token: String): void;
    get availableEvents(): Array<voiceEvent>;
    connect: (params?: {}) => Promise<Call>;
    destroy: () => void;
    on(event: "connect", handler: callEventHandler): removeHandlerFn;
    on(event: "reconnect", handler: callEventHandler): removeHandlerFn;
    on(event: "ringing", handler: callEventHandler): removeHandlerFn;
    on(event: "connectFailure", handler: callEventWithErrorHandler): removeHandlerFn;
    on(event: "reconnecting", handler: callEventWithErrorHandler): removeHandlerFn;
    on(event: "disconnect", handler: callEventWithErrorHandler): removeHandlerFn;
    private removeListener;
    removeAllListeners: () => void;
    private getNativeVersion;
    private setup;
    private addInternalCallEventHandlers;
    private removeInternalCallEventHandlers;
    private handleEvent;
    private createOrUpdateCall;
    private createCallError;
    private parseNativeCallObject;
    private onConnect;
    private onDisconnect;
    private onConnectFailure;
    private onReconnect;
    private onReconnecting;
    private onRinging;
    private disconnectAll;
    requestCameraPermission: () => Promise<false | "granted" | "denied" | "never_ask_again">;
}
declare const _default: TwilioVoice;
export default _default;
