import { RTCSession, UA } from '@krivega/jssip'; import { TContentHint } from '../utils/peerConnection'; import { Originator } from './events'; import { RemoteStreamsManager } from './RemoteStreamsManager'; export type TOnAddedTransceiver = (transceiver: RTCRtpTransceiver, track: MediaStreamTrack) => Promise; export type TGetUri = (id: string) => string; type TOptionsExtraHeaders = { extraHeaders?: string[]; }; type TParamsAnswerToIncomingCall = { mediaStream: MediaStream; extraHeaders?: TOptionsExtraHeaders['extraHeaders']; iceServers?: RTCIceServer[]; directionVideo?: RTCRtpTransceiverDirection; directionAudio?: RTCRtpTransceiverDirection; contentHint?: TContentHint; degradationPreference?: RTCDegradationPreference; sendEncodings?: RTCRtpEncodingParameters[]; offerToReceiveAudio?: boolean; offerToReceiveVideo?: boolean; onAddedTransceiver?: TOnAddedTransceiver; }; export type TParamsCall = TParamsAnswerToIncomingCall & { number: string; }; export type TCustomError = Error & { originator?: `${Originator}`; cause?: unknown; message: unknown; _ws?: unknown; socket?: unknown; url?: string; code?: string; }; export type TCallConfig = { answer?: boolean; number?: string; }; export type TStartCall = (ua: UA, getUri: TGetUri, params: TParamsCall) => Promise; export type TReplaceMediaStream = (mediaStream: MediaStream, options?: { directionVideo?: RTCRtpTransceiverDirection; directionAudio?: RTCRtpTransceiverDirection; deleteExisting?: boolean; addMissing?: boolean; forceRenegotiation?: boolean; contentHint?: TContentHint; degradationPreference?: RTCDegradationPreference; sendEncodings?: RTCRtpEncodingParameters[]; onAddedTransceiver?: TOnAddedTransceiver; }) => Promise; export type TAnswerToIncomingCall = (extractIncomingRTCSession: () => RTCSession, params: TParamsAnswerToIncomingCall) => Promise; export interface IMCUSession { readonly connection: RTCPeerConnection | undefined; readonly isCallActive: boolean; getEstablishedRTCSession: () => RTCSession | undefined; getPcConfig: () => { iceServers?: RTCIceServer[]; } | undefined; startCall: TStartCall; endCall: () => Promise; renegotiate: () => Promise; answerToIncomingCall: (incomingRTCSession: RTCSession, params: TParamsAnswerToIncomingCall) => Promise; replaceMediaStream: TReplaceMediaStream; restartIce: (options?: { useUpdate?: boolean; extraHeaders?: string[]; rtcOfferConstraints?: RTCOfferOptions; sendEncodings?: RTCRtpEncodingParameters[]; degradationPreference?: RTCDegradationPreference; }) => Promise; setMinBitrateForSenders: (kinds?: 'audio' | 'video' | 'all') => void; restoreBitrateForSenders: (kinds?: 'audio' | 'video' | 'all') => void; } export type TRemoteStreams = { mainStream?: MediaStream; contentedStream?: MediaStream; }; export type TGetRemoteStreams = () => TRemoteStreams; export type TStreamsManagerTools = { manager: RemoteStreamsManager; getRemoteStreams: TGetRemoteStreams; }; export type TRemoteTracksChangeType = 'added' | 'removed' | 'updated'; export {};