jssip
Version:
the Javascript SIP library
203 lines (162 loc) • 5.6 kB
TypeScript
import {EventEmitter} from 'events'
import {Socket, WeightedSocket} from './Socket'
import {AnswerOptions, Originator, RTCSession, RTCSessionEventMap, TerminateOptions} from './RTCSession'
import {IncomingRequest, IncomingResponse, OutgoingRequest} from './SIPMessage'
import {Message, SendMessageOptions} from './Message'
import {Registrator} from './Registrator'
import {URI} from './URI'
import {causes} from './Constants'
export interface UnRegisterOptions {
all?: boolean;
}
export interface CallOptions extends AnswerOptions {
eventHandlers?: Partial<RTCSessionEventMap>;
anonymous?: boolean;
fromUserName?: string;
fromDisplayName?: string;
}
export interface UAConfiguration {
// mandatory parameters
sockets: Socket | Socket[] | WeightedSocket[] ;
uri: string;
// optional parameters
authorization_jwt?: string;
authorization_user?: string;
connection_recovery_max_interval?: number;
connection_recovery_min_interval?: number;
contact_uri?: string;
display_name?: string;
instance_id?: string;
no_answer_timeout?: number;
session_timers?: boolean;
session_timers_refresh_method?: string;
session_timers_force_refresher?: boolean;
password?: string;
realm?: string;
ha1?: string;
register?: boolean;
register_expires?: number;
registrar_server?: string;
use_preloaded_route?: boolean;
user_agent?: string;
extra_headers?: string[];
}
export interface IncomingRTCSessionEvent {
originator: Originator.REMOTE;
session: RTCSession;
request: IncomingRequest;
}
export interface OutgoingRTCSessionEvent {
originator: Originator.LOCAL;
session: RTCSession;
request: IncomingRequest;
}
export type RTCSessionEvent = IncomingRTCSessionEvent | OutgoingRTCSessionEvent;
export interface ConnectingEvent {
socket: Socket;
attempts: number
}
export interface ConnectedEvent {
socket: Socket;
}
export interface DisconnectEvent {
socket: Socket;
error: boolean;
code?: number;
reason?: string;
}
export interface RegisteredEvent {
response: IncomingResponse;
}
export interface UnRegisteredEvent {
response: IncomingResponse;
cause?: causes;
}
export interface IncomingMessageEvent {
originator: Originator.REMOTE;
message: Message;
request: IncomingRequest;
}
export interface OutgoingMessageEvent {
originator: Originator.LOCAL;
message: Message;
request: OutgoingRequest;
}
export interface IncomingOptionsEvent {
originator: Originator.REMOTE;
request: IncomingRequest;
}
export interface OutgoingOptionsEvent {
originator: Originator.LOCAL;
request: OutgoingRequest;
}
export type ConnectingListener = (event: ConnectingEvent) => void;
export type ConnectedListener = (event: ConnectedEvent) => void;
export type DisconnectedListener = (event: DisconnectEvent) => void;
export type RegisteredListener = (event: RegisteredEvent) => void;
export type UnRegisteredListener = (event: UnRegisteredEvent) => void;
export type RegistrationFailedListener = UnRegisteredListener;
export type RegistrationExpiringListener = () => void;
export type IncomingRTCSessionListener = (event: IncomingRTCSessionEvent) => void;
export type OutgoingRTCSessionListener = (event: OutgoingRTCSessionEvent) => void;
export type RTCSessionListener = IncomingRTCSessionListener | OutgoingRTCSessionListener;
export type IncomingMessageListener = (event: IncomingMessageEvent) => void;
export type OutgoingMessageListener = (event: OutgoingMessageEvent) => void;
export type MessageListener = IncomingMessageListener | OutgoingMessageListener;
export type IncomingOptionsListener = (event: IncomingOptionsEvent) => void;
export type OutgoingOptionsListener = (event: OutgoingOptionsEvent) => void;
export type OptionsListener = IncomingOptionsListener | OutgoingOptionsListener;
export type SipEventListener = <T = any>(event: { event: T; request: IncomingRequest; }) => void
export interface UAEventMap {
connecting: ConnectingListener;
connected: ConnectedListener;
disconnected: DisconnectedListener;
registered: RegisteredListener;
unregistered: UnRegisteredListener;
registrationFailed: RegistrationFailedListener;
registrationExpiring: RegistrationExpiringListener;
newRTCSession: RTCSessionListener;
newMessage: MessageListener;
sipEvent: SipEventListener;
newOptions: OptionsListener;
}
export interface UAContactOptions {
anonymous?: boolean;
outbound?: boolean;
}
export interface UAContact {
pub_gruu?: string,
temp_gruu?: string,
uri?: string;
toString(options?: UAContactOptions): string
}
declare enum UAStatus {
// UA status codes.
STATUS_INIT = 0,
STATUS_READY = 1,
STATUS_USER_CLOSED = 2,
STATUS_NOT_READY = 3,
// UA error codes.
CONFIGURATION_ERROR = 1,
NETWORK_ERROR = 2
}
export class UA extends EventEmitter {
static get C(): typeof UAStatus;
constructor(configuration: UAConfiguration);
get C(): typeof UAStatus;
get status(): UAStatus;
get contact(): UAContact;
start(): void;
stop(): void;
register(): void;
unregister(options?: UnRegisterOptions): void;
registrator(): Registrator;
call(target: string, options?: CallOptions): RTCSession;
sendMessage(target: string | URI, body: string, options?: SendMessageOptions): Message;
terminateSessions(options?: TerminateOptions): void;
isRegistered(): boolean;
isConnected(): boolean;
get<T extends keyof UAConfiguration>(parameter: T): UAConfiguration[T];
set<T extends keyof UAConfiguration>(parameter: T, value: UAConfiguration[T]): boolean;
on<T extends keyof UAEventMap>(type: T, listener: UAEventMap[T]): this;
}