/// <reference types="node" />
import { EventEmitter } from 'events';
import { SDK as RingCentralSDK } from '@ringcentral/sdk';
import { Session, SessionData } from './Session';
export interface SessionsMap {
    [key: string]: any;
}
export interface SessionMessage {
    event: string;
    body: any;
}
export interface Device {
    id: string;
    linePooling: string;
    name: string;
    uri: string;
    type: 'SoftPhone' | 'OtherPhone' | 'HardPhone';
    serial: string;
    computerName: string;
    boxBillingId: Number;
    useAsCommonPhone: boolean;
    inCompanyNet: boolean;
    model: any;
    extension: any;
    emergencyServiceAddress: any;
    phoneLines: any[];
    shipping: any;
    sku: any;
    status: 'Initial' | 'Offline' | 'Online';
    site: any;
    lastLocationReportTime: string;
}
export interface EventSequenceData {
    sequence: number;
    updatedAt: number;
    telephonySessionId: string;
}
export interface EventSequenceMap {
    [key: string]: EventSequenceData;
}
export interface Account {
    id: string;
}
export interface Extension {
    id: string;
    uri: string;
    account: Account;
    contact: any;
    departments: any[];
    extensionNumber: string;
    name: string;
    partnerId: string;
    permissions: any[];
    profileImage: any;
    references: any[];
    roles: any[];
    regionalSettings: any;
    serviceFeatures: any[];
    setupWizardState: string;
    status: string;
    statusInfo: string;
    type: string;
    callQueueExtensionInfo: any;
    hidden: boolean;
}
export interface CallOutToParams {
    phoneNumber?: string;
    extensionNumber?: string;
}
export declare class RingCentralCallControl extends EventEmitter {
    private _sdk;
    private _sessionsMap;
    private _devices;
    private _currentExtension;
    private _accountLevel;
    private _ready;
    private _initializePromise;
    private _preloadSessions;
    private _preloadDevices;
    private _userAgent;
    private _eventSequenceMap;
    constructor({ sdk, accountLevel, preloadSessions, preloadDevices, extensionInfo, userAgent, }: {
        sdk: RingCentralSDK;
        accountLevel?: boolean;
        preloadSessions?: boolean;
        preloadDevices?: boolean;
        extensionInfo?: Extension;
        userAgent?: string;
    });
    initialize(): Promise<void>;
    private _initialize;
    onNotificationEvent(message: SessionMessage): void;
    private checkSequence;
    private cleanExpiredSequenceData;
    get sessions(): Session[];
    get sessionsMap(): SessionsMap;
    private loadCurrentExtension;
    private preloadSessions;
    private loadActiveCalls;
    loadSessions(activeCalls: any): Promise<void>;
    restoreSessions(sessionDatas: SessionData[]): void;
    private loadDevices;
    private onSessionStatusUpdated;
    refreshDevices(): Promise<void>;
    createCall(deviceId: string, to: CallOutToParams): Promise<Session>;
    createConference(): Promise<Session>;
    get accountId(): string;
    get extensionId(): string;
    get devices(): Device[];
    get ready(): boolean;
    get requestOptions(): {
        userAgent: string;
    };
    get eventSequenceMap(): EventSequenceMap;
}
