@evercall/react-sip
Version:
React wrapper for jssip
208 lines (207 loc) • 8.81 kB
TypeScript
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<JsSipConfig, JsSipState> {
static childContextTypes: {
sip: PropTypes.Requireable<PropTypes.InferProps<{
status: PropTypes.Requireable<string>;
errorType: PropTypes.Requireable<string>;
errorMessage: PropTypes.Requireable<string>;
host: PropTypes.Requireable<string>;
port: PropTypes.Requireable<number>;
user: PropTypes.Requireable<string>;
pathname: PropTypes.Requireable<string>;
secure: PropTypes.Requireable<boolean>;
password: PropTypes.Requireable<string>;
autoRegister: PropTypes.Requireable<boolean>;
autoAnswer: PropTypes.Requireable<boolean>;
sessionTimersExpires: PropTypes.Requireable<number>;
extraHeaders: PropTypes.Requireable<{
[x: string]: (string | null | undefined)[] | null | undefined;
}>;
iceServers: PropTypes.Requireable<(object | null | undefined)[]>;
debug: PropTypes.Requireable<boolean>;
debugNamespaces: PropTypes.Requireable<string>;
}>>;
call: PropTypes.Requireable<PropTypes.InferProps<{
id: PropTypes.Requireable<string>;
status: PropTypes.Requireable<string>;
direction: PropTypes.Requireable<string>;
counterpart: PropTypes.Requireable<string>;
isOnHold: PropTypes.Requireable<boolean>;
hold: PropTypes.Requireable<(...args: any[]) => any>;
unhold: PropTypes.Requireable<(...args: any[]) => any>;
toggleHold: PropTypes.Requireable<(...args: any[]) => any>;
microphoneIsMuted: PropTypes.Requireable<boolean>;
muteMicrophone: PropTypes.Requireable<(...args: any[]) => any>;
unmuteMicrophone: PropTypes.Requireable<(...args: any[]) => any>;
toggleMuteMicrophone: PropTypes.Requireable<(...args: any[]) => any>;
isPlaying: PropTypes.Requireable<boolean>;
}>>;
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<string>;
setAudioSinkId: PropTypes.Requireable<(...args: any[]) => any>;
};
static propTypes: {
host: PropTypes.Requireable<string>;
port: PropTypes.Requireable<number>;
pathname: PropTypes.Requireable<string>;
secure: PropTypes.Requireable<boolean>;
user: PropTypes.Requireable<string>;
password: PropTypes.Requireable<string>;
autoRegister: PropTypes.Requireable<boolean>;
autoAnswer: PropTypes.Requireable<boolean>;
iceRestart: PropTypes.Requireable<boolean>;
sessionTimersExpires: PropTypes.Requireable<number>;
extraHeaders: PropTypes.Requireable<{
[x: string]: (string | null | undefined)[] | null | undefined;
}>;
iceServers: PropTypes.Requireable<(object | null | undefined)[]>;
debug: PropTypes.Requireable<boolean>;
inboundAudioDeviceId: PropTypes.Requireable<string>;
outboundAudioDeviceId: PropTypes.Requireable<string>;
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
};
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<void>;
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<void>;
get audioSinkId(): string;
reinitializeJsSIP(): Promise<void>;
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;
}