sip-connector 22.0.0 → 23.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{@SipConnector-OAqRbRF0.js → @SipConnector-CmHfa0Ce.js} +891 -667
- package/dist/@SipConnector-DwgaqxCG.cjs +1 -0
- package/dist/ApiManager/@ApiManager.d.ts +8 -10
- package/dist/ApiManager/constants.d.ts +80 -44
- package/dist/ApiManager/events.d.ts +7 -5
- package/dist/ApiManager/getHeader.d.ts +3 -0
- package/dist/ApiManager/index.d.ts +3 -2
- package/dist/CallManager/@CallManager.d.ts +7 -1
- package/dist/CallManager/StreamsChangeTracker.d.ts +35 -0
- package/dist/CallManager/StreamsManagerProvider.d.ts +11 -3
- package/dist/ConnectionManager/ConnectionStateMachine.d.ts +0 -2
- package/dist/ContentedStreamManager/@ContentedStreamManager.d.ts +19 -0
- package/dist/ContentedStreamManager/ContentedStreamStateMachine.d.ts +52 -0
- package/dist/ContentedStreamManager/events.d.ts +15 -0
- package/dist/ContentedStreamManager/index.d.ts +4 -0
- package/dist/ContentedStreamManager/types.d.ts +7 -0
- package/dist/SipConnector/@SipConnector.d.ts +2 -5
- package/dist/SipConnectorFacade/@SipConnectorFacade.d.ts +3 -3
- package/dist/StatsPeerConnection/@StatsPeerConnection.d.ts +2 -1
- package/dist/VideoSendingBalancer/types.d.ts +2 -2
- package/dist/__fixtures__/createManagers.d.ts +12 -0
- package/dist/doMock.cjs +1 -1
- package/dist/doMock.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +22 -22
- package/dist/tools/BaseStateMachine.d.ts +2 -0
- package/package.json +1 -1
- package/dist/@SipConnector-mL9nMhkX.cjs +0 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { TRemoteStreams } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Сравнивает два объекта TRemoteStreams на равенство по ID потоков
|
|
4
|
+
* @param streams1 - Первый объект streams для сравнения
|
|
5
|
+
* @param streams2 - Второй объект streams для сравнения
|
|
6
|
+
* @returns true, если streams равны (имеют одинаковые ID mainStream и contentedStream)
|
|
7
|
+
*/
|
|
8
|
+
export declare const hasStreamsEqual: (streams1?: TRemoteStreams, streams2?: TRemoteStreams) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Класс для отслеживания изменений удаленных streams
|
|
11
|
+
* Хранит последнее состояние streams и определяет, изменились ли они
|
|
12
|
+
*/
|
|
13
|
+
export declare class StreamsChangeTracker {
|
|
14
|
+
private lastEmittedStreams?;
|
|
15
|
+
/**
|
|
16
|
+
* Проверяет, изменились ли streams с последнего сохраненного состояния
|
|
17
|
+
* @param streams - Текущие streams для проверки
|
|
18
|
+
* @returns true, если streams изменились
|
|
19
|
+
*/
|
|
20
|
+
hasChanged(streams: TRemoteStreams): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Сохраняет текущие streams как последнее эмитнутое состояние
|
|
23
|
+
* @param streams - Streams для сохранения
|
|
24
|
+
*/
|
|
25
|
+
updateLastEmittedStreams(streams: TRemoteStreams): void;
|
|
26
|
+
/**
|
|
27
|
+
* Получает последние эмитнутые streams
|
|
28
|
+
* @returns Последние сохраненные streams или undefined
|
|
29
|
+
*/
|
|
30
|
+
getLastEmittedStreams(): TRemoteStreams | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Сбрасывает состояние трекера
|
|
33
|
+
*/
|
|
34
|
+
reset(): void;
|
|
35
|
+
}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import { TContentedStreamStateInfo } from '../ContentedStreamManager';
|
|
1
2
|
import { RemoteStreamsManager } from './RemoteStreamsManager';
|
|
2
3
|
import { TStreamsManagerTools } from './types';
|
|
3
4
|
export declare class StreamsManagerProvider {
|
|
4
5
|
private readonly mainRemoteStreamsManager;
|
|
5
6
|
private readonly recvRemoteStreamsManager;
|
|
6
7
|
constructor(mainRemoteStreamsManager: RemoteStreamsManager, recvRemoteStreamsManager: RemoteStreamsManager);
|
|
7
|
-
getActiveStreamsManagerTools(isSpectator
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
getActiveStreamsManagerTools({ isSpectator, stateInfo, }: {
|
|
9
|
+
isSpectator: boolean;
|
|
10
|
+
stateInfo: TContentedStreamStateInfo;
|
|
11
|
+
}): TStreamsManagerTools;
|
|
12
|
+
getMainRemoteStreamsManagerTools({ stateInfo, }: {
|
|
13
|
+
stateInfo: TContentedStreamStateInfo;
|
|
14
|
+
}): TStreamsManagerTools;
|
|
15
|
+
getRecvRemoteStreamsManagerTools({ stateInfo, }: {
|
|
16
|
+
stateInfo: TContentedStreamStateInfo;
|
|
17
|
+
}): TStreamsManagerTools;
|
|
10
18
|
}
|
|
@@ -71,7 +71,6 @@ declare const connectionMachine: import('xstate').StateMachine<IConnectionMachin
|
|
|
71
71
|
export type TConnectionSnapshot = SnapshotFrom<typeof connectionMachine>;
|
|
72
72
|
export type TConnectionActor = ActorRefFrom<typeof connectionMachine>;
|
|
73
73
|
export default class ConnectionStateMachine extends BaseStateMachine<typeof connectionMachine, EState> {
|
|
74
|
-
private readonly stateChangeListeners;
|
|
75
74
|
private readonly events;
|
|
76
75
|
private unsubscribeFromEvents?;
|
|
77
76
|
constructor(events: TEvents);
|
|
@@ -92,7 +91,6 @@ export default class ConnectionStateMachine extends BaseStateMachine<typeof conn
|
|
|
92
91
|
startInitUa(): void;
|
|
93
92
|
reset(): void;
|
|
94
93
|
destroy(): void;
|
|
95
|
-
onStateChange(listener: (state: EState) => void): () => void;
|
|
96
94
|
canTransition(event: TConnectionMachineEvent): boolean;
|
|
97
95
|
getValidEvents(): TConnectionMachineEvent[];
|
|
98
96
|
private hasState;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ContentedStreamStateMachine } from './ContentedStreamStateMachine';
|
|
2
|
+
import { ApiManager, EContentedStreamCodec } from '../ApiManager';
|
|
3
|
+
import { TEventMap, TEvents } from './events';
|
|
4
|
+
import { TContentedStreamStateInfo } from './types';
|
|
5
|
+
declare class ContentedStreamManager {
|
|
6
|
+
readonly events: TEvents;
|
|
7
|
+
readonly stateMachine: ContentedStreamStateMachine;
|
|
8
|
+
constructor();
|
|
9
|
+
get isAvailable(): boolean;
|
|
10
|
+
get codec(): EContentedStreamCodec | undefined;
|
|
11
|
+
getStateInfo(): TContentedStreamStateInfo;
|
|
12
|
+
reset(): void;
|
|
13
|
+
on<T extends keyof TEventMap>(eventName: T, handler: (data: TEventMap[T]) => void): () => void;
|
|
14
|
+
once<T extends keyof TEventMap>(eventName: T, handler: (data: TEventMap[T]) => void): () => void;
|
|
15
|
+
off<T extends keyof TEventMap>(eventName: T, handler: (data: TEventMap[T]) => void): void;
|
|
16
|
+
subscribeToApiEvents(apiManager: ApiManager): void;
|
|
17
|
+
private proxyEvents;
|
|
18
|
+
}
|
|
19
|
+
export default ContentedStreamManager;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { BaseStateMachine } from '../tools/BaseStateMachine';
|
|
2
|
+
import { ActorRefFrom, SnapshotFrom } from 'xstate';
|
|
3
|
+
import { TApiManagerEvents, EContentedStreamCodec } from '../ApiManager';
|
|
4
|
+
import { TContentedStreamStateInfo } from './types';
|
|
5
|
+
export declare enum EState {
|
|
6
|
+
NOT_AVAILABLE = "contented-stream:not-available",
|
|
7
|
+
AVAILABLE = "contented-stream:available"
|
|
8
|
+
}
|
|
9
|
+
type TContentedStreamEvent = {
|
|
10
|
+
type: 'CONTENTED_STREAM.AVAILABLE';
|
|
11
|
+
codec?: EContentedStreamCodec;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'CONTENTED_STREAM.NOT_AVAILABLE';
|
|
14
|
+
} | {
|
|
15
|
+
type: 'CONTENTED_STREAM.RESET';
|
|
16
|
+
};
|
|
17
|
+
interface IContentedStreamContext {
|
|
18
|
+
codec?: EContentedStreamCodec;
|
|
19
|
+
}
|
|
20
|
+
declare const contentedStreamMachine: import('xstate').StateMachine<IContentedStreamContext, {
|
|
21
|
+
type: "CONTENTED_STREAM.AVAILABLE";
|
|
22
|
+
codec?: EContentedStreamCodec;
|
|
23
|
+
} | {
|
|
24
|
+
type: "CONTENTED_STREAM.NOT_AVAILABLE";
|
|
25
|
+
} | {
|
|
26
|
+
type: "CONTENTED_STREAM.RESET";
|
|
27
|
+
}, {}, never, {
|
|
28
|
+
type: "setCodec";
|
|
29
|
+
params: import('xstate').NonReducibleUnknown;
|
|
30
|
+
} | {
|
|
31
|
+
type: "clearCodec";
|
|
32
|
+
params: import('xstate').NonReducibleUnknown;
|
|
33
|
+
}, never, never, EState, string, import('xstate').NonReducibleUnknown, import('xstate').NonReducibleUnknown, import('xstate').EventObject, import('xstate').MetaObject, {
|
|
34
|
+
id: "contented-stream";
|
|
35
|
+
states: {
|
|
36
|
+
readonly "contented-stream:not-available": {};
|
|
37
|
+
readonly "contented-stream:available": {};
|
|
38
|
+
};
|
|
39
|
+
}>;
|
|
40
|
+
export type TContentedStreamSnapshot = SnapshotFrom<typeof contentedStreamMachine>;
|
|
41
|
+
export type TContentedStreamActor = ActorRefFrom<typeof contentedStreamMachine>;
|
|
42
|
+
export declare class ContentedStreamStateMachine extends BaseStateMachine<typeof contentedStreamMachine, EState> {
|
|
43
|
+
constructor();
|
|
44
|
+
get isAvailable(): boolean;
|
|
45
|
+
get isNotAvailable(): boolean;
|
|
46
|
+
get codec(): EContentedStreamCodec | undefined;
|
|
47
|
+
getStateInfo(): TContentedStreamStateInfo;
|
|
48
|
+
reset(): void;
|
|
49
|
+
send(event: TContentedStreamEvent): void;
|
|
50
|
+
subscribeToApiEvents(apiManager: TApiManagerEvents): void;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TypedEvents } from 'events-constructor';
|
|
2
|
+
import { EContentedStreamCodec } from '../ApiManager';
|
|
3
|
+
export declare enum EEvent {
|
|
4
|
+
AVAILABLE = "available",
|
|
5
|
+
NOT_AVAILABLE = "not-available"
|
|
6
|
+
}
|
|
7
|
+
export declare const EVENT_NAMES: readonly [EEvent.AVAILABLE, EEvent.NOT_AVAILABLE];
|
|
8
|
+
export type TEventMap = {
|
|
9
|
+
available: {
|
|
10
|
+
codec?: EContentedStreamCodec;
|
|
11
|
+
};
|
|
12
|
+
'not-available': Record<string, never>;
|
|
13
|
+
};
|
|
14
|
+
export type TEvents = TypedEvents<TEventMap>;
|
|
15
|
+
export declare const createEvents: () => TypedEvents<TEventMap, readonly (keyof TEventMap)[]>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as ContentedStreamManager } from './@ContentedStreamManager';
|
|
2
|
+
export { ContentedStreamStateMachine, EState } from './ContentedStreamStateMachine';
|
|
3
|
+
export type { TContentedStreamActor, TContentedStreamSnapshot, } from './ContentedStreamStateMachine';
|
|
4
|
+
export type { TContentedStreamStateInfo } from './types';
|
|
@@ -4,6 +4,7 @@ import { CallManager, TGetUri } from '../CallManager';
|
|
|
4
4
|
import { ConferenceStateManager } from '../ConferenceStateManager';
|
|
5
5
|
import { ConnectionManager } from '../ConnectionManager';
|
|
6
6
|
import { ConnectionQueueManager } from '../ConnectionQueueManager';
|
|
7
|
+
import { ContentedStreamManager } from '../ContentedStreamManager';
|
|
7
8
|
import { IncomingCallManager } from '../IncomingCallManager';
|
|
8
9
|
import { PresentationManager, TContentHint, TOnAddedTransceiver } from '../PresentationManager';
|
|
9
10
|
import { SessionManager } from '../SessionManager';
|
|
@@ -18,6 +19,7 @@ declare class SipConnector {
|
|
|
18
19
|
readonly connectionManager: ConnectionManager;
|
|
19
20
|
readonly connectionQueueManager: ConnectionQueueManager;
|
|
20
21
|
readonly conferenceStateManager: ConferenceStateManager;
|
|
22
|
+
readonly contentedStreamManager: ContentedStreamManager;
|
|
21
23
|
readonly callManager: CallManager;
|
|
22
24
|
readonly autoConnectorManager: AutoConnectorManager;
|
|
23
25
|
readonly apiManager: ApiManager;
|
|
@@ -110,11 +112,6 @@ declare class SipConnector {
|
|
|
110
112
|
sendRefusalToTurnOn(...args: Parameters<ApiManager['sendRefusalToTurnOn']>): Promise<void>;
|
|
111
113
|
sendRefusalToTurnOnMic(...args: Parameters<ApiManager['sendRefusalToTurnOnMic']>): Promise<void>;
|
|
112
114
|
sendRefusalToTurnOnCam(...args: Parameters<ApiManager['sendRefusalToTurnOnCam']>): Promise<void>;
|
|
113
|
-
sendMustStopPresentationP2P(...args: Parameters<ApiManager['sendMustStopPresentationP2P']>): Promise<void>;
|
|
114
|
-
sendStoppedPresentationP2P(...args: Parameters<ApiManager['sendStoppedPresentationP2P']>): Promise<void>;
|
|
115
|
-
sendStoppedPresentation(...args: Parameters<ApiManager['sendStoppedPresentation']>): Promise<void>;
|
|
116
|
-
askPermissionToStartPresentationP2P(...args: Parameters<ApiManager['askPermissionToStartPresentationP2P']>): Promise<void>;
|
|
117
|
-
askPermissionToStartPresentation(...args: Parameters<ApiManager['askPermissionToStartPresentation']>): Promise<void>;
|
|
118
115
|
askPermissionToEnableCam(...args: Parameters<ApiManager['askPermissionToEnableCam']>): Promise<void>;
|
|
119
116
|
private subscribeDisconnectedFromOutOfCall;
|
|
120
117
|
private subscribeConnectedWithConfigurationFromOutOfCall;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EContentUseLicense } from '../ApiManager';
|
|
2
2
|
import { TOnAddedTransceiver, TRemoteStreams } from '../CallManager';
|
|
3
3
|
import { TParametersConnection, TConnectionConfigurationWithUa } from '../ConnectionManager';
|
|
4
4
|
import { TContentHint } from '../PresentationManager';
|
|
@@ -132,7 +132,7 @@ declare class SipConnectorFacade implements IProxyMethods {
|
|
|
132
132
|
onAddedTransceiver?: TOnAddedTransceiver;
|
|
133
133
|
callLimit?: number;
|
|
134
134
|
}) => Promise<MediaStream | undefined>;
|
|
135
|
-
|
|
135
|
+
stopPresentation: ({ isP2P }?: {
|
|
136
136
|
isP2P?: boolean;
|
|
137
137
|
}) => Promise<void | MediaStream | undefined>;
|
|
138
138
|
sendRefusalToTurnOnMic: () => Promise<void>;
|
|
@@ -163,7 +163,7 @@ declare class SipConnectorFacade implements IProxyMethods {
|
|
|
163
163
|
track: MediaStreamTrack;
|
|
164
164
|
}) => void;
|
|
165
165
|
getRemoteStreams: () => TRemoteStreams;
|
|
166
|
-
onUseLicense: (handler: (license:
|
|
166
|
+
onUseLicense: (handler: (license: EContentUseLicense) => void) => (() => void);
|
|
167
167
|
onMustStopPresentation: (handler: () => void) => (() => void);
|
|
168
168
|
onMoveToSpectators: (handler: () => void) => (() => void);
|
|
169
169
|
onMoveToParticipants: (handler: () => void) => (() => void);
|
|
@@ -5,7 +5,7 @@ declare class StatsPeerConnection {
|
|
|
5
5
|
private readonly requesterAllStatistics;
|
|
6
6
|
constructor();
|
|
7
7
|
get requested(): boolean;
|
|
8
|
-
start(
|
|
8
|
+
start(getPeerConnection: () => RTCPeerConnection | undefined, { interval, onError, }?: {
|
|
9
9
|
onError?: (error: unknown) => void;
|
|
10
10
|
interval?: number;
|
|
11
11
|
}): void;
|
|
@@ -16,5 +16,6 @@ declare class StatsPeerConnection {
|
|
|
16
16
|
wait<T extends keyof TEventMap>(eventName: T): Promise<TEventMap[T]>;
|
|
17
17
|
off<T extends keyof TEventMap>(eventName: T, handler: (data: TEventMap[T]) => void): void;
|
|
18
18
|
private readonly collectStatistics;
|
|
19
|
+
private readonly requestAllStatistics;
|
|
19
20
|
}
|
|
20
21
|
export default StatsPeerConnection;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EContentMainCAM } from '../ApiManager';
|
|
2
2
|
import { TOnSetParameters, TResultSetParametersToSender } from '../tools';
|
|
3
3
|
export interface IBalancerOptions {
|
|
4
4
|
ignoreForCodec?: string;
|
|
5
5
|
onSetParameters?: TOnSetParameters;
|
|
6
6
|
}
|
|
7
7
|
export interface IMainCamHeaders {
|
|
8
|
-
mainCam?:
|
|
8
|
+
mainCam?: EContentMainCAM;
|
|
9
9
|
resolutionMainCam?: string;
|
|
10
10
|
}
|
|
11
11
|
export interface IBalancingContext {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ApiManager } from '../ApiManager';
|
|
2
|
+
import { CallManager } from '../CallManager';
|
|
3
|
+
import { ConferenceStateManager } from '../ConferenceStateManager';
|
|
4
|
+
import { ConnectionManager } from '../ConnectionManager';
|
|
5
|
+
import { ContentedStreamManager } from '../ContentedStreamManager';
|
|
6
|
+
export declare const createManagers: () => {
|
|
7
|
+
conferenceStateManager: ConferenceStateManager;
|
|
8
|
+
connectionManager: ConnectionManager;
|
|
9
|
+
contentedStreamManager: ContentedStreamManager;
|
|
10
|
+
callManager: CallManager;
|
|
11
|
+
apiManager: ApiManager;
|
|
12
|
+
};
|
package/dist/doMock.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const V=require("node:events"),U=require("@krivega/jssip/lib/NameAddrHeader"),j=require("@krivega/jssip/lib/URI"),q=require("@krivega/jssip/lib/SIPMessage"),a=require("@krivega/jssip"),_=require("webrtc-mock"),v=require("events-constructor"),D=require("./@SipConnector-mL9nMhkX.cjs");class N extends q.IncomingRequest{headers;constructor(e){super(),this.headers=new Headers(e)}getHeader(e){return this.headers.get(e)??""}}const G="incomingCall",H="declinedIncomingCall",x="failedIncomingCall",z="terminatedIncomingCall",y="connecting",Y="connected",B="disconnected",K="newRTCSession",J="registered",$="unregistered",Q="registrationFailed",X="newMessage",Z="sipEvent",ee="availableSecondRemoteStream",te="notAvailableSecondRemoteStream",re="mustStopPresentation",ne="enterRoom",oe="useLicense",ie="peerconnection:confirmed",se="peerconnection:ontrack",ae="channels",ce="channels:notify",de="ended:fromserver",he="main-cam-control",Ee="admin:stop-main-cam",ue="admin:start-main-cam",me="admin:stop-mic",le="admin:start-mic",pe="admin:force-sync-media-state",ge="participant:added-to-list-moderators",_e="participant:removed-from-list-moderators",Te="participant:move-request-to-stream",Ie="participant:move-request-to-spectators",Se="participant:move-request-to-participants",Ne="participation:accepting-word-request",we="participation:cancelling-word-request",Ce="webcast:started",fe="webcast:stopped",Re="account:changed",Ae="account:deleted",Me="conference:participant-token-issued",Oe="ended",Pe="sending",ve="reinvite",De="replaces",ye="refer",Le="progress",Fe="accepted",We="confirmed",be="peerconnection",ke="failed",Ve="muted",Ue="unmuted",je="newDTMF",qe="newInfo",Ge="hold",He="unhold",xe="update",ze="sdp",Ye="icecandidate",Be="getusermediafailed",Ke="peerconnection:createofferfailed",Je="peerconnection:createanswerfailed",$e="peerconnection:setlocaldescriptionfailed",Qe="peerconnection:setremotedescriptionfailed",Xe="presentation:start",Ze="presentation:started",et="presentation:end",tt="presentation:ended",rt="presentation:failed",nt=[G,H,z,x,Ne,we,Te,ce,Me,Re,Ae,Ce,fe,ge,_e],L=[y,Y,B,K,J,$,Q,X,Z],ot=[ee,te,re,ne,oe,ie,se,ae,de,he,ue,Ee,me,le,pe,Ie,Se],T=[Oe,y,Pe,ve,De,ye,Le,Fe,We,be,ke,Ve,Ue,je,qe,Ge,He,xe,ze,Ye,Be,Ke,Je,$e,Qe,Xe,Ze,et,tt,rt];[...L,...nt];[...T,...ot];class it{originator;connection;events;remote_identity;mutedOptions={audio:!1,video:!1};constructor({originator:e="local",eventHandlers:t,remoteIdentity:r}){this.originator=e,this.events=new v.Events(T),this.initEvents(t),this.remote_identity=r}get contact(){throw new Error("Method not implemented.")}get direction(){throw new Error("Method not implemented.")}get local_identity(){throw new Error("Method not implemented.")}get start_time(){throw new Error("Method not implemented.")}get end_time(){throw new Error("Method not implemented.")}get status(){throw new Error("Method not implemented.")}get C(){throw new Error("Method not implemented.")}get causes(){throw new Error("Method not implemented.")}get id(){throw new Error("Method not implemented.")}get data(){throw new Error("Method not implemented.")}set data(e){throw new Error("Method not implemented.")}isInProgress(){throw new Error("Method not implemented.")}isEnded(){throw new Error("Method not implemented.")}isReadyToReOffer(){throw new Error("Method not implemented.")}answer(e){throw new Error("Method not implemented.")}terminate(e){throw new Error("Method not implemented.")}async sendInfo(e,t,r){throw new Error("Method not implemented.")}hold(e,t){throw new Error("Method not implemented.")}unhold(e,t){throw new Error("Method not implemented.")}async renegotiate(e,t){throw new Error("Method not implemented.")}isOnHold(){throw new Error("Method not implemented.")}mute(e){throw new Error("Method not implemented.")}unmute(e){throw new Error("Method not implemented.")}isMuted(){throw new Error("Method not implemented.")}refer(e,t){throw new Error("Method not implemented.")}resetLocalMedia(){throw new Error("Method not implemented.")}async replaceMediaStream(e,t){throw new Error("Method not implemented.")}addListener(e,t){throw new Error("Method not implemented.")}once(e,t){throw new Error("Method not implemented.")}removeListener(e,t){throw new Error("Method not implemented.")}off(e,t){return this.events.off(e,t),this}removeAllListeners(e){return console.warn("Method not implemented. Event:",e),this}setMaxListeners(e){throw new Error("Method not implemented.")}getMaxListeners(){throw new Error("Method not implemented.")}listeners(e){throw new Error("Method not implemented.")}rawListeners(e){throw new Error("Method not implemented.")}emit(e,...t){throw new Error("Method not implemented.")}listenerCount(e){throw new Error("Method not implemented.")}prependListener(e,t){throw new Error("Method not implemented.")}prependOnceListener(e,t){throw new Error("Method not implemented.")}eventNames(){throw new Error("Method not implemented.")}initEvents(e){e&&Object.entries(e).forEach(([t,r])=>{this.on(t,r)})}on(e,t){return T.includes(e)&&this.events.on(e,t),this}trigger(e,t){this.events.trigger(e,t)}sendDTMF(){this.trigger("newDTMF",{originator:this.originator})}async startPresentation(e){return this.trigger("presentation:start",e),this.trigger("presentation:started",e),e}async stopPresentation(e){return this.trigger("presentation:end",e),this.trigger("presentation:ended",e),e}isEstablished(){return!0}}class R{stats=new Map().set("codec",{mimeType:"video/h264"});dtmf=null;track=null;transport=null;transform=null;parameters={encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}};parametersGets;constructor({track:e}={}){this.track=e??null}async getStats(){return this.stats}async replaceTrack(e){this.track=e??null}async setParameters(e){if(e!==this.parametersGets)throw new Error("Failed to execute 'setParameters' on 'RTCRtpSender': Read-only field modified in setParameters().");const{transactionId:t}=this.parameters;this.parameters={...this.parameters,...e,transactionId:`${Number(t)+1}`}}getParameters(){return this.parametersGets={...this.parameters},this.parametersGets}setStreams(){throw new Error("Method not implemented.")}}class A{currentDirection="sendrecv";direction="sendrecv";mid=null;receiver;sender;stopped=!1;constructor(e){this.sender=e}setCodecPreferences(e){}stop(){}}class st extends EventTarget{senders=[];receivers=[];canTrickleIceCandidates;connectionState;currentLocalDescription;currentRemoteDescription;iceConnectionState;iceGatheringState;idpErrorInfo;idpLoginUrl;localDescription;onconnectionstatechange;ondatachannel;onicecandidate;onicecandidateerror=null;oniceconnectionstatechange;onicegatheringstatechange;onnegotiationneeded;onsignalingstatechange;ontrack;peerIdentity=void 0;pendingLocalDescription;pendingRemoteDescription;remoteDescription;sctp=null;signalingState;close=jest.fn();setLocalDescription=jest.fn(async e=>{});setRemoteDescription=jest.fn(async e=>{});addTransceiver=jest.fn((e,t)=>({}));createOffer=jest.fn(async(e,t,r)=>({type:"offer",sdp:"offer-sdp"}));constructor(e,t){super(),this.receivers=t?.map(r=>({track:r}))??[]}getRemoteStreams(){throw new Error("Method not implemented.")}async addIceCandidate(e){throw new Error("Method not implemented.")}restartIce(){throw new Error("Method not implemented.")}async createAnswer(e,t){throw new Error("Method not implemented.")}createDataChannel(e,t){throw new Error("Method not implemented.")}getConfiguration(){throw new Error("Method not implemented.")}async getIdentityAssertion(){throw new Error("Method not implemented.")}async getStats(e){throw new Error("Method not implemented.")}getTransceivers(){throw new Error("Method not implemented.")}removeTrack(e){throw new Error("Method not implemented.")}setConfiguration(e){throw new Error("Method not implemented.")}getReceivers=()=>this.receivers;getSenders=()=>this.senders;addTrack=(e,...t)=>{const r=new R({track:e}),o=new A(r);return o.mid=e.kind==="audio"?"0":"1",this.senders.push(r),this.dispatchTrackInternal(e,...t),r};addTrackWithMid=(e,t)=>{const r=new R({track:e}),o=new A(r);return t===void 0?o.mid=e.kind==="audio"?"0":"1":o.mid=t,this.senders.push(r),this.dispatchTrackInternal(e),r};dispatchTrack(e){this.dispatchTrackInternal(new _.MediaStreamTrackMock(e))}dispatchTrackInternal(e,...t){const r=new Event("track");Object.defineProperty(r,"track",{value:e}),Object.defineProperty(r,"streams",{value:t.length===0?[new MediaStream([e])]:t}),this.dispatchEvent(r)}}function at(n){const e=n.match(/(purgatory)|[\d.]+/g);if(!e)throw new Error("wrong sip url");return e[0]}const M=400,F="777",ct=n=>n.getVideoTracks().length>0;class s extends it{static presentationError;static startPresentationError;static countStartPresentationError=Number.POSITIVE_INFINITY;static countStartsPresentation=0;url;status_code;renegotiate=jest.fn(async()=>!0);answer=jest.fn(({mediaStream:e})=>{if(this.originator!=="remote")throw new Error("answer available only for remote sessions");this.initPeerconnection(e),setTimeout(()=>{this.trigger("connecting"),setTimeout(()=>{this.trigger("accepted")},100),setTimeout(()=>{this.trigger("confirmed")},200)},M)});replaceMediaStream=jest.fn(async e=>{});_isReadyToReOffer=jest.fn(()=>!0);addTransceiver=jest.fn((e,t)=>({}));restartIce=jest.fn(async e=>!0);isEndedInner=!1;delayStartPresentation=0;timeoutStartPresentation;timeoutConnect;timeoutNewInfo;timeoutAccepted;timeoutConfirmed;constructor({eventHandlers:e,originator:t,remoteIdentity:r=new a.NameAddrHeader(new a.URI("sip","caller1","test1.com",5060),"Test Caller 1"),delayStartPresentation:o=0}){super({originator:t,eventHandlers:e,remoteIdentity:r}),this.delayStartPresentation=o}static get C(){return a.SessionStatus}static setPresentationError(e){this.presentationError=e}static resetPresentationError(){this.presentationError=void 0}static setStartPresentationError(e,{count:t=Number.POSITIVE_INFINITY}={}){this.startPresentationError=e,this.countStartPresentationError=t}static resetStartPresentationError(){this.startPresentationError=void 0,this.countStartPresentationError=Number.POSITIVE_INFINITY,this.countStartsPresentation=0}startPresentation=async e=>(s.countStartsPresentation+=1,new Promise((t,r)=>{this.timeoutStartPresentation=setTimeout(()=>{if(s.presentationError){this.trigger("presentation:start",e),this.trigger("presentation:failed",e),r(s.presentationError);return}if(s.startPresentationError&&s.countStartsPresentation<s.countStartPresentationError){this.trigger("presentation:start",e),this.trigger("presentation:failed",e),r(s.startPresentationError);return}t(super.startPresentation(e))},this.delayStartPresentation)}));stopPresentation=async e=>{if(s.presentationError)throw this.trigger("presentation:end",e),this.trigger("presentation:failed",e),s.presentationError;return super.stopPresentation(e)};initPeerconnection(e){return e?(this.createPeerconnection(e),!0):!1}createPeerconnection(e){const t=_.createAudioMediaStreamTrackMock();t.id="mainaudio1";const r=[t];if(ct(e)){const c=_.createVideoMediaStreamTrackMock();c.id="mainvideo1",r.push(c)}this.connection=new st(void 0,r),this.trigger("peerconnection",{peerconnection:this.connection}),this.addStream(e)}connect(e,{mediaStream:t}={}){const r=at(e);return this.initPeerconnection(t),this.timeoutConnect=setTimeout(()=>{e.includes(F)?this.trigger("failed",{originator:"remote",message:"IncomingResponse",cause:"Rejected"}):(this.trigger("connecting"),this.timeoutNewInfo=setTimeout(()=>{this.newInfo({originator:D.Originator.REMOTE,request:{getHeader:o=>o==="content-type"?"application/vinteo.webrtc.roomname":o==="x-webrtc-enter-room"?r:o==="x-webrtc-participant-name"?"Test Caller 1":""}})},100),this.timeoutAccepted=setTimeout(()=>{this.trigger("accepted")},200),this.timeoutConfirmed=setTimeout(()=>{this.trigger("confirmed")},300))},M),this.connection}terminate({status_code:e,cause:t}={}){return this.status_code=e,this.trigger("ended",{status_code:e,cause:t,originator:"local"}),this.isEndedInner=!1,this}async terminateAsync({status_code:e,cause:t}={}){this.terminate({status_code:e,cause:t})}terminateRemote({status_code:e}={}){return this.status_code=e,this.trigger("ended",{status_code:e,originator:"remote"}),this}addStream(e,t="getTracks"){e[t]().forEach(r=>this.connection.addTrack(r,e))}forEachSenders(e){const t=this.connection.getSenders();for(const r of t)e(r);return t}toggleMuteAudio(e){this.forEachSenders(({track:t})=>{t?.kind==="audio"&&(t.enabled=!e)})}toggleMuteVideo(e){this.forEachSenders(({track:t})=>{t?.kind==="video"&&(t.enabled=!e)})}mute(e){e.audio&&(this.mutedOptions.audio=!0,this.toggleMuteAudio(this.mutedOptions.audio)),e.video&&(this.mutedOptions.video=!0,this.toggleMuteVideo(this.mutedOptions.video)),this.onmute(e)}unmute(e){e.audio&&(this.mutedOptions.audio=!1),e.video&&(this.mutedOptions.video=!1),this.trigger("unmuted",e)}isMuted(){return this.mutedOptions}onmute({audio:e,video:t}){this.trigger("muted",{audio:e,video:t})}async sendInfo(){}isEnded(){return this.isEndedInner}newInfo(e){this.trigger("newInfo",e)}clear(){clearTimeout(this.timeoutStartPresentation),clearTimeout(this.timeoutConnect),clearTimeout(this.timeoutNewInfo),clearTimeout(this.timeoutAccepted),clearTimeout(this.timeoutConfirmed)}}class dt{extraHeaders=[];setExtraHeaders(e){this.extraHeaders=e}setExtraContactParams(){}}const d="PASSWORD_CORRECT",I="PASSWORD_CORRECT_2",W="NAME_INCORRECT",E=400,g={url:"wss://sipServerUrl/webrtc/wss/",sip_uri:"sip:sipServerUrl;transport=ws",via_transport:"WSS"},O={status_code:200,reason_phrase:"OK"},P={status_code:401,reason_phrase:"Unauthorized"};class i{static isAvailableTelephony=!0;static startError;static countStartError=Number.POSITIVE_INFINITY;static countStarts=0;events;registratorInner;call=jest.fn((e,t)=>{const{mediaStream:r,eventHandlers:o}=t;return this.session=new s({eventHandlers:o,originator:"local"}),this.session.connect(e,{mediaStream:r}),this.session});sendOptions=jest.fn((e,t,r)=>{console.log("sendOptions",e,t,r)});start=jest.fn(()=>{if(i.countStarts+=1,i.startError&&i.countStarts<i.countStartError){this.trigger("disconnected",i.startError);return}this.register()});stop=jest.fn(()=>{this.startedTimeout&&clearTimeout(this.startedTimeout),this.stopedTimeout&&clearTimeout(this.stopedTimeout),this.unregister(),this.isStarted()?this.stopedTimeout=setTimeout(()=>{this.trigger("disconnected",{error:!0,socket:g})},E):this.trigger("disconnected",{error:!0,socket:g})});removeAllListeners=jest.fn(()=>(this.events.removeEventHandlers(),this));once=jest.fn((e,t)=>(this.events.once(e,t),this));startedTimeout;stopedTimeout;session;isRegisteredInner;isConnectedInner;configuration;constructor(e){this.events=new v.Events(L);const[t,r]=e.uri.split(":"),[o,c]=r.split("@"),p={...e,uri:new a.URI(t,o,c)};this.configuration=p,this.registratorInner=new dt}static setStartError(e,{count:t=Number.POSITIVE_INFINITY}={}){i.startError=e,i.countStartError=t}static resetStartError(){i.startError=void 0,i.countStartError=Number.POSITIVE_INFINITY,i.countStarts=0}static setAvailableTelephony(){i.isAvailableTelephony=!0}static setNotAvailableTelephony(){i.isAvailableTelephony=!1}static reset(){i.resetStartError(),i.setAvailableTelephony()}on(e,t){return this.events.on(e,t),this}off(e,t){return this.events.off(e,t),this}trigger(e,t){this.events.trigger(e,t)}terminateSessions(){this.session?.terminate()}set(e,t){return this.configuration[e]=t,!0}register(){this.startedTimeout&&clearTimeout(this.startedTimeout);const{password:e,register:t,uri:r}=this.configuration;t===!0&&r.user.includes(W)?(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:P,cause:a.C.causes.REJECTED})},E)):!this.isRegistered()&&t===!0&&(e===d||e===I)?(this.isRegisteredInner=!0,this.startedTimeout=setTimeout(()=>{this.trigger("registered",{response:O})},E)):t===!0&&e!==d&&e!==I&&(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:P,cause:a.C.causes.REJECTED})},E)),i.isAvailableTelephony?(this.trigger("connected",{socket:g}),this.isConnectedInner=!0):this.stop()}unregister(){this.isRegisteredInner=!1,this.isConnectedInner=!1,this.trigger("unregistered",{response:O})}isRegistered(){return this.isRegisteredInner===!0}isConnected(){return this.isConnectedInner===!0}isStarted(){return this.configuration.register===!0&&this.isRegisteredInner===!0||this.configuration.register!==!0&&this.isConnectedInner===!0}newSipEvent(e){this.trigger("sipEvent",e)}registrator(){return this.registratorInner}}class ht{url;constructor(e){this.url=e}}class Et extends V.EventEmitter{contentType;body;constructor(e,t){super(),this.contentType=e,this.body=t}}const S="remote",ut=(n,e)=>{const t=new N(e),r={originator:S,request:t,info:new Et("","")};n.newInfo(r)},mt=(n,e)=>{const r={event:"sipEvent",request:new N(e)};n.newSipEvent(r)},lt=(n,{incomingNumber:e="1234",displayName:t,host:r})=>{const o=new s({originator:S,eventHandlers:{}}),c=new j("sip",e,r);o.remote_identity=new U(c,t);const p=new N([]);n.trigger("newRTCSession",{originator:S,session:o,request:p})},pt=(n,e)=>{e?n.trigger("failed",e):n.trigger("failed",n)},w={triggerNewInfo:ut,triggerNewSipEvent:mt,triggerIncomingSession:lt,triggerFailIncomingSession:pt,WebSocketInterface:ht,UA:i,C:{INVITE:"INVITE"}},u="user",h="displayName",m="SIP_SERVER_URL",C="SIP_WEB_SOCKET_SERVER_URL",gt=new w.WebSocketInterface(`wss://${C}/webrtc/wss/`),f={displayName:"DISPLAY_NAME",userAgent:"Chrome",sipServerIp:m,sipServerUrl:C},_t={...f,displayName:"DISPLAY_NAME",register:!1},b={...f,user:u,password:d,register:!0},Tt={...b,displayName:h},It={...f,displayName:h,register:!1},l={session_timers:!1,sockets:[gt],user_agent:"Chrome",sdpSemantics:"unified-plan",register_expires:300,connection_recovery_max_interval:6,connection_recovery_min_interval:2},St={...l,password:d,uri:new a.URI("sip",u,m),display_name:"DISPLAY_NAME",register:!0},Nt={...l,password:d,uri:new a.URI("sip",u,m),display_name:h,register:!0},wt={...l,display_name:h,register:!1},Ct={...l,display_name:"DISPLAY_NAME",register:!1},k="10.10.10.10",ft=[`X-Vinteo-Remote: ${k}`],Rt=()=>new D.SipConnector({JsSIP:w});exports.FAILED_CONFERENCE_NUMBER=F;exports.JsSIP=w;exports.NAME_INCORRECT=W;exports.PASSWORD_CORRECT=d;exports.PASSWORD_CORRECT_2=I;exports.SIP_SERVER_URL=m;exports.SIP_WEB_SOCKET_SERVER_URL=C;exports.dataForConnectionWithAuthorization=b;exports.dataForConnectionWithAuthorizationWithDisplayName=Tt;exports.dataForConnectionWithoutAuthorization=It;exports.dataForConnectionWithoutAuthorizationWithoutDisplayName=_t;exports.displayName=h;exports.doMockSipConnector=Rt;exports.extraHeadersRemoteAddress=ft;exports.remoteAddress=k;exports.uaConfigurationWithAuthorization=St;exports.uaConfigurationWithAuthorizationWithDisplayName=Nt;exports.uaConfigurationWithoutAuthorization=wt;exports.uaConfigurationWithoutAuthorizationWithoutDisplayName=Ct;exports.user=u;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const V=require("node:events"),U=require("@krivega/jssip/lib/NameAddrHeader"),j=require("@krivega/jssip/lib/URI"),q=require("@krivega/jssip/lib/SIPMessage"),a=require("@krivega/jssip"),_=require("webrtc-mock"),v=require("events-constructor"),D=require("./@SipConnector-DwgaqxCG.cjs");class N extends q.IncomingRequest{headers;constructor(e){super(),this.headers=new Headers(e)}getHeader(e){return this.headers.get(e)??""}}const G="incomingCall",H="declinedIncomingCall",x="failedIncomingCall",z="terminatedIncomingCall",y="connecting",Y="connected",B="disconnected",K="newRTCSession",J="registered",$="unregistered",Q="registrationFailed",X="newMessage",Z="sipEvent",ee="availableSecondRemoteStream",te="notAvailableSecondRemoteStream",re="mustStopPresentation",ne="enterRoom",oe="useLicense",ie="peerconnection:confirmed",se="peerconnection:ontrack",ae="channels",ce="channels:notify",de="ended:fromserver",he="main-cam-control",Ee="admin:stop-main-cam",ue="admin:start-main-cam",me="admin:stop-mic",le="admin:start-mic",pe="admin:force-sync-media-state",ge="participant:added-to-list-moderators",_e="participant:removed-from-list-moderators",Te="participant:move-request-to-stream",Ie="participant:move-request-to-spectators",Se="participant:move-request-to-participants",Ne="participation:accepting-word-request",we="participation:cancelling-word-request",Ce="webcast:started",fe="webcast:stopped",Re="account:changed",Ae="account:deleted",Me="conference:participant-token-issued",Oe="ended",Pe="sending",ve="reinvite",De="replaces",ye="refer",Le="progress",Fe="accepted",We="confirmed",be="peerconnection",ke="failed",Ve="muted",Ue="unmuted",je="newDTMF",qe="newInfo",Ge="hold",He="unhold",xe="update",ze="sdp",Ye="icecandidate",Be="getusermediafailed",Ke="peerconnection:createofferfailed",Je="peerconnection:createanswerfailed",$e="peerconnection:setlocaldescriptionfailed",Qe="peerconnection:setremotedescriptionfailed",Xe="presentation:start",Ze="presentation:started",et="presentation:end",tt="presentation:ended",rt="presentation:failed",nt=[G,H,z,x,Ne,we,Te,ce,Me,Re,Ae,Ce,fe,ge,_e],L=[y,Y,B,K,J,$,Q,X,Z],ot=[ee,te,re,ne,oe,ie,se,ae,de,he,ue,Ee,me,le,pe,Ie,Se],T=[Oe,y,Pe,ve,De,ye,Le,Fe,We,be,ke,Ve,Ue,je,qe,Ge,He,xe,ze,Ye,Be,Ke,Je,$e,Qe,Xe,Ze,et,tt,rt];[...L,...nt];[...T,...ot];class it{originator;connection;events;remote_identity;mutedOptions={audio:!1,video:!1};constructor({originator:e="local",eventHandlers:t,remoteIdentity:r}){this.originator=e,this.events=new v.Events(T),this.initEvents(t),this.remote_identity=r}get contact(){throw new Error("Method not implemented.")}get direction(){throw new Error("Method not implemented.")}get local_identity(){throw new Error("Method not implemented.")}get start_time(){throw new Error("Method not implemented.")}get end_time(){throw new Error("Method not implemented.")}get status(){throw new Error("Method not implemented.")}get C(){throw new Error("Method not implemented.")}get causes(){throw new Error("Method not implemented.")}get id(){throw new Error("Method not implemented.")}get data(){throw new Error("Method not implemented.")}set data(e){throw new Error("Method not implemented.")}isInProgress(){throw new Error("Method not implemented.")}isEnded(){throw new Error("Method not implemented.")}isReadyToReOffer(){throw new Error("Method not implemented.")}answer(e){throw new Error("Method not implemented.")}terminate(e){throw new Error("Method not implemented.")}async sendInfo(e,t,r){throw new Error("Method not implemented.")}hold(e,t){throw new Error("Method not implemented.")}unhold(e,t){throw new Error("Method not implemented.")}async renegotiate(e,t){throw new Error("Method not implemented.")}isOnHold(){throw new Error("Method not implemented.")}mute(e){throw new Error("Method not implemented.")}unmute(e){throw new Error("Method not implemented.")}isMuted(){throw new Error("Method not implemented.")}refer(e,t){throw new Error("Method not implemented.")}resetLocalMedia(){throw new Error("Method not implemented.")}async replaceMediaStream(e,t){throw new Error("Method not implemented.")}addListener(e,t){throw new Error("Method not implemented.")}once(e,t){throw new Error("Method not implemented.")}removeListener(e,t){throw new Error("Method not implemented.")}off(e,t){return this.events.off(e,t),this}removeAllListeners(e){return console.warn("Method not implemented. Event:",e),this}setMaxListeners(e){throw new Error("Method not implemented.")}getMaxListeners(){throw new Error("Method not implemented.")}listeners(e){throw new Error("Method not implemented.")}rawListeners(e){throw new Error("Method not implemented.")}emit(e,...t){throw new Error("Method not implemented.")}listenerCount(e){throw new Error("Method not implemented.")}prependListener(e,t){throw new Error("Method not implemented.")}prependOnceListener(e,t){throw new Error("Method not implemented.")}eventNames(){throw new Error("Method not implemented.")}initEvents(e){e&&Object.entries(e).forEach(([t,r])=>{this.on(t,r)})}on(e,t){return T.includes(e)&&this.events.on(e,t),this}trigger(e,t){this.events.trigger(e,t)}sendDTMF(){this.trigger("newDTMF",{originator:this.originator})}async startPresentation(e){return this.trigger("presentation:start",e),this.trigger("presentation:started",e),e}async stopPresentation(e){return this.trigger("presentation:end",e),this.trigger("presentation:ended",e),e}isEstablished(){return!0}}class R{stats=new Map().set("codec",{mimeType:"video/h264"});dtmf=null;track=null;transport=null;transform=null;parameters={encodings:[{}],transactionId:"0",codecs:[],headerExtensions:[],rtcp:{}};parametersGets;constructor({track:e}={}){this.track=e??null}async getStats(){return this.stats}async replaceTrack(e){this.track=e??null}async setParameters(e){if(e!==this.parametersGets)throw new Error("Failed to execute 'setParameters' on 'RTCRtpSender': Read-only field modified in setParameters().");const{transactionId:t}=this.parameters;this.parameters={...this.parameters,...e,transactionId:`${Number(t)+1}`}}getParameters(){return this.parametersGets={...this.parameters},this.parametersGets}setStreams(){throw new Error("Method not implemented.")}}class A{currentDirection="sendrecv";direction="sendrecv";mid=null;receiver;sender;stopped=!1;constructor(e){this.sender=e}setCodecPreferences(e){}stop(){}}class st extends EventTarget{senders=[];receivers=[];canTrickleIceCandidates;connectionState;currentLocalDescription;currentRemoteDescription;iceConnectionState;iceGatheringState;idpErrorInfo;idpLoginUrl;localDescription;onconnectionstatechange;ondatachannel;onicecandidate;onicecandidateerror=null;oniceconnectionstatechange;onicegatheringstatechange;onnegotiationneeded;onsignalingstatechange;ontrack;peerIdentity=void 0;pendingLocalDescription;pendingRemoteDescription;remoteDescription;sctp=null;signalingState;close=jest.fn();setLocalDescription=jest.fn(async e=>{});setRemoteDescription=jest.fn(async e=>{});addTransceiver=jest.fn((e,t)=>({}));createOffer=jest.fn(async(e,t,r)=>({type:"offer",sdp:"offer-sdp"}));constructor(e,t){super(),this.receivers=t?.map(r=>({track:r}))??[]}getRemoteStreams(){throw new Error("Method not implemented.")}async addIceCandidate(e){throw new Error("Method not implemented.")}restartIce(){throw new Error("Method not implemented.")}async createAnswer(e,t){throw new Error("Method not implemented.")}createDataChannel(e,t){throw new Error("Method not implemented.")}getConfiguration(){throw new Error("Method not implemented.")}async getIdentityAssertion(){throw new Error("Method not implemented.")}async getStats(e){throw new Error("Method not implemented.")}getTransceivers(){throw new Error("Method not implemented.")}removeTrack(e){throw new Error("Method not implemented.")}setConfiguration(e){throw new Error("Method not implemented.")}getReceivers=()=>this.receivers;getSenders=()=>this.senders;addTrack=(e,...t)=>{const r=new R({track:e}),o=new A(r);return o.mid=e.kind==="audio"?"0":"1",this.senders.push(r),this.dispatchTrackInternal(e,...t),r};addTrackWithMid=(e,t)=>{const r=new R({track:e}),o=new A(r);return t===void 0?o.mid=e.kind==="audio"?"0":"1":o.mid=t,this.senders.push(r),this.dispatchTrackInternal(e),r};dispatchTrack(e){this.dispatchTrackInternal(new _.MediaStreamTrackMock(e))}dispatchTrackInternal(e,...t){const r=new Event("track");Object.defineProperty(r,"track",{value:e}),Object.defineProperty(r,"streams",{value:t.length===0?[new MediaStream([e])]:t}),this.dispatchEvent(r)}}function at(n){const e=n.match(/(purgatory)|[\d.]+/g);if(!e)throw new Error("wrong sip url");return e[0]}const M=400,F="777",ct=n=>n.getVideoTracks().length>0;class s extends it{static presentationError;static startPresentationError;static countStartPresentationError=Number.POSITIVE_INFINITY;static countStartsPresentation=0;url;status_code;renegotiate=jest.fn(async()=>!0);answer=jest.fn(({mediaStream:e})=>{if(this.originator!=="remote")throw new Error("answer available only for remote sessions");this.initPeerconnection(e),setTimeout(()=>{this.trigger("connecting"),setTimeout(()=>{this.trigger("accepted")},100),setTimeout(()=>{this.trigger("confirmed")},200)},M)});replaceMediaStream=jest.fn(async e=>{});_isReadyToReOffer=jest.fn(()=>!0);addTransceiver=jest.fn((e,t)=>({}));restartIce=jest.fn(async e=>!0);isEndedInner=!1;delayStartPresentation=0;timeoutStartPresentation;timeoutConnect;timeoutNewInfo;timeoutAccepted;timeoutConfirmed;constructor({eventHandlers:e,originator:t,remoteIdentity:r=new a.NameAddrHeader(new a.URI("sip","caller1","test1.com",5060),"Test Caller 1"),delayStartPresentation:o=0}){super({originator:t,eventHandlers:e,remoteIdentity:r}),this.delayStartPresentation=o}static get C(){return a.SessionStatus}static setPresentationError(e){this.presentationError=e}static resetPresentationError(){this.presentationError=void 0}static setStartPresentationError(e,{count:t=Number.POSITIVE_INFINITY}={}){this.startPresentationError=e,this.countStartPresentationError=t}static resetStartPresentationError(){this.startPresentationError=void 0,this.countStartPresentationError=Number.POSITIVE_INFINITY,this.countStartsPresentation=0}startPresentation=async e=>(s.countStartsPresentation+=1,new Promise((t,r)=>{this.timeoutStartPresentation=setTimeout(()=>{if(s.presentationError){this.trigger("presentation:start",e),this.trigger("presentation:failed",e),r(s.presentationError);return}if(s.startPresentationError&&s.countStartsPresentation<s.countStartPresentationError){this.trigger("presentation:start",e),this.trigger("presentation:failed",e),r(s.startPresentationError);return}t(super.startPresentation(e))},this.delayStartPresentation)}));stopPresentation=async e=>{if(s.presentationError)throw this.trigger("presentation:end",e),this.trigger("presentation:failed",e),s.presentationError;return super.stopPresentation(e)};initPeerconnection(e){return e?(this.createPeerconnection(e),!0):!1}createPeerconnection(e){const t=_.createAudioMediaStreamTrackMock();t.id="mainaudio1";const r=[t];if(ct(e)){const c=_.createVideoMediaStreamTrackMock();c.id="mainvideo1",r.push(c)}this.connection=new st(void 0,r),this.trigger("peerconnection",{peerconnection:this.connection}),this.addStream(e)}connect(e,{mediaStream:t}={}){const r=at(e);return this.initPeerconnection(t),this.timeoutConnect=setTimeout(()=>{e.includes(F)?this.trigger("failed",{originator:"remote",message:"IncomingResponse",cause:"Rejected"}):(this.trigger("connecting"),this.timeoutNewInfo=setTimeout(()=>{this.newInfo({originator:D.Originator.REMOTE,request:{getHeader:o=>o==="content-type"?"application/vinteo.webrtc.roomname":o==="x-webrtc-enter-room"?r:o==="x-webrtc-participant-name"?"Test Caller 1":""}})},100),this.timeoutAccepted=setTimeout(()=>{this.trigger("accepted")},200),this.timeoutConfirmed=setTimeout(()=>{this.trigger("confirmed")},300))},M),this.connection}terminate({status_code:e,cause:t}={}){return this.status_code=e,this.trigger("ended",{status_code:e,cause:t,originator:"local"}),this.isEndedInner=!1,this}async terminateAsync({status_code:e,cause:t}={}){this.terminate({status_code:e,cause:t})}terminateRemote({status_code:e}={}){return this.status_code=e,this.trigger("ended",{status_code:e,originator:"remote"}),this}addStream(e,t="getTracks"){e[t]().forEach(r=>this.connection.addTrack(r,e))}forEachSenders(e){const t=this.connection.getSenders();for(const r of t)e(r);return t}toggleMuteAudio(e){this.forEachSenders(({track:t})=>{t?.kind==="audio"&&(t.enabled=!e)})}toggleMuteVideo(e){this.forEachSenders(({track:t})=>{t?.kind==="video"&&(t.enabled=!e)})}mute(e){e.audio&&(this.mutedOptions.audio=!0,this.toggleMuteAudio(this.mutedOptions.audio)),e.video&&(this.mutedOptions.video=!0,this.toggleMuteVideo(this.mutedOptions.video)),this.onmute(e)}unmute(e){e.audio&&(this.mutedOptions.audio=!1),e.video&&(this.mutedOptions.video=!1),this.trigger("unmuted",e)}isMuted(){return this.mutedOptions}onmute({audio:e,video:t}){this.trigger("muted",{audio:e,video:t})}async sendInfo(){}isEnded(){return this.isEndedInner}newInfo(e){this.trigger("newInfo",e)}clear(){clearTimeout(this.timeoutStartPresentation),clearTimeout(this.timeoutConnect),clearTimeout(this.timeoutNewInfo),clearTimeout(this.timeoutAccepted),clearTimeout(this.timeoutConfirmed)}}class dt{extraHeaders=[];setExtraHeaders(e){this.extraHeaders=e}setExtraContactParams(){}}const d="PASSWORD_CORRECT",I="PASSWORD_CORRECT_2",W="NAME_INCORRECT",E=400,g={url:"wss://sipServerUrl/webrtc/wss/",sip_uri:"sip:sipServerUrl;transport=ws",via_transport:"WSS"},O={status_code:200,reason_phrase:"OK"},P={status_code:401,reason_phrase:"Unauthorized"};class i{static isAvailableTelephony=!0;static startError;static countStartError=Number.POSITIVE_INFINITY;static countStarts=0;events;registratorInner;call=jest.fn((e,t)=>{const{mediaStream:r,eventHandlers:o}=t;return this.session=new s({eventHandlers:o,originator:"local"}),this.session.connect(e,{mediaStream:r}),this.session});sendOptions=jest.fn((e,t,r)=>{console.log("sendOptions",e,t,r)});start=jest.fn(()=>{if(i.countStarts+=1,i.startError&&i.countStarts<i.countStartError){this.trigger("disconnected",i.startError);return}this.register()});stop=jest.fn(()=>{this.startedTimeout&&clearTimeout(this.startedTimeout),this.stopedTimeout&&clearTimeout(this.stopedTimeout),this.unregister(),this.isStarted()?this.stopedTimeout=setTimeout(()=>{this.trigger("disconnected",{error:!0,socket:g})},E):this.trigger("disconnected",{error:!0,socket:g})});removeAllListeners=jest.fn(()=>(this.events.removeEventHandlers(),this));once=jest.fn((e,t)=>(this.events.once(e,t),this));startedTimeout;stopedTimeout;session;isRegisteredInner;isConnectedInner;configuration;constructor(e){this.events=new v.Events(L);const[t,r]=e.uri.split(":"),[o,c]=r.split("@"),p={...e,uri:new a.URI(t,o,c)};this.configuration=p,this.registratorInner=new dt}static setStartError(e,{count:t=Number.POSITIVE_INFINITY}={}){i.startError=e,i.countStartError=t}static resetStartError(){i.startError=void 0,i.countStartError=Number.POSITIVE_INFINITY,i.countStarts=0}static setAvailableTelephony(){i.isAvailableTelephony=!0}static setNotAvailableTelephony(){i.isAvailableTelephony=!1}static reset(){i.resetStartError(),i.setAvailableTelephony()}on(e,t){return this.events.on(e,t),this}off(e,t){return this.events.off(e,t),this}trigger(e,t){this.events.trigger(e,t)}terminateSessions(){this.session?.terminate()}set(e,t){return this.configuration[e]=t,!0}register(){this.startedTimeout&&clearTimeout(this.startedTimeout);const{password:e,register:t,uri:r}=this.configuration;t===!0&&r.user.includes(W)?(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:P,cause:a.C.causes.REJECTED})},E)):!this.isRegistered()&&t===!0&&(e===d||e===I)?(this.isRegisteredInner=!0,this.startedTimeout=setTimeout(()=>{this.trigger("registered",{response:O})},E)):t===!0&&e!==d&&e!==I&&(this.isRegisteredInner=!1,this.isConnectedInner=!1,this.startedTimeout=setTimeout(()=>{this.trigger("registrationFailed",{response:P,cause:a.C.causes.REJECTED})},E)),i.isAvailableTelephony?(this.trigger("connected",{socket:g}),this.isConnectedInner=!0):this.stop()}unregister(){this.isRegisteredInner=!1,this.isConnectedInner=!1,this.trigger("unregistered",{response:O})}isRegistered(){return this.isRegisteredInner===!0}isConnected(){return this.isConnectedInner===!0}isStarted(){return this.configuration.register===!0&&this.isRegisteredInner===!0||this.configuration.register!==!0&&this.isConnectedInner===!0}newSipEvent(e){this.trigger("sipEvent",e)}registrator(){return this.registratorInner}}class ht{url;constructor(e){this.url=e}}class Et extends V.EventEmitter{contentType;body;constructor(e,t){super(),this.contentType=e,this.body=t}}const S="remote",ut=(n,e)=>{const t=new N(e),r={originator:S,request:t,info:new Et("","")};n.newInfo(r)},mt=(n,e)=>{const r={event:"sipEvent",request:new N(e)};n.newSipEvent(r)},lt=(n,{incomingNumber:e="1234",displayName:t,host:r})=>{const o=new s({originator:S,eventHandlers:{}}),c=new j("sip",e,r);o.remote_identity=new U(c,t);const p=new N([]);n.trigger("newRTCSession",{originator:S,session:o,request:p})},pt=(n,e)=>{e?n.trigger("failed",e):n.trigger("failed",n)},w={triggerNewInfo:ut,triggerNewSipEvent:mt,triggerIncomingSession:lt,triggerFailIncomingSession:pt,WebSocketInterface:ht,UA:i,C:{INVITE:"INVITE"}},u="user",h="displayName",m="SIP_SERVER_URL",C="SIP_WEB_SOCKET_SERVER_URL",gt=new w.WebSocketInterface(`wss://${C}/webrtc/wss/`),f={displayName:"DISPLAY_NAME",userAgent:"Chrome",sipServerIp:m,sipServerUrl:C},_t={...f,displayName:"DISPLAY_NAME",register:!1},b={...f,user:u,password:d,register:!0},Tt={...b,displayName:h},It={...f,displayName:h,register:!1},l={session_timers:!1,sockets:[gt],user_agent:"Chrome",sdpSemantics:"unified-plan",register_expires:300,connection_recovery_max_interval:6,connection_recovery_min_interval:2},St={...l,password:d,uri:new a.URI("sip",u,m),display_name:"DISPLAY_NAME",register:!0},Nt={...l,password:d,uri:new a.URI("sip",u,m),display_name:h,register:!0},wt={...l,display_name:h,register:!1},Ct={...l,display_name:"DISPLAY_NAME",register:!1},k="10.10.10.10",ft=[`X-Vinteo-Remote: ${k}`],Rt=()=>new D.SipConnector({JsSIP:w});exports.FAILED_CONFERENCE_NUMBER=F;exports.JsSIP=w;exports.NAME_INCORRECT=W;exports.PASSWORD_CORRECT=d;exports.PASSWORD_CORRECT_2=I;exports.SIP_SERVER_URL=m;exports.SIP_WEB_SOCKET_SERVER_URL=C;exports.dataForConnectionWithAuthorization=b;exports.dataForConnectionWithAuthorizationWithDisplayName=Tt;exports.dataForConnectionWithoutAuthorization=It;exports.dataForConnectionWithoutAuthorizationWithoutDisplayName=_t;exports.displayName=h;exports.doMockSipConnector=Rt;exports.extraHeadersRemoteAddress=ft;exports.remoteAddress=k;exports.uaConfigurationWithAuthorization=St;exports.uaConfigurationWithAuthorizationWithDisplayName=Nt;exports.uaConfigurationWithoutAuthorization=wt;exports.uaConfigurationWithoutAuthorizationWithoutDisplayName=Ct;exports.user=u;
|
package/dist/doMock.js
CHANGED
|
@@ -5,7 +5,7 @@ import { IncomingRequest as b } from "@krivega/jssip/lib/SIPMessage";
|
|
|
5
5
|
import { NameAddrHeader as V, URI as E, SessionStatus as W, C as N } from "@krivega/jssip";
|
|
6
6
|
import { MediaStreamTrackMock as j, createAudioMediaStreamTrackMock as U, createVideoMediaStreamTrackMock as G } from "webrtc-mock";
|
|
7
7
|
import { Events as O } from "events-constructor";
|
|
8
|
-
import { O as H, S as x } from "./@SipConnector-
|
|
8
|
+
import { O as H, S as x } from "./@SipConnector-CmHfa0Ce.js";
|
|
9
9
|
class T extends b {
|
|
10
10
|
headers;
|
|
11
11
|
constructor(e) {
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./@SipConnector-mL9nMhkX.cjs");require("events-constructor");const k=require("@krivega/cancelable-promise"),W=require("repeated-calls"),H=require("ts-debounce"),Y=require("ua-parser-js"),j=require("sequent-promises"),K=require("stack-promises"),X=e=>e instanceof Object&&("originator"in e||"cause"in e),J=e=>{if(k.isCanceledError(e))return!0;if(!X(e))return!1;const{originator:n,cause:r}=e;return typeof r=="string"?r===t.ECallCause.REQUEST_TIMEOUT||r===t.ECallCause.REJECTED||n==="local"&&(r===t.ECallCause.CANCELED||r===t.ECallCause.BYE):!1};var C=(e=>(e.DISCONNECTED="system:disconnected",e.CONNECTING="system:connecting",e.READY_TO_CALL="system:readyToCall",e.CALL_CONNECTING="system:callConnecting",e.CALL_ACTIVE="system:callActive",e.CONNECTION_FAILED="system:connectionFailed",e.CALL_FAILED="system:callFailed",e))(C||{});const V=e=>e.connection.value,F=e=>e.call.value,z=e=>e.incoming.value,Q=e=>{if(e.incoming.value!==t.EState$2.IDLE)return e.incoming.context.remoteCallerData},Z=e=>e.presentation.value,ee=e=>{const n=F(e);return n===t.EState$1.IN_CALL||n===t.EState$1.ACCEPTED},ne=e=>{const n=V(e),r=F(e);if(n===t.EState.IDLE||n===t.EState.DISCONNECTED)return C.DISCONNECTED;if(n===t.EState.FAILED)return C.CONNECTION_FAILED;if(n===t.EState.PREPARING||n===t.EState.CONNECTING||n===t.EState.CONNECTED||n===t.EState.REGISTERED)return C.CONNECTING;switch(r){case t.EState$1.IDLE:return C.READY_TO_CALL;case t.EState$1.CONNECTING:return C.CALL_CONNECTING;case t.EState$1.ACCEPTED:case t.EState$1.IN_CALL:return C.CALL_ACTIVE;case t.EState$1.ENDED:return C.READY_TO_CALL;case t.EState$1.FAILED:return C.CALL_FAILED;default:return C.READY_TO_CALL}},te={selectConnectionStatus:V,selectCallStatus:F,selectIncomingStatus:z,selectIncomingRemoteCaller:Q,selectPresentationStatus:Z,selectIsInCall:ee,selectSystemStatus:ne},re=()=>globalThis.process?.versions?.electron!==void 0,x=()=>{const e=new Y.UAParser,{name:n}=e.getBrowser(),r=re();return{isChrome:n==="Chrome"||r}},v=e=>{const{url:n,cause:r}=e;let o=n;return(r===t.ECallCause.BAD_MEDIA_DESCRIPTION||r===t.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var B=(e=>(e.CONNECT_SERVER_FAILED="CONNECT_SERVER_FAILED",e.WRONG_USER_OR_PASSWORD="WRONG_USER_OR_PASSWORD",e.BAD_MEDIA_ERROR="BAD_MEDIA_ERROR",e.NOT_FOUND_ERROR="NOT_FOUND_ERROR",e.WS_CONNECTION_FAILED="WS_CONNECTION_FAILED",e.CONNECT_SERVER_FAILED_BY_LINK="CONNECT_SERVER_FAILED_BY_LINK",e))(B||{});const oe=new Error("Unknown error"),se=(e=oe)=>{const{cause:n,socket:r}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case t.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case t.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:r!==void 0&&r._ws?.readyState===3?o="WS_CONNECTION_FAILED":v(e)!==void 0&&v(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},ae=e=>{let n="";try{n=JSON.stringify(e)}catch(r){t.logger("failed to stringify message",r)}return n},ce=new Error("Unknown error"),ie=(e=ce)=>{const{code:n,cause:r,message:o}=e,a=v(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=ae(o):o&&(s.message=String(o)),a!==void 0&&a!==""&&(s.link=a),n!==void 0&&n!==""&&(s.code=n),r!==void 0&&r!==""&&(s.cause=r),s},le=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:B,getLinkError:v,getTypeFromError:se,getValuesFromError:ie},Symbol.toStringTag,{value:"Module"})),ue=({sessionId:e,remoteAddress:n,isMutedAudio:r,isMutedVideo:o,isRegistered:a,isPresentationCall:s})=>{const c=[],l=r?"0":"1",g=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${l}`,`X-Vinteo-MainCam-State: ${g}`),(a===!1||a===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},Ce="[@*!|]",ge="_",de=e=>{let n=e;return n=n.replaceAll(new RegExp(Ce,"g"),ge),n},Se=({appName:e,appVersion:n,browserName:r,browserVersion:o})=>{const s=`${de(e)} ${n}`;return`ChromeNew - ${r===void 0?s:`${r} ${o}, ${s}`}`},Ee=({isUnifiedSdpSemantic:e,appVersion:n,browserName:r,browserVersion:o,appName:a})=>e?Se({appVersion:n,browserName:r,browserVersion:o,appName:a}):"Chrome",q="purgatory",D=e=>e===q,fe=e=>n=>[...n].map(o=>async()=>e(o)),me=async({accumulatedKeys:e,sendKey:n,canRunTask:r})=>{const a=fe(n)(e);return j.sequentPromises(a,r)},pe=e=>r=>(t.logger("onStartMainCam"),e.on("api:admin:start-main-cam",r)),he=e=>r=>(t.logger("onStartMic"),e.on("api:admin:start-mic",r)),Re=e=>r=>(t.logger("onStopMainCam"),e.on("api:admin:stop-main-cam",r)),Te=e=>r=>(t.logger("onStopMic"),e.on("api:admin:stop-mic",r)),Ne=({sipConnector:e})=>{const n=(u,d)=>({isSyncForced:S})=>{if(S===!0){u();return}d()},r=pe(e),o=Re(e),a=he(e),s=Te(e);let c,l,g,p;const N=({onStartMainCamForced:u,onStartMainCamNotForced:d,onStopMainCamForced:S,onStopMainCamNotForced:R,onStartMicForced:T,onStartMicNotForced:A,onStopMicForced:b,onStopMicNotForced:P})=>{const E=n(u,d);c=r(E);const f=n(S,R);l=o(f);const I=n(T,A);g=a(I);const m=n(b,P);p=s(m)},O=()=>{c?.(),l?.(),g?.(),p?.()};return{start:u=>{N(u)},stop:()=>{O()}}},Oe=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:q,createSyncMediaState:Ne,createUaParser:x,error:le,getExtraHeaders:ue,getUserAgent:Ee,hasPurgatory:D,prepareMediaStream:t.prepareMediaStream,sendDtmfAccumulated:me,sendOffer:t.sendOffer,setEncodingsToSender:t.setEncodingsToSender,setParametersToSender:t.setParametersToSender},Symbol.toStringTag,{value:"Module"})),_e=()=>x().isChrome,Ae=e=>{if(!k.isCanceledError(e)&&!W.hasCanceledError(e)&&!t.hasNotReadyForConnectionError(e))throw e;return{configuration:void 0,isSuccessful:!1}},be=({kind:e,readyState:n})=>e==="video"&&n==="live",w=(e,n,{onEnterPurgatory:r,onEnterConference:o})=>{D(e)?r&&r():o&&o({isSuccessProgressCall:n})},U=(e,n)=>{e(),n&&n()},$=(e,n,r)=>{throw e&&e(),n(),r},Pe=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","startAutoConnect","stopAutoConnect","connection","isConfigured","isRegistered"]);class ve{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;startAutoConnect;stopAutoConnect;connection;isConfigured;isRegistered;sipConnector;constructor(n){return this.sipConnector=n,new Proxy(this,{get:(r,o,a)=>{if(typeof o=="string"&&Pe.has(o)&&o in this.sipConnector){const c=Reflect.get(this.sipConnector,o,this.sipConnector);return typeof c=="function"?c.bind(this.sipConnector):c}const s=Reflect.get(r,o,a);return typeof s=="function"?s.bind(r):s}})}connectToServer=async(n,r)=>this.sipConnector.connect(n,r).then(o=>(t.logger("connectToServer then"),{configuration:o,isSuccessful:!0})).catch(async o=>(t.logger("connectToServer catch: error",o),Ae(o)));callToServer=async n=>{const{conference:r,mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,degradationPreference:l,sendEncodings:g,offerToReceiveAudio:p,offerToReceiveVideo:N,directionVideo:O,directionAudio:_,onBeforeProgressCall:h,onSuccessProgressCall:u,onEnterPurgatory:d,onEnterConference:S,onFailProgressCall:R,onFinishProgressCall:T,onEndedCall:A,onAddedTransceiver:b}=n;t.logger("callToServer",n);const P=async()=>(t.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,offerToReceiveAudio:p,offerToReceiveVideo:N,directionVideo:O,directionAudio:_,degradationPreference:l,onAddedTransceiver:b,sendEncodings:g,number:r}));let E=!1,f;const m=(t.logger("subscribeEnterConference: onEnterConference",S),this.sipConnector.on("api:enter-room",({room:i})=>{t.logger("enterRoom",{_room:i,isSuccessProgressCall:E}),f=i,(d??S)&&w(f,E,{onEnterPurgatory:d,onEnterConference:S})})),M=i=>(t.logger("onSuccess"),E=!0,u&&u({isPurgatory:D(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{U(m,A)}),i),y=i=>(t.logger("onFail"),$(R,m,i)),L=()=>{t.logger("onFinish"),T&&T()};return t.logger("onBeforeProgressCall"),h&&h(r),P().then(M).catch(i=>y(i)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(t.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(t.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:r,extraHeaders:o,iceServers:a,contentHint:s,degradationPreference:c,sendEncodings:l,offerToReceiveAudio:g,offerToReceiveVideo:p,directionVideo:N,directionAudio:O,onBeforeProgressCall:_,onSuccessProgressCall:h,onEnterPurgatory:u,onEnterConference:d,onFailProgressCall:S,onFinishProgressCall:R,onEndedCall:T,onAddedTransceiver:A}=n;t.logger("answerToIncomingCall",n);const b=async()=>this.sipConnector.answerToIncomingCall({mediaStream:r,extraHeaders:o,iceServers:a,contentHint:s,offerToReceiveAudio:g,offerToReceiveVideo:p,directionVideo:N,directionAudio:O,degradationPreference:c,onAddedTransceiver:A,sendEncodings:l}),P=()=>{const{remoteCallerData:i}=this.sipConnector;return i.incomingNumber};let E=!1,f;const m=(t.logger("subscribeEnterConference: onEnterConference",d),this.sipConnector.on("api:enter-room",i=>{t.logger("enterRoom",{room:i.room,isSuccessProgressCall:E}),f=i.room,(u??d)&&w(f,E,{onEnterPurgatory:u,onEnterConference:d})})),M=i=>(t.logger("onSuccess"),E=!0,h&&h({isPurgatory:D(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{U(m,T)}),i),y=i=>(t.logger("onFail"),$(S,m,i)),L=()=>{t.logger("onFinish"),R&&R()};if(t.logger("onBeforeProgressCall"),_){const i=P();_(i)}return b().then(M).catch(i=>y(i)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:r,contentHint:o,degradationPreference:a,sendEncodings:s,onAddedTransceiver:c})=>(t.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:r,contentHint:o,degradationPreference:a,onAddedTransceiver:c,sendEncodings:s}));startPresentation=async({mediaStream:n,isP2P:r,contentHint:o,degradationPreference:a,sendEncodings:s,callLimit:c,onAddedTransceiver:l})=>(t.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:r,contentHint:o,callLimit:c,degradationPreference:a,onAddedTransceiver:l,sendEncodings:s}));stopShareSipConnector=async({isP2P:n=!1}={})=>(t.logger("stopShareSipConnector"),this.sipConnector.stopPresentation({isP2P:n}).catch(r=>{t.logger(r)}));sendRefusalToTurnOnMic=async()=>{t.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{t.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{t.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{t.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:r})=>{t.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:r})};replaceMediaStream=async(n,{deleteExisting:r,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,sendEncodings:l,onAddedTransceiver:g})=>(t.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:r,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,onAddedTransceiver:g,sendEncodings:l}));askPermissionToEnableCam=async()=>{t.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>H.debounce(()=>{const r=this.sipConnector.getRemoteStreams();t.logger("remoteStreams",r),n(r)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:r})=>{be(r)&&n()};getRemoteStreams=()=>(t.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(t.logger("onUseLicense"),this.sipConnector.on("api:use-license",n));onMustStopPresentation=n=>(t.logger("onMustStopPresentation"),this.sipConnector.on("api:presentation:must-stop",n));onMoveToSpectators=n=>(t.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(t.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n));onStats=n=>(t.logger("onStats"),this.sipConnector.on("stats:collected",n));offStats=n=>{t.logger("offStats"),this.sipConnector.off("stats:collected",n)}}var G=(e=>(e.VP8="video/VP8",e.VP9="video/VP9",e.H264="video/H264",e.AV1="video/AV1",e.rtx="video/rtx",e.red="video/red",e.flexfec03="video/flexfec-03",e))(G||{});exports.ECallCause=t.ECallCause;exports.ECallStatus=t.EState$1;exports.EConnectionStatus=t.EState;exports.EIncomingStatus=t.EState$2;exports.EPresentationStatus=t.EState$3;exports.EStatsTypes=t.EStatsTypes;exports.EUseLicense=t.EUseLicense;exports.SipConnector=t.SipConnector;exports.StatsPeerConnection=t.StatsPeerConnection;exports.disableDebug=t.disableDebug;exports.enableDebug=t.enableDebug;exports.getCodecFromSender=t.getCodecFromSender;exports.hasCanceledStartPresentationError=t.hasCanceledStartPresentationError;Object.defineProperty(exports,"hasConnectionPromiseIsNotActualError",{enumerable:!0,get:()=>K.isPromiseIsNotActualError});exports.EMimeTypesVideoCodecs=G;exports.ESystemStatus=C;exports.SipConnectorFacade=ve;exports.hasAvailableStats=_e;exports.hasCanceledCallError=J;exports.sessionSelectors=te;exports.tools=Oe;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./@SipConnector-DwgaqxCG.cjs");require("events-constructor");const k=require("@krivega/cancelable-promise"),W=require("repeated-calls"),H=require("ts-debounce"),Y=require("ua-parser-js"),j=require("sequent-promises"),K=require("stack-promises"),X=e=>e instanceof Object&&("originator"in e||"cause"in e),J=e=>{if(k.isCanceledError(e))return!0;if(!X(e))return!1;const{originator:n,cause:r}=e;return typeof r=="string"?r===t.ECallCause.REQUEST_TIMEOUT||r===t.ECallCause.REJECTED||n==="local"&&(r===t.ECallCause.CANCELED||r===t.ECallCause.BYE):!1};var C=(e=>(e.DISCONNECTED="system:disconnected",e.CONNECTING="system:connecting",e.READY_TO_CALL="system:readyToCall",e.CALL_CONNECTING="system:callConnecting",e.CALL_ACTIVE="system:callActive",e.CONNECTION_FAILED="system:connectionFailed",e.CALL_FAILED="system:callFailed",e))(C||{});const V=e=>e.connection.value,F=e=>e.call.value,z=e=>e.incoming.value,Q=e=>{if(e.incoming.value!==t.EState$2.IDLE)return e.incoming.context.remoteCallerData},Z=e=>e.presentation.value,ee=e=>{const n=F(e);return n===t.EState$1.IN_CALL||n===t.EState$1.ACCEPTED},ne=e=>{const n=V(e),r=F(e);if(n===t.EState.IDLE||n===t.EState.DISCONNECTED)return C.DISCONNECTED;if(n===t.EState.FAILED)return C.CONNECTION_FAILED;if(n===t.EState.PREPARING||n===t.EState.CONNECTING||n===t.EState.CONNECTED||n===t.EState.REGISTERED)return C.CONNECTING;switch(r){case t.EState$1.IDLE:return C.READY_TO_CALL;case t.EState$1.CONNECTING:return C.CALL_CONNECTING;case t.EState$1.ACCEPTED:case t.EState$1.IN_CALL:return C.CALL_ACTIVE;case t.EState$1.ENDED:return C.READY_TO_CALL;case t.EState$1.FAILED:return C.CALL_FAILED;default:return C.READY_TO_CALL}},te={selectConnectionStatus:V,selectCallStatus:F,selectIncomingStatus:z,selectIncomingRemoteCaller:Q,selectPresentationStatus:Z,selectIsInCall:ee,selectSystemStatus:ne},re=()=>globalThis.process?.versions?.electron!==void 0,x=()=>{const e=new Y.UAParser,{name:n}=e.getBrowser(),r=re();return{isChrome:n==="Chrome"||r}},v=e=>{const{url:n,cause:r}=e;let o=n;return(r===t.ECallCause.BAD_MEDIA_DESCRIPTION||r===t.ECallCause.NOT_FOUND)&&(o=`${e.message.to.uri.user}@${e.message.to.uri.host}`),o};var B=(e=>(e.CONNECT_SERVER_FAILED="CONNECT_SERVER_FAILED",e.WRONG_USER_OR_PASSWORD="WRONG_USER_OR_PASSWORD",e.BAD_MEDIA_ERROR="BAD_MEDIA_ERROR",e.NOT_FOUND_ERROR="NOT_FOUND_ERROR",e.WS_CONNECTION_FAILED="WS_CONNECTION_FAILED",e.CONNECT_SERVER_FAILED_BY_LINK="CONNECT_SERVER_FAILED_BY_LINK",e))(B||{});const oe=new Error("Unknown error"),se=(e=oe)=>{const{cause:n,socket:r}=e;let o="CONNECT_SERVER_FAILED";switch(n){case"Forbidden":{o="WRONG_USER_OR_PASSWORD";break}case t.ECallCause.BAD_MEDIA_DESCRIPTION:{o="BAD_MEDIA_ERROR";break}case t.ECallCause.NOT_FOUND:{o="NOT_FOUND_ERROR";break}default:r!==void 0&&r._ws?.readyState===3?o="WS_CONNECTION_FAILED":v(e)!==void 0&&v(e)!==""&&(o="CONNECT_SERVER_FAILED_BY_LINK")}return o},ae=e=>{let n="";try{n=JSON.stringify(e)}catch(r){t.logger("failed to stringify message",r)}return n},ce=new Error("Unknown error"),ie=(e=ce)=>{const{code:n,cause:r,message:o}=e,a=v(e),s={code:"",cause:"",message:""};return typeof o=="object"&&o!==null?s.message=ae(o):o&&(s.message=String(o)),a!==void 0&&a!==""&&(s.link=a),n!==void 0&&n!==""&&(s.code=n),r!==void 0&&r!==""&&(s.cause=r),s},le=Object.freeze(Object.defineProperty({__proto__:null,EErrorTypes:B,getLinkError:v,getTypeFromError:se,getValuesFromError:ie},Symbol.toStringTag,{value:"Module"})),ue=({sessionId:e,remoteAddress:n,isMutedAudio:r,isMutedVideo:o,isRegistered:a,isPresentationCall:s})=>{const c=[],l=r?"0":"1",g=o?"0":"1";return c.push(`X-Vinteo-Mic-State: ${l}`,`X-Vinteo-MainCam-State: ${g}`),(a===!1||a===void 0)&&c.push("X-Vinteo-Purgatory-Call: yes"),e!==void 0&&e!==""&&c.push(`X-Vinteo-Session: ${e}`),s===!0&&c.push("X-Vinteo-Presentation-Call: yes"),n!==void 0&&n!==""&&c.push(`X-Vinteo-Remote: ${n}`),c},Ce="[@*!|]",ge="_",de=e=>{let n=e;return n=n.replaceAll(new RegExp(Ce,"g"),ge),n},Se=({appName:e,appVersion:n,browserName:r,browserVersion:o})=>{const s=`${de(e)} ${n}`;return`ChromeNew - ${r===void 0?s:`${r} ${o}, ${s}`}`},Ee=({isUnifiedSdpSemantic:e,appVersion:n,browserName:r,browserVersion:o,appName:a})=>e?Se({appVersion:n,browserName:r,browserVersion:o,appName:a}):"Chrome",q="purgatory",D=e=>e===q,fe=e=>n=>[...n].map(o=>async()=>e(o)),me=async({accumulatedKeys:e,sendKey:n,canRunTask:r})=>{const a=fe(n)(e);return j.sequentPromises(a,r)},pe=e=>r=>(t.logger("onStartMainCam"),e.on("api:admin:start-main-cam",r)),he=e=>r=>(t.logger("onStartMic"),e.on("api:admin:start-mic",r)),Re=e=>r=>(t.logger("onStopMainCam"),e.on("api:admin:stop-main-cam",r)),Te=e=>r=>(t.logger("onStopMic"),e.on("api:admin:stop-mic",r)),Ne=({sipConnector:e})=>{const n=(u,d)=>({isSyncForced:S})=>{if(S===!0){u();return}d()},r=pe(e),o=Re(e),a=he(e),s=Te(e);let c,l,g,p;const N=({onStartMainCamForced:u,onStartMainCamNotForced:d,onStopMainCamForced:S,onStopMainCamNotForced:R,onStartMicForced:T,onStartMicNotForced:A,onStopMicForced:b,onStopMicNotForced:P})=>{const E=n(u,d);c=r(E);const f=n(S,R);l=o(f);const I=n(T,A);g=a(I);const m=n(b,P);p=s(m)},O=()=>{c?.(),l?.(),g?.(),p?.()};return{start:u=>{N(u)},stop:()=>{O()}}},Oe=Object.freeze(Object.defineProperty({__proto__:null,PURGATORY_CONFERENCE_NUMBER:q,createSyncMediaState:Ne,createUaParser:x,error:le,getExtraHeaders:ue,getUserAgent:Ee,hasPurgatory:D,prepareMediaStream:t.prepareMediaStream,sendDtmfAccumulated:me,sendOffer:t.sendOffer,setEncodingsToSender:t.setEncodingsToSender,setParametersToSender:t.setParametersToSender},Symbol.toStringTag,{value:"Module"})),_e=()=>x().isChrome,Ae=e=>{if(!k.isCanceledError(e)&&!W.hasCanceledError(e)&&!t.hasNotReadyForConnectionError(e))throw e;return{configuration:void 0,isSuccessful:!1}},be=({kind:e,readyState:n})=>e==="video"&&n==="live",w=(e,n,{onEnterPurgatory:r,onEnterConference:o})=>{D(e)?r&&r():o&&o({isSuccessProgressCall:n})},U=(e,n)=>{e(),n&&n()},$=(e,n,r)=>{throw e&&e(),n(),r},Pe=new Set(["on","once","onceRace","wait","off","sendDTMF","hangUp","declineToIncomingCall","sendChannels","checkTelephony","waitChannels","ping","startAutoConnect","stopAutoConnect","connection","isConfigured","isRegistered"]);class ve{on;once;onceRace;wait;off;sendDTMF;hangUp;declineToIncomingCall;sendChannels;checkTelephony;waitChannels;ping;startAutoConnect;stopAutoConnect;connection;isConfigured;isRegistered;sipConnector;constructor(n){return this.sipConnector=n,new Proxy(this,{get:(r,o,a)=>{if(typeof o=="string"&&Pe.has(o)&&o in this.sipConnector){const c=Reflect.get(this.sipConnector,o,this.sipConnector);return typeof c=="function"?c.bind(this.sipConnector):c}const s=Reflect.get(r,o,a);return typeof s=="function"?s.bind(r):s}})}connectToServer=async(n,r)=>this.sipConnector.connect(n,r).then(o=>(t.logger("connectToServer then"),{configuration:o,isSuccessful:!0})).catch(async o=>(t.logger("connectToServer catch: error",o),Ae(o)));callToServer=async n=>{const{conference:r,mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,degradationPreference:l,sendEncodings:g,offerToReceiveAudio:p,offerToReceiveVideo:N,directionVideo:O,directionAudio:_,onBeforeProgressCall:h,onSuccessProgressCall:u,onEnterPurgatory:d,onEnterConference:S,onFailProgressCall:R,onFinishProgressCall:T,onEndedCall:A,onAddedTransceiver:b}=n;t.logger("callToServer",n);const P=async()=>(t.logger("startCall"),this.sipConnector.call({mediaStream:o,extraHeaders:a,iceServers:s,contentHint:c,offerToReceiveAudio:p,offerToReceiveVideo:N,directionVideo:O,directionAudio:_,degradationPreference:l,onAddedTransceiver:b,sendEncodings:g,number:r}));let E=!1,f;const m=(t.logger("subscribeEnterConference: onEnterConference",S),this.sipConnector.on("api:enter-room",({room:i})=>{t.logger("enterRoom",{_room:i,isSuccessProgressCall:E}),f=i,(d??S)&&w(f,E,{onEnterPurgatory:d,onEnterConference:S})})),M=i=>(t.logger("onSuccess"),E=!0,u&&u({isPurgatory:D(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{U(m,A)}),i),y=i=>(t.logger("onFail"),$(R,m,i)),L=()=>{t.logger("onFinish"),T&&T()};return t.logger("onBeforeProgressCall"),h&&h(r),P().then(M).catch(i=>y(i)).finally(L)};disconnectFromServer=async()=>this.sipConnector.disconnect().then(()=>(t.logger("disconnectFromServer: then"),{isSuccessful:!0})).catch(n=>(t.logger("disconnectFromServer: catch",n),{isSuccessful:!1}));answerToIncomingCall=async n=>{const{mediaStream:r,extraHeaders:o,iceServers:a,contentHint:s,degradationPreference:c,sendEncodings:l,offerToReceiveAudio:g,offerToReceiveVideo:p,directionVideo:N,directionAudio:O,onBeforeProgressCall:_,onSuccessProgressCall:h,onEnterPurgatory:u,onEnterConference:d,onFailProgressCall:S,onFinishProgressCall:R,onEndedCall:T,onAddedTransceiver:A}=n;t.logger("answerToIncomingCall",n);const b=async()=>this.sipConnector.answerToIncomingCall({mediaStream:r,extraHeaders:o,iceServers:a,contentHint:s,offerToReceiveAudio:g,offerToReceiveVideo:p,directionVideo:N,directionAudio:O,degradationPreference:c,onAddedTransceiver:A,sendEncodings:l}),P=()=>{const{remoteCallerData:i}=this.sipConnector;return i.incomingNumber};let E=!1,f;const m=(t.logger("subscribeEnterConference: onEnterConference",d),this.sipConnector.on("api:enter-room",i=>{t.logger("enterRoom",{room:i.room,isSuccessProgressCall:E}),f=i.room,(u??d)&&w(f,E,{onEnterPurgatory:u,onEnterConference:d})})),M=i=>(t.logger("onSuccess"),E=!0,h&&h({isPurgatory:D(f)}),this.sipConnector.onceRace(["call:ended","call:failed"],()=>{U(m,T)}),i),y=i=>(t.logger("onFail"),$(S,m,i)),L=()=>{t.logger("onFinish"),R&&R()};if(t.logger("onBeforeProgressCall"),_){const i=P();_(i)}return b().then(M).catch(i=>y(i)).finally(L)};updatePresentation=async({mediaStream:n,isP2P:r,contentHint:o,degradationPreference:a,sendEncodings:s,onAddedTransceiver:c})=>(t.logger("updatePresentation"),this.sipConnector.updatePresentation(n,{isP2P:r,contentHint:o,degradationPreference:a,onAddedTransceiver:c,sendEncodings:s}));startPresentation=async({mediaStream:n,isP2P:r,contentHint:o,degradationPreference:a,sendEncodings:s,callLimit:c,onAddedTransceiver:l})=>(t.logger("startPresentation"),this.sipConnector.startPresentation(n,{isP2P:r,contentHint:o,callLimit:c,degradationPreference:a,onAddedTransceiver:l,sendEncodings:s}));stopPresentation=async({isP2P:n=!1}={})=>(t.logger("stopPresentation"),this.sipConnector.stopPresentation({isP2P:n}).catch(r=>{t.logger(r)}));sendRefusalToTurnOnMic=async()=>{t.logger("sendRefusalToTurnOnMic"),await this.sipConnector.sendRefusalToTurnOnMic().catch(n=>{t.logger("sendRefusalToTurnOnMic: error",n)})};sendRefusalToTurnOnCam=async()=>{t.logger("sendRefusalToTurnOnCam"),await this.sipConnector.sendRefusalToTurnOnCam().catch(n=>{t.logger("sendRefusalToTurnOnCam: error",n)})};sendMediaState=async({isEnabledCam:n,isEnabledMic:r})=>{t.logger("sendMediaState"),await this.sipConnector.sendMediaState({cam:n,mic:r})};replaceMediaStream=async(n,{deleteExisting:r,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,sendEncodings:l,onAddedTransceiver:g})=>(t.logger("replaceMediaStream"),this.sipConnector.replaceMediaStream(n,{deleteExisting:r,addMissing:o,forceRenegotiation:a,contentHint:s,degradationPreference:c,onAddedTransceiver:g,sendEncodings:l}));askPermissionToEnableCam=async()=>{t.logger("askPermissionToEnableCam"),await this.sipConnector.askPermissionToEnableCam()};resolveHandleReadyRemoteStreamsDebounced=({onReadyRemoteStreams:n})=>H.debounce(()=>{const r=this.sipConnector.getRemoteStreams();t.logger("remoteStreams",r),n(r)},200);resolveHandleReadyRemoteStreams=({onReadyRemoteStreams:n})=>({track:r})=>{be(r)&&n()};getRemoteStreams=()=>(t.logger("getRemoteStreams"),this.sipConnector.getRemoteStreams());onUseLicense=n=>(t.logger("onUseLicense"),this.sipConnector.on("api:use-license",n));onMustStopPresentation=n=>(t.logger("onMustStopPresentation"),this.sipConnector.on("api:presentation:must-stop",n));onMoveToSpectators=n=>(t.logger("onMoveToSpectators"),this.sipConnector.on("api:participant:move-request-to-spectators",n));onMoveToParticipants=n=>(t.logger("onMoveToParticipants"),this.sipConnector.on("api:participant:move-request-to-participants",n));onStats=n=>(t.logger("onStats"),this.sipConnector.on("stats:collected",n));offStats=n=>{t.logger("offStats"),this.sipConnector.off("stats:collected",n)}}var G=(e=>(e.VP8="video/VP8",e.VP9="video/VP9",e.H264="video/H264",e.AV1="video/AV1",e.rtx="video/rtx",e.red="video/red",e.flexfec03="video/flexfec-03",e))(G||{});exports.ECallCause=t.ECallCause;exports.ECallStatus=t.EState$1;exports.EConnectionStatus=t.EState;exports.EContentUseLicense=t.EContentUseLicense;exports.EIncomingStatus=t.EState$2;exports.EPresentationStatus=t.EState$3;exports.EStatsTypes=t.EStatsTypes;exports.SipConnector=t.SipConnector;exports.StatsPeerConnection=t.StatsPeerConnection;exports.disableDebug=t.disableDebug;exports.enableDebug=t.enableDebug;exports.getCodecFromSender=t.getCodecFromSender;exports.hasCanceledStartPresentationError=t.hasCanceledStartPresentationError;Object.defineProperty(exports,"hasConnectionPromiseIsNotActualError",{enumerable:!0,get:()=>K.isPromiseIsNotActualError});exports.EMimeTypesVideoCodecs=G;exports.ESystemStatus=C;exports.SipConnectorFacade=ve;exports.hasAvailableStats=_e;exports.hasCanceledCallError=J;exports.sessionSelectors=te;exports.tools=Oe;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { EContentUseLicense } from './ApiManager';
|
|
2
2
|
export { ECallCause, hasCanceledCallError } from './CallManager';
|
|
3
3
|
export { disableDebug, enableDebug } from './logger';
|
|
4
4
|
export { hasCanceledStartPresentationError } from './PresentationManager';
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { E as h, a as R, b as p, c as j, l as r, p as K, s as X, d as q, e as z, h as J } from "./@SipConnector-
|
|
2
|
-
import {
|
|
1
|
+
import { E as h, a as R, b as p, c as j, l as r, p as K, s as X, d as q, e as z, h as J } from "./@SipConnector-CmHfa0Ce.js";
|
|
2
|
+
import { f as je, o as Ke, k as Xe, S as qe, m as ze, g as Je, i as Qe, n as Ze, j as en } from "./@SipConnector-CmHfa0Ce.js";
|
|
3
3
|
import "events-constructor";
|
|
4
4
|
import { isCanceledError as B } from "@krivega/cancelable-promise";
|
|
5
5
|
import { hasCanceledError as Q } from "repeated-calls";
|
|
@@ -150,8 +150,8 @@ const ue = new Error("Unknown error"), le = (e = ue) => {
|
|
|
150
150
|
onStopMainCamForced: m,
|
|
151
151
|
onStopMainCamNotForced: _,
|
|
152
152
|
onStartMicForced: O,
|
|
153
|
-
onStartMicNotForced:
|
|
154
|
-
onStopMicForced:
|
|
153
|
+
onStartMicNotForced: P,
|
|
154
|
+
onStopMicForced: D,
|
|
155
155
|
onStopMicNotForced: I
|
|
156
156
|
}) => {
|
|
157
157
|
const S = n(
|
|
@@ -164,9 +164,9 @@ const ue = new Error("Unknown error"), le = (e = ue) => {
|
|
|
164
164
|
_
|
|
165
165
|
);
|
|
166
166
|
u = o(E);
|
|
167
|
-
const L = n(O,
|
|
167
|
+
const L = n(O, P);
|
|
168
168
|
C = a(L);
|
|
169
|
-
const g = n(
|
|
169
|
+
const g = n(D, I);
|
|
170
170
|
N = s(g);
|
|
171
171
|
}, v = () => {
|
|
172
172
|
c?.(), u?.(), C?.(), N?.();
|
|
@@ -193,11 +193,11 @@ const ue = new Error("Unknown error"), le = (e = ue) => {
|
|
|
193
193
|
sendOffer: X,
|
|
194
194
|
setEncodingsToSender: q,
|
|
195
195
|
setParametersToSender: z
|
|
196
|
-
}, Symbol.toStringTag, { value: "Module" })), Ge = () => W().isChrome,
|
|
196
|
+
}, Symbol.toStringTag, { value: "Module" })), Ge = () => W().isChrome, Pe = (e) => {
|
|
197
197
|
if (!B(e) && !Q(e) && !J(e))
|
|
198
198
|
throw e;
|
|
199
199
|
return { configuration: void 0, isSuccessful: !1 };
|
|
200
|
-
},
|
|
200
|
+
}, De = ({ kind: e, readyState: n }) => e === "video" && n === "live", x = (e, n, { onEnterPurgatory: t, onEnterConference: o }) => {
|
|
201
201
|
y(e) ? t && t() : o && o({ isSuccessProgressCall: n });
|
|
202
202
|
}, V = (e, n) => {
|
|
203
203
|
e(), n && n();
|
|
@@ -270,7 +270,7 @@ class We {
|
|
|
270
270
|
}
|
|
271
271
|
});
|
|
272
272
|
}
|
|
273
|
-
connectToServer = async (n, t) => this.sipConnector.connect(n, t).then((o) => (r("connectToServer then"), { configuration: o, isSuccessful: !0 })).catch(async (o) => (r("connectToServer catch: error", o),
|
|
273
|
+
connectToServer = async (n, t) => this.sipConnector.connect(n, t).then((o) => (r("connectToServer then"), { configuration: o, isSuccessful: !0 })).catch(async (o) => (r("connectToServer catch: error", o), Pe(o)));
|
|
274
274
|
callToServer = async (n) => {
|
|
275
275
|
const {
|
|
276
276
|
conference: t,
|
|
@@ -290,8 +290,8 @@ class We {
|
|
|
290
290
|
onEnterConference: m,
|
|
291
291
|
onFailProgressCall: _,
|
|
292
292
|
onFinishProgressCall: O,
|
|
293
|
-
onEndedCall:
|
|
294
|
-
onAddedTransceiver:
|
|
293
|
+
onEndedCall: P,
|
|
294
|
+
onAddedTransceiver: D
|
|
295
295
|
} = n;
|
|
296
296
|
r("callToServer", n);
|
|
297
297
|
const I = async () => (r("startCall"), this.sipConnector.call({
|
|
@@ -304,7 +304,7 @@ class We {
|
|
|
304
304
|
directionVideo: v,
|
|
305
305
|
directionAudio: b,
|
|
306
306
|
degradationPreference: u,
|
|
307
|
-
onAddedTransceiver:
|
|
307
|
+
onAddedTransceiver: D,
|
|
308
308
|
sendEncodings: C,
|
|
309
309
|
number: t
|
|
310
310
|
}));
|
|
@@ -315,7 +315,7 @@ class We {
|
|
|
315
315
|
onEnterConference: m
|
|
316
316
|
});
|
|
317
317
|
})), F = (i) => (r("onSuccess"), S = !0, l && l({ isPurgatory: y(E) }), this.sipConnector.onceRace(["call:ended", "call:failed"], () => {
|
|
318
|
-
V(g,
|
|
318
|
+
V(g, P);
|
|
319
319
|
}), i), w = (i) => (r("onFail"), $(_, g, i)), U = () => {
|
|
320
320
|
r("onFinish"), O && O();
|
|
321
321
|
};
|
|
@@ -341,10 +341,10 @@ class We {
|
|
|
341
341
|
onFailProgressCall: m,
|
|
342
342
|
onFinishProgressCall: _,
|
|
343
343
|
onEndedCall: O,
|
|
344
|
-
onAddedTransceiver:
|
|
344
|
+
onAddedTransceiver: P
|
|
345
345
|
} = n;
|
|
346
346
|
r("answerToIncomingCall", n);
|
|
347
|
-
const
|
|
347
|
+
const D = async () => this.sipConnector.answerToIncomingCall({
|
|
348
348
|
mediaStream: t,
|
|
349
349
|
extraHeaders: o,
|
|
350
350
|
iceServers: a,
|
|
@@ -354,7 +354,7 @@ class We {
|
|
|
354
354
|
directionVideo: A,
|
|
355
355
|
directionAudio: v,
|
|
356
356
|
degradationPreference: c,
|
|
357
|
-
onAddedTransceiver:
|
|
357
|
+
onAddedTransceiver: P,
|
|
358
358
|
sendEncodings: u
|
|
359
359
|
}), I = () => {
|
|
360
360
|
const { remoteCallerData: i } = this.sipConnector;
|
|
@@ -375,7 +375,7 @@ class We {
|
|
|
375
375
|
const i = I();
|
|
376
376
|
b(i);
|
|
377
377
|
}
|
|
378
|
-
return
|
|
378
|
+
return D().then(F).catch((i) => w(i)).finally(U);
|
|
379
379
|
};
|
|
380
380
|
updatePresentation = async ({
|
|
381
381
|
mediaStream: n,
|
|
@@ -407,7 +407,7 @@ class We {
|
|
|
407
407
|
onAddedTransceiver: u,
|
|
408
408
|
sendEncodings: s
|
|
409
409
|
}));
|
|
410
|
-
|
|
410
|
+
stopPresentation = async ({ isP2P: n = !1 } = {}) => (r("stopPresentation"), this.sipConnector.stopPresentation({
|
|
411
411
|
isP2P: n
|
|
412
412
|
}).catch((t) => {
|
|
413
413
|
r(t);
|
|
@@ -458,7 +458,7 @@ class We {
|
|
|
458
458
|
resolveHandleReadyRemoteStreams = ({
|
|
459
459
|
onReadyRemoteStreams: n
|
|
460
460
|
}) => ({ track: t }) => {
|
|
461
|
-
|
|
461
|
+
De(t) && n();
|
|
462
462
|
};
|
|
463
463
|
getRemoteStreams = () => (r("getRemoteStreams"), this.sipConnector.getRemoteStreams());
|
|
464
464
|
onUseLicense = (n) => (r("onUseLicense"), this.sipConnector.on("api:use-license", n));
|
|
@@ -475,12 +475,12 @@ export {
|
|
|
475
475
|
h as ECallCause,
|
|
476
476
|
p as ECallStatus,
|
|
477
477
|
R as EConnectionStatus,
|
|
478
|
+
je as EContentUseLicense,
|
|
478
479
|
j as EIncomingStatus,
|
|
479
480
|
Me as EMimeTypesVideoCodecs,
|
|
480
|
-
|
|
481
|
-
|
|
481
|
+
Ke as EPresentationStatus,
|
|
482
|
+
Xe as EStatsTypes,
|
|
482
483
|
f as ESystemStatus,
|
|
483
|
-
Xe as EUseLicense,
|
|
484
484
|
qe as SipConnector,
|
|
485
485
|
We as SipConnectorFacade,
|
|
486
486
|
ze as StatsPeerConnection,
|
|
@@ -6,12 +6,14 @@ type TTeardown = TUnsubscribe | {
|
|
|
6
6
|
export declare abstract class BaseStateMachine<TMachine extends AnyStateMachine, EState extends string> {
|
|
7
7
|
protected readonly actor: Actor<TMachine>;
|
|
8
8
|
private readonly subscriptions;
|
|
9
|
+
private readonly stateChangeListeners;
|
|
9
10
|
protected constructor(machine: TMachine);
|
|
10
11
|
get actorRef(): Actor<TMachine>;
|
|
11
12
|
get state(): EState;
|
|
12
13
|
send(event: EventFrom<TMachine>): void;
|
|
13
14
|
getSnapshot(): SnapshotFrom<TMachine>;
|
|
14
15
|
subscribe(listener: (snapshot: SnapshotFrom<TMachine>) => void): import('xstate').Subscription;
|
|
16
|
+
onStateChange(listener: (state: EState) => void): () => void;
|
|
15
17
|
stop(): void;
|
|
16
18
|
protected addSubscription(subscription: TTeardown): TUnsubscribe;
|
|
17
19
|
}
|