import { HMSException } from './error';
import { HMSMessage, HMSMessageID } from './message';
import { HMSPeer, HMSPeerID, HMSSpeaker, HMSTrack, HMSTrackID } from './peer';
import { HMSPlaylist } from './playlist';
import { HMSRoleChangeStoreRequest } from './requests';
import { HMSRole } from './role';
import { HMSRoom } from './room';
import { HMSMediaSettings } from './settings';
import { DeviceMap, HMSConnectionQuality, HMSPeerStats, HMSPoll, HMSTrackStats, HMSWhiteboard } from '../interfaces';
export interface HMSGenericTypes {
    sessionStore: Record<string, any>;
}
export interface HMSStore<T extends HMSGenericTypes = {
    sessionStore: Record<string, any>;
}> {
    room: HMSRoom;
    peers: Record<HMSPeerID, HMSPeer>;
    speakers: Record<HMSTrackID, HMSSpeaker>;
    connectionQualities: Record<HMSPeerID, HMSConnectionQuality>;
    tracks: Record<HMSTrackID, HMSTrack>;
    playlist: HMSPlaylist<any>;
    messages: {
        byID: Record<HMSMessageID, HMSMessage>;
        allIDs: HMSMessageID[];
    };
    settings: HMSMediaSettings;
    devices: DeviceMap;
    roles: Record<string, HMSRole>;
    templateAppData: Record<string, string>;
    appData?: Record<string, any>;
    roleChangeRequests: HMSRoleChangeStoreRequest[];
    /** @deprecated use `sessionStore` instead */
    sessionMetadata?: any;
    preview?: {
        localPeer?: HMSPeerID;
        asRole?: string;
        videoTrack?: HMSTrackID;
        audioTrack?: HMSTrackID;
    };
    errors: HMSException[];
    sessionStore: T['sessionStore'];
    polls: Record<string, HMSPoll>;
    /** @internal */
    hideLocalPeer: boolean;
    whiteboards: Record<string, HMSWhiteboard>;
}
export interface HMSStatsStore {
    remoteTrackStats: Record<HMSTrackID, HMSTrackStats | undefined>;
    localTrackStats: Record<HMSTrackID, HMSTrackStats[] | undefined>;
    peerStats: Record<HMSPeerID, HMSPeerStats | undefined>;
    localPeer: {
        id: HMSPeerID;
        videoTrack?: HMSTrackID;
        audioTrack?: HMSTrackID;
    };
}
/**
 * @internal
 */
export declare const createDefaultStoreState: <T extends HMSGenericTypes>() => HMSStore<T>;
export declare const createDefaultStatsStore: () => HMSStatsStore;
