///
import EventEmitter from 'events';
import Logger from 'genesys-cloud-client-logger';
import { JingleReasonCondition } from 'stanza/Constants';
import { SessionOpts } from 'stanza/jingle/Session';
import StrictEventEmitter from 'stanza/lib/StrictEventEmitter';
import { JingleInfo, JingleReason } from 'stanza/protocol';
import { StatsEvent } from 'webrtc-stats-gatherer';
import { JsonRpcMessage, SessionTypes, SessionTypesAsStrings } from './interfaces';
export declare type SessionState = 'pending' | 'active' | 'ended';
export declare type ConnectionState = 'starting' | 'new' | 'connecting' | 'connected' | 'interrupted' | 'disconnected' | 'failed' | 'closed';
export interface SessionEvents {
iceConnectionType: ({
localCandidateType: string;
relayed: boolean;
remoteCandidateType: string;
});
peerTrackAdded: (track: MediaStreamTrack, stream?: MediaStream) => void;
peerTrackRemoved: (track: MediaStreamTrack, stream?: MediaStream) => void;
mute: JingleInfo;
unmute: JingleInfo;
sessionState: SessionState;
connectionState: ConnectionState;
terminated: JingleReason;
stats: StatsEvent;
endOfCandidates: void;
dataChannelMessage: JsonRpcMessage;
}
export interface IMediaSessionParams {
logger: Logger;
id: string;
fromJid: string;
peerID: string;
sessionType: SessionTypes | SessionTypesAsStrings;
allowIPv6?: boolean;
allowTCP?: boolean;
ignoreHostCandidatesFromRemote?: boolean;
optOutOfWebrtcStatsTelemetry?: boolean;
conversationId?: string;
fromUserId?: string;
originalRoomJid?: string;
meetingId?: string;
privAnswerMode?: 'Auto';
}
export interface IStanzaMediaSessionParams extends IMediaSessionParams {
options: SessionOpts;
}
export interface IGenesysCloudMediaSessionParams extends IMediaSessionParams {
iceServers: RTCIceServer[];
iceTransportPolicy: RTCIceTransportPolicy;
reinvite: boolean;
}
export interface IMediaSession extends StrictEventEmitter {
conversationId: string;
id: string;
sessionType: SessionTypes;
fromUserId?: string;
peerID: string;
peerConnection: RTCPeerConnection;
pc: RTCPeerConnection;
dataChannel?: RTCDataChannel;
connectionState: ConnectionState | string;
state: SessionState | string;
reinvite: boolean;
meetingId?: string;
privAnswerMode?: 'Auto';
setupStatsGatherer(): void;
accept(opts?: RTCAnswerOptions): Promise;
end(reason: JingleReasonCondition, silent?: boolean): Promise;
addTrack(track: MediaStreamTrack, stream?: MediaStream): Promise;
removeTrack(sender: RTCRtpSender): Promise;
mute(userId: string, name?: string): Promise;
unmute(userId: string, name?: string): Promise;
hold(): Promise;
resume(): Promise;
}