import * as JsSIP from 'jssip'; import { AnswerOptions, RenegotiateOptions, RTCSession, TerminateOptions } from 'jssip/lib/RTCSession'; import { UnRegisterOptions } from 'jssip/lib/UA'; import * as PropTypes from 'prop-types'; import * as React from 'react'; import { CallDirection, CallStatus, SipErrorType, SipStatus } from '../../lib/enums'; import { ExtraHeaders } from '../../lib/types'; export interface JsSipConfig { host: string; port: number; pathname: string; secure: boolean; user: string; password: string; autoRegister: boolean; autoAnswer: boolean; iceRestart: boolean; sessionTimersExpires: number; extraHeaders: ExtraHeaders; iceServers: RTCIceServer[]; debug: boolean; inboundAudioDeviceId: string; outboundAudioDeviceId: string; debugNamespaces?: string | null; } export interface JsSipState { sipStatus: SipStatus; sipErrorType: SipErrorType | null; sipErrorMessage: string | null; callStatus: CallStatus; callDirection: CallDirection | null; callCounterpart: string | null; dtmfSender: RTCDTMFSender | null; callIsOnHold: boolean; callMicrophoneIsMuted: boolean; rtcSession: RTCSession | null; isPlaying: boolean; } export default class SipProvider extends React.Component { static childContextTypes: { sip: PropTypes.Requireable; errorType: PropTypes.Requireable; errorMessage: PropTypes.Requireable; host: PropTypes.Requireable; port: PropTypes.Requireable; user: PropTypes.Requireable; pathname: PropTypes.Requireable; secure: PropTypes.Requireable; password: PropTypes.Requireable; autoRegister: PropTypes.Requireable; autoAnswer: PropTypes.Requireable; sessionTimersExpires: PropTypes.Requireable; extraHeaders: PropTypes.Requireable<{ [x: string]: (string | null | undefined)[] | null | undefined; }>; iceServers: PropTypes.Requireable<(object | null | undefined)[]>; debug: PropTypes.Requireable; debugNamespaces: PropTypes.Requireable; }>>; call: PropTypes.Requireable; status: PropTypes.Requireable; direction: PropTypes.Requireable; counterpart: PropTypes.Requireable; isOnHold: PropTypes.Requireable; hold: PropTypes.Requireable<(...args: any[]) => any>; unhold: PropTypes.Requireable<(...args: any[]) => any>; toggleHold: PropTypes.Requireable<(...args: any[]) => any>; microphoneIsMuted: PropTypes.Requireable; muteMicrophone: PropTypes.Requireable<(...args: any[]) => any>; unmuteMicrophone: PropTypes.Requireable<(...args: any[]) => any>; toggleMuteMicrophone: PropTypes.Requireable<(...args: any[]) => any>; isPlaying: PropTypes.Requireable; }>>; registerSip: PropTypes.Requireable<(...args: any[]) => any>; unregisterSip: PropTypes.Requireable<(...args: any[]) => any>; answerCall: PropTypes.Requireable<(...args: any[]) => any>; startCall: PropTypes.Requireable<(...args: any[]) => any>; stopCall: PropTypes.Requireable<(...args: any[]) => any>; sendDTMF: PropTypes.Requireable<(...args: any[]) => any>; audioSinkId: PropTypes.Requireable; setAudioSinkId: PropTypes.Requireable<(...args: any[]) => any>; }; static propTypes: { host: PropTypes.Requireable; port: PropTypes.Requireable; pathname: PropTypes.Requireable; secure: PropTypes.Requireable; user: PropTypes.Requireable; password: PropTypes.Requireable; autoRegister: PropTypes.Requireable; autoAnswer: PropTypes.Requireable; iceRestart: PropTypes.Requireable; sessionTimersExpires: PropTypes.Requireable; extraHeaders: PropTypes.Requireable<{ [x: string]: (string | null | undefined)[] | null | undefined; }>; iceServers: PropTypes.Requireable<(object | null | undefined)[]>; debug: PropTypes.Requireable; inboundAudioDeviceId: PropTypes.Requireable; outboundAudioDeviceId: PropTypes.Requireable; children: PropTypes.Requireable; }; static defaultProps: { host: null; port: null; pathname: string; secure: boolean; user: null; password: null; autoRegister: boolean; autoAnswer: boolean; iceRestart: boolean; sessionTimersExpires: number; extraHeaders: { register: never[]; invite: never[]; hold: never[]; }; iceServers: never[]; debug: boolean; inboundAudioDeviceId: string; outboundAudioDeviceId: string; children: null; }; private ua; private logger; private currentSinkId; private remoteAudioElement; constructor(props: any); getChildContext(): { sip: { status: SipStatus; errorType: "sipErrorType/CONFIGURATION" | "sipErrorType/CONNECTION" | "sipErrorType/REGISTRATION" | null; errorMessage: string | null; host: string; port: number; pathname: string; secure: boolean; user: string; password: string; autoRegister: boolean; autoAnswer: boolean; iceRestart: boolean; sessionTimersExpires: number; extraHeaders: ExtraHeaders; iceServers: RTCIceServer[]; debug: boolean; inboundAudioDeviceId: string; outboundAudioDeviceId: string; debugNamespaces?: string | null | undefined; children?: React.ReactNode; }; call: { id: string; status: CallStatus; direction: "callDirection/INCOMING" | "callDirection/OUTGOING" | null; counterpart: string | null; dtmfSender: RTCDTMFSender | null; isOnHold: boolean; hold: (useUpdate?: boolean) => void; unhold: (useUpdate?: boolean) => void; toggleHold: (useUpdate?: boolean) => void; microphoneIsMuted: boolean; muteMicrophone: () => void; unmuteMicrophone: () => void; toggleMuteMicrophone: () => void; renegotiate: (options?: RenegotiateOptions | undefined, done?: (() => void) | undefined) => void; }; registerSip: () => void; unregisterSip: (options?: UnRegisterOptions | undefined) => void; audioSinkId: string; setAudioSinkId: (sinkId: string) => Promise; answerCall: (options?: AnswerOptions | undefined) => void; startCall: (destination: string | number, anonymous?: boolean | undefined) => void; stopCall: (options?: TerminateOptions | undefined) => void; sendDTMF: (tones: string, duration?: number, interToneGap?: number) => void; }; getUA(): JsSIP.UA | null; getUAOrFail(): JsSIP.UA; componentDidMount(): void; componentDidUpdate(prevProps: any): void; componentWillUnmount(): void; render(): React.ReactNode; registerSip(): void; unregisterSip(options?: UnRegisterOptions): void; reconfigureDebug(): void; setAudioSinkId: (sinkId: string) => Promise; get audioSinkId(): string; reinitializeJsSIP(): Promise; answerCall: (options?: AnswerOptions | undefined) => void; startCall: (destination: string | number, anonymous?: boolean | undefined) => void; stopCall: (options?: TerminateOptions | undefined) => void; sendDTMF: (tones: string, duration?: number, interToneGap?: number) => void; callHold: (useUpdate?: boolean) => void; callUnhold: (useUpdate?: boolean) => void; callToggleHold: (useUpdate?: boolean) => void; callMuteMicrophone: () => void; callUnmuteMicrophone: () => void; callToggleMuteMicrophone: () => void; renegotiate: (options?: RenegotiateOptions | undefined, done?: (() => void) | undefined) => void; private handleAutoAnswer; private getRemoteAudioOrFail; private createRemoteAudioElement; private deleteRemoteAudio; }