@voicenter-team/opensips-js 1.0.20 → 1.0.22
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/build/enum/message.event.listener.type.d.ts +5 -0
- package/build/enum/message.event.listener.type.js +8 -0
- package/build/enum/session.direction.enum.d.ts +2 -0
- package/build/enum/session.direction.enum.js +5 -0
- package/build/helpers/UA/index.d.ts +38 -3
- package/build/helpers/UA/index.js +310 -1
- package/build/helpers/audio.helper.d.ts +7 -1
- package/build/helpers/audio.helper.js +39 -2
- package/build/helpers/jssip.d.ts +5 -0
- package/build/helpers/jssip.js +30 -0
- package/build/index.d.ts +58 -59
- package/build/index.js +395 -165
- package/build/lib/msrp/message.d.ts +12 -0
- package/build/lib/msrp/message.js +82 -0
- package/build/lib/msrp/session.d.ts +94 -0
- package/build/lib/msrp/session.js +621 -0
- package/package.json +2 -2
- package/src/types/Transactions.d.ts +9 -0
- package/src/types/UAExtended.d.ts +74 -0
- package/src/types/listeners.d.ts +17 -1
- package/src/types/msrp.d.ts +49 -0
- package/src/types/rtc.d.ts +9 -0
package/build/index.js
CHANGED
@@ -12,13 +12,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
13
|
};
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
-
const jssip_1 = __importDefault(require("jssip"));
|
16
15
|
const UA_1 = __importDefault(require("./helpers/UA"));
|
17
16
|
const p_iteration_1 = require("p-iteration");
|
18
17
|
const time_helper_1 = require("./helpers/time.helper");
|
19
18
|
const filter_helper_1 = require("./helpers/filter.helper");
|
20
19
|
const audio_helper_1 = require("./helpers/audio.helper");
|
21
20
|
const metrics_1 = __importDefault(require("./helpers/webrtcmetrics/metrics"));
|
21
|
+
const JsSIP_1 = __importDefault(require("jssip/lib/JsSIP"));
|
22
22
|
const metric_keys_to_include_1 = require("./enum/metric.keys.to.include");
|
23
23
|
const call_event_listener_type_1 = require("./enum/call.event.listener.type");
|
24
24
|
const CALL_STATUS_UNANSWERED = 0;
|
@@ -27,41 +27,50 @@ const STORAGE_KEYS = {
|
|
27
27
|
SELECTED_OUTPUT_DEVICE: 'selectedOutputDevice'
|
28
28
|
};
|
29
29
|
class OpenSIPSJS extends UA_1.default {
|
30
|
-
constructor(options) {
|
31
|
-
const configuration = Object.assign(Object.assign({}, options.configuration), { sockets: options.socketInterfaces.map(sock => new
|
30
|
+
constructor(options, logger) {
|
31
|
+
const configuration = Object.assign(Object.assign({}, options.configuration), { sockets: options.socketInterfaces.map(sock => new JsSIP_1.default.WebSocketInterface(sock)) });
|
32
32
|
super(configuration);
|
33
33
|
this.initialized = false;
|
34
|
+
this.logger = console;
|
35
|
+
/* Events */
|
34
36
|
this.newRTCSessionEventName = 'newRTCSession';
|
35
37
|
this.registeredEventName = 'registered';
|
36
38
|
this.unregisteredEventName = 'unregistered';
|
39
|
+
this.disconnectedEventName = 'disconnected';
|
40
|
+
this.connectedEventName = 'connected';
|
41
|
+
this.newMSRPSessionEventName = 'newMSRPSession';
|
42
|
+
/* State */
|
43
|
+
this.muted = false;
|
44
|
+
this.isAutoAnswer = false;
|
45
|
+
this.isDNDEnabled = false;
|
46
|
+
this.muteWhenJoinEnabled = false;
|
47
|
+
this.activeRooms = {};
|
37
48
|
this.activeCalls = {};
|
38
49
|
this.extendedCalls = {};
|
39
|
-
this.
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
},
|
49
|
-
microphoneInputLevel: 2,
|
50
|
-
speakerVolume: 1,
|
51
|
-
muteWhenJoin: false,
|
52
|
-
originalStream: null,
|
53
|
-
isDND: false,
|
54
|
-
listeners: {},
|
55
|
-
activeRooms: {},
|
56
|
-
callStatus: {},
|
57
|
-
callTime: {},
|
58
|
-
timeIntervals: {},
|
59
|
-
callMetrics: {},
|
60
|
-
metricConfig: {
|
61
|
-
refreshEvery: 1000,
|
62
|
-
}
|
50
|
+
this.activeMessages = {};
|
51
|
+
this.extendedMessages = {};
|
52
|
+
this.msrpHistory = {};
|
53
|
+
this.microphoneInputLevelValue = 2; // [0;2]
|
54
|
+
this.speakerVolumeValue = 1; // [0;1]
|
55
|
+
this.availableMediaDevices = [];
|
56
|
+
this.selectedMediaDevices = {
|
57
|
+
input: 'default',
|
58
|
+
output: 'default'
|
63
59
|
};
|
60
|
+
this.callStatus = {};
|
61
|
+
this.callTime = {};
|
62
|
+
this.callMetrics = {};
|
63
|
+
this.timeIntervals = {};
|
64
|
+
this.metricConfig = {
|
65
|
+
refreshEvery: 1000
|
66
|
+
};
|
67
|
+
this.originalStreamValue = null;
|
68
|
+
this.isReconnecting = false;
|
69
|
+
this.listenersList = {};
|
64
70
|
this.options = options;
|
71
|
+
if (logger && (0, audio_helper_1.isLoggerCompatible)(logger)) {
|
72
|
+
this.logger = logger;
|
73
|
+
}
|
65
74
|
}
|
66
75
|
on(type, listener) {
|
67
76
|
return super.on(type, listener);
|
@@ -80,78 +89,57 @@ class OpenSIPSJS extends UA_1.default {
|
|
80
89
|
return options;
|
81
90
|
}
|
82
91
|
get currentActiveRoomId() {
|
83
|
-
return this.
|
92
|
+
return this.currentActiveRoomIdValue;
|
84
93
|
}
|
85
94
|
set currentActiveRoomId(roomId) {
|
86
|
-
this.
|
95
|
+
this.currentActiveRoomIdValue = roomId;
|
87
96
|
this.emit('currentActiveRoomChanged', roomId);
|
88
97
|
}
|
89
98
|
get autoAnswer() {
|
90
|
-
return this.
|
91
|
-
}
|
92
|
-
set autoAnswer(value) {
|
93
|
-
this.state.isAutoAnswer = value;
|
99
|
+
return this.isAutoAnswer;
|
94
100
|
}
|
95
101
|
get callAddingInProgress() {
|
96
|
-
return this.
|
102
|
+
return this.isCallAddingInProgress;
|
97
103
|
}
|
98
104
|
set callAddingInProgress(value) {
|
99
|
-
this.
|
105
|
+
this.isCallAddingInProgress = value;
|
100
106
|
this.emit('callAddingInProgressChanged', value);
|
101
107
|
}
|
102
|
-
get
|
103
|
-
return this.
|
108
|
+
get isMSRPInitializing() {
|
109
|
+
return this.isMSRPInitializingValue;
|
104
110
|
}
|
105
|
-
|
106
|
-
this.
|
107
|
-
this.emit('changeMuteWhenJoin', value);
|
111
|
+
get muteWhenJoin() {
|
112
|
+
return this.muteWhenJoinEnabled;
|
108
113
|
}
|
109
114
|
get isDND() {
|
110
|
-
return this.
|
111
|
-
}
|
112
|
-
set isDND(value) {
|
113
|
-
this.state.isDND = value;
|
114
|
-
this.emit('changeIsDND', value);
|
115
|
+
return this.isDNDEnabled;
|
115
116
|
}
|
116
117
|
get speakerVolume() {
|
117
|
-
return this.
|
118
|
-
}
|
119
|
-
set speakerVolume(value) {
|
120
|
-
this.state.speakerVolume = value;
|
121
|
-
Object.values(this.state.extendedCalls).forEach((call) => {
|
122
|
-
if (call.audioTag) {
|
123
|
-
call.audioTag.volume = value;
|
124
|
-
}
|
125
|
-
});
|
118
|
+
return this.speakerVolumeValue;
|
126
119
|
}
|
127
120
|
get microphoneInputLevel() {
|
128
|
-
return this.
|
129
|
-
}
|
130
|
-
set microphoneInputLevel(value) {
|
131
|
-
this.state.microphoneInputLevel = value;
|
132
|
-
this.roomReconfigure(this.currentActiveRoomId);
|
121
|
+
return this.microphoneInputLevelValue;
|
133
122
|
}
|
134
123
|
get getActiveCalls() {
|
135
|
-
return this.
|
124
|
+
return this.activeCalls;
|
136
125
|
}
|
137
126
|
get hasActiveCalls() {
|
138
|
-
return Object.values(this.
|
127
|
+
return Object.values(this.extendedCalls).length > 0;
|
128
|
+
}
|
129
|
+
get getActiveMessages() {
|
130
|
+
return this.activeMessages;
|
139
131
|
}
|
140
132
|
get getActiveRooms() {
|
141
|
-
return this.
|
133
|
+
return this.activeRooms;
|
142
134
|
}
|
143
135
|
get isMuted() {
|
144
|
-
return this.
|
145
|
-
}
|
146
|
-
set isMuted(value) {
|
147
|
-
this.state.isMuted = value;
|
148
|
-
this.emit('changeIsMuted', value);
|
136
|
+
return this.muted;
|
149
137
|
}
|
150
138
|
get getInputDeviceList() {
|
151
|
-
return this.
|
139
|
+
return this.availableMediaDevices.filter(device => device.kind === 'audioinput');
|
152
140
|
}
|
153
141
|
get getOutputDeviceList() {
|
154
|
-
return this.
|
142
|
+
return this.availableMediaDevices.filter(device => device.kind === 'audiooutput');
|
155
143
|
}
|
156
144
|
/*getInputDeviceList: (state) => {
|
157
145
|
return state.availableMediaDevices.filter(device => device.kind === 'audioinput');
|
@@ -163,7 +151,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
163
151
|
return {
|
164
152
|
audio: {
|
165
153
|
deviceId: {
|
166
|
-
exact: this.
|
154
|
+
exact: this.selectedMediaDevices.input
|
167
155
|
}
|
168
156
|
},
|
169
157
|
video: false
|
@@ -176,26 +164,16 @@ class OpenSIPSJS extends UA_1.default {
|
|
176
164
|
return this.getOutputDeviceList.find(device => device.deviceId === 'default');
|
177
165
|
}
|
178
166
|
get selectedInputDevice() {
|
179
|
-
return this.
|
180
|
-
}
|
181
|
-
set selectedInputDevice(deviceId) {
|
182
|
-
localStorage.setItem(STORAGE_KEYS.SELECTED_INPUT_DEVICE, deviceId);
|
183
|
-
this.state.selectedMediaDevices.input = deviceId;
|
184
|
-
this.emit('changeActiveInputMediaDevice', deviceId);
|
167
|
+
return this.selectedMediaDevices.input;
|
185
168
|
}
|
186
169
|
get selectedOutputDevice() {
|
187
|
-
return this.
|
188
|
-
}
|
189
|
-
set selectedOutputDevice(deviceId) {
|
190
|
-
localStorage.setItem(STORAGE_KEYS.SELECTED_OUTPUT_DEVICE, deviceId);
|
191
|
-
this.state.selectedMediaDevices.output = deviceId;
|
192
|
-
this.emit('changeActiveOutputMediaDevice', deviceId);
|
170
|
+
return this.selectedMediaDevices.output;
|
193
171
|
}
|
194
172
|
get originalStream() {
|
195
|
-
return this.
|
173
|
+
return this.originalStreamValue;
|
196
174
|
}
|
197
175
|
setAvailableMediaDevices(devices) {
|
198
|
-
this.
|
176
|
+
this.availableMediaDevices = devices;
|
199
177
|
this.emit('changeAvailableDeviceList', devices);
|
200
178
|
}
|
201
179
|
updateDeviceList() {
|
@@ -208,8 +186,8 @@ class OpenSIPSJS extends UA_1.default {
|
|
208
186
|
setMediaDevices(setDefaults = false) {
|
209
187
|
var _a, _b;
|
210
188
|
return __awaiter(this, void 0, void 0, function* () {
|
211
|
-
this.
|
212
|
-
this.
|
189
|
+
this.selectedMediaDevices.input = localStorage.getItem(STORAGE_KEYS.SELECTED_INPUT_DEVICE) || 'default';
|
190
|
+
this.selectedMediaDevices.output = localStorage.getItem(STORAGE_KEYS.SELECTED_OUTPUT_DEVICE) || 'default';
|
213
191
|
yield navigator.mediaDevices.getUserMedia(this.getUserMediaConstraints);
|
214
192
|
const devices = yield navigator.mediaDevices.enumerateDevices();
|
215
193
|
this.setAvailableMediaDevices(devices);
|
@@ -226,47 +204,51 @@ class OpenSIPSJS extends UA_1.default {
|
|
226
204
|
setCallTime(value) {
|
227
205
|
const time = Object.assign({}, value);
|
228
206
|
delete time.callId;
|
229
|
-
this.
|
207
|
+
this.callTime = Object.assign(Object.assign({}, this.callTime), { [value.callId]: time });
|
208
|
+
this.emit('changeCallTime', this.callTime);
|
230
209
|
}
|
231
210
|
removeCallTime(callId) {
|
232
|
-
const callTimeCopy = Object.assign({}, this.
|
211
|
+
const callTimeCopy = Object.assign({}, this.callTime);
|
233
212
|
delete callTimeCopy[callId];
|
234
|
-
this.
|
213
|
+
this.callTime = Object.assign({}, callTimeCopy);
|
214
|
+
this.emit('changeCallTime', this.callTime);
|
235
215
|
}
|
236
216
|
setTimeInterval(callId, interval) {
|
237
|
-
this.
|
217
|
+
this.timeIntervals = Object.assign(Object.assign({}, this.timeIntervals), { [callId]: interval });
|
238
218
|
}
|
239
219
|
removeTimeInterval(callId) {
|
240
|
-
const timeIntervalsCopy = Object.assign({}, this.
|
220
|
+
const timeIntervalsCopy = Object.assign({}, this.timeIntervals);
|
241
221
|
clearInterval(timeIntervalsCopy[callId]);
|
242
222
|
delete timeIntervalsCopy[callId];
|
243
|
-
this.
|
223
|
+
this.timeIntervals = Object.assign({}, timeIntervalsCopy);
|
244
224
|
}
|
245
225
|
_stopCallTimer(callId) {
|
246
226
|
this.removeTimeInterval(callId);
|
247
227
|
this.removeCallTime(callId);
|
248
228
|
}
|
249
229
|
setMetricsConfig(config) {
|
250
|
-
this.
|
230
|
+
this.metricConfig = Object.assign(Object.assign({}, this.metricConfig), config);
|
251
231
|
}
|
252
232
|
sendDTMF(callId, value) {
|
253
233
|
const validation_regex = /^[A-D0-9]+$/g;
|
254
234
|
if (!validation_regex.test(value)) {
|
255
235
|
throw new Error('Not allowed character in DTMF input');
|
256
236
|
}
|
257
|
-
const call = this.
|
237
|
+
const call = this.extendedCalls[callId];
|
258
238
|
call.sendDTMF(value);
|
259
239
|
}
|
240
|
+
setIsMuted(value) {
|
241
|
+
this.muted = value;
|
242
|
+
this.emit('changeIsMuted', value);
|
243
|
+
}
|
260
244
|
doMute(value) {
|
261
245
|
const activeRoomId = this.currentActiveRoomId;
|
262
|
-
this.
|
246
|
+
this.setIsMuted(value);
|
247
|
+
//this.isMuted = value
|
263
248
|
this.roomReconfigure(activeRoomId);
|
264
249
|
}
|
265
|
-
sendMessage(target, body, options) {
|
266
|
-
return super.sendMessage(`sip:${target}@${this.sipDomain}`, body, options);
|
267
|
-
}
|
268
250
|
doCallHold({ callId, toHold, automatic }) {
|
269
|
-
const call = this.
|
251
|
+
const call = this.extendedCalls[callId];
|
270
252
|
call._automaticHold = automatic !== null && automatic !== void 0 ? automatic : false;
|
271
253
|
if (toHold) {
|
272
254
|
call.hold();
|
@@ -282,7 +264,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
282
264
|
}).forEach(call => this.callTerminate(call._id));
|
283
265
|
}
|
284
266
|
callAnswer(callId) {
|
285
|
-
const call = this.
|
267
|
+
const call = this.extendedCalls[callId];
|
286
268
|
this._cancelAllOutgoingUnanswered();
|
287
269
|
call.answer(this.sipOptions);
|
288
270
|
this.updateCall(call);
|
@@ -292,6 +274,14 @@ class OpenSIPSJS extends UA_1.default {
|
|
292
274
|
this._triggerAddStream(event, call);
|
293
275
|
}));
|
294
276
|
}
|
277
|
+
msrpAnswer(callId) {
|
278
|
+
const call = this.extendedMessages[callId];
|
279
|
+
//this._cancelAllOutgoingUnanswered()
|
280
|
+
call.answer(this.sipOptions);
|
281
|
+
this.updateMSRPSession(call);
|
282
|
+
// TODO: maybe would be better to move to the top
|
283
|
+
//this.setCurrentActiveRoomId(call.roomId)
|
284
|
+
}
|
295
285
|
callMove(callId, roomId) {
|
296
286
|
return __awaiter(this, void 0, void 0, function* () {
|
297
287
|
this._updateCallStatus({ callId, isMoving: true });
|
@@ -300,14 +290,18 @@ class OpenSIPSJS extends UA_1.default {
|
|
300
290
|
});
|
301
291
|
}
|
302
292
|
updateCall(value) {
|
303
|
-
this.
|
304
|
-
this.emit('changeActiveCalls', this.
|
293
|
+
this.activeCalls[value._id] = (0, audio_helper_1.simplifyCallObject)(value);
|
294
|
+
this.emit('changeActiveCalls', this.activeCalls);
|
295
|
+
}
|
296
|
+
updateMSRPSession(value) {
|
297
|
+
this.activeMessages[value._id] = (0, audio_helper_1.simplifyMessageObject)(value);
|
298
|
+
this.emit('changeActiveMessages', this.activeMessages);
|
305
299
|
}
|
306
300
|
updateRoom(value) {
|
307
|
-
const room = this.
|
301
|
+
const room = this.activeRooms[value.roomId];
|
308
302
|
const newRoomData = Object.assign(Object.assign({}, room), value);
|
309
|
-
this.
|
310
|
-
this.emit('updateRoom', { room: newRoomData, roomList: this.
|
303
|
+
this.activeRooms = Object.assign(Object.assign({}, this.activeRooms), { [value.roomId]: Object.assign({}, newRoomData) });
|
304
|
+
this.emit('updateRoom', { room: newRoomData, roomList: this.activeRooms });
|
311
305
|
}
|
312
306
|
hasAutoAnswerHeaders(event) {
|
313
307
|
const regex = /answer-after=0/;
|
@@ -316,26 +310,37 @@ class OpenSIPSJS extends UA_1.default {
|
|
316
310
|
return callInfoHeader && regex.test(callInfoHeader);
|
317
311
|
}
|
318
312
|
_addCall(value, emitEvent = true) {
|
319
|
-
this.
|
320
|
-
/*this.
|
321
|
-
...this.
|
313
|
+
this.activeCalls = Object.assign(Object.assign({}, this.activeCalls), { [value._id]: (0, audio_helper_1.simplifyCallObject)(value) });
|
314
|
+
/*this.extendedCalls = {
|
315
|
+
...this.extendedCalls,
|
322
316
|
[value._id]: value
|
323
317
|
}*/
|
324
|
-
this.
|
318
|
+
this.extendedCalls[value._id] = value;
|
325
319
|
if (emitEvent) {
|
326
|
-
this.emit('changeActiveCalls', this.
|
320
|
+
this.emit('changeActiveCalls', this.activeCalls);
|
327
321
|
}
|
328
322
|
}
|
329
323
|
_addCallStatus(callId) {
|
330
|
-
this.
|
324
|
+
this.callStatus = Object.assign(Object.assign({}, this.callStatus), { [callId]: {
|
331
325
|
isMoving: false,
|
332
326
|
isTransferring: false,
|
333
327
|
isMerging: false
|
334
328
|
} });
|
335
|
-
this.emit('changeCallStatus', this.
|
329
|
+
this.emit('changeCallStatus', this.callStatus);
|
330
|
+
}
|
331
|
+
_addMMSRPSession(value) {
|
332
|
+
this.activeMessages = Object.assign(Object.assign({}, this.activeMessages), { [value._id]: (0, audio_helper_1.simplifyMessageObject)(value) });
|
333
|
+
this.extendedMessages[value._id] = value;
|
334
|
+
this.emit('changeActiveMessages', this.activeMessages);
|
335
|
+
}
|
336
|
+
_addMSRPMessage(value, session) {
|
337
|
+
const sessionMessages = this.msrpHistory[session.id] || [];
|
338
|
+
sessionMessages.push(value);
|
339
|
+
this.msrpHistory = Object.assign(Object.assign({}, this.msrpHistory), { [session.id]: [...sessionMessages] });
|
340
|
+
this.emit('newMSRPMessage', { message: value, session: session });
|
336
341
|
}
|
337
342
|
_updateCallStatus(value) {
|
338
|
-
const prevStatus = Object.assign({}, this.
|
343
|
+
const prevStatus = Object.assign({}, this.callStatus[value.callId]);
|
339
344
|
const newStatus = Object.assign({}, prevStatus);
|
340
345
|
if (value.isMoving !== undefined) {
|
341
346
|
newStatus.isMoving = value.isMoving;
|
@@ -346,25 +351,25 @@ class OpenSIPSJS extends UA_1.default {
|
|
346
351
|
if (value.isMerging !== undefined) {
|
347
352
|
newStatus.isMerging = value.isMerging;
|
348
353
|
}
|
349
|
-
this.
|
350
|
-
this.emit('changeCallStatus', this.
|
354
|
+
this.callStatus = Object.assign(Object.assign({}, this.callStatus), { [value.callId]: Object.assign({}, newStatus) });
|
355
|
+
this.emit('changeCallStatus', this.callStatus);
|
351
356
|
}
|
352
357
|
_removeCallStatus(callId) {
|
353
|
-
const callStatusCopy = Object.assign({}, this.
|
358
|
+
const callStatusCopy = Object.assign({}, this.callStatus);
|
354
359
|
delete callStatusCopy[callId];
|
355
|
-
this.
|
356
|
-
this.emit('changeCallStatus', this.
|
360
|
+
this.callStatus = Object.assign({}, callStatusCopy);
|
361
|
+
this.emit('changeCallStatus', this.callStatus);
|
357
362
|
}
|
358
363
|
_addRoom(value) {
|
359
|
-
this.
|
360
|
-
this.emit('addRoom', { room: value, roomList: this.
|
364
|
+
this.activeRooms = Object.assign(Object.assign({}, this.activeRooms), { [value.roomId]: value });
|
365
|
+
this.emit('addRoom', { room: value, roomList: this.activeRooms });
|
361
366
|
}
|
362
367
|
setMicrophone(dId) {
|
363
368
|
return __awaiter(this, void 0, void 0, function* () {
|
364
369
|
if (!this.getInputDeviceList.find(({ deviceId }) => deviceId === dId)) {
|
365
370
|
return;
|
366
371
|
}
|
367
|
-
this.
|
372
|
+
this.setSelectedInputDevice(dId);
|
368
373
|
let stream; // = null
|
369
374
|
try {
|
370
375
|
stream = yield navigator.mediaDevices.getUserMedia(this.getUserMediaConstraints);
|
@@ -375,7 +380,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
375
380
|
if (Object.keys(this.getActiveCalls).length === 0) {
|
376
381
|
return;
|
377
382
|
}
|
378
|
-
const callsInCurrentRoom = Object.values(this.
|
383
|
+
const callsInCurrentRoom = Object.values(this.extendedCalls).filter(call => call.roomId === this.currentActiveRoomId);
|
379
384
|
if (callsInCurrentRoom.length === 1) {
|
380
385
|
Object.values(callsInCurrentRoom).forEach(call => {
|
381
386
|
const processedStream = (0, audio_helper_1.processAudioVolume)(stream, this.microphoneInputLevel);
|
@@ -391,7 +396,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
391
396
|
});
|
392
397
|
}
|
393
398
|
_setOriginalStream(value) {
|
394
|
-
this.
|
399
|
+
this.originalStreamValue = value;
|
395
400
|
this.emit('changeOriginalStream', value);
|
396
401
|
}
|
397
402
|
setSpeaker(dId) {
|
@@ -399,8 +404,8 @@ class OpenSIPSJS extends UA_1.default {
|
|
399
404
|
if (!this.getOutputDeviceList.find(({ deviceId }) => deviceId === dId)) {
|
400
405
|
return;
|
401
406
|
}
|
402
|
-
this.
|
403
|
-
const activeCallList = Object.values(this.
|
407
|
+
this.setSelectedOutputDevice(dId);
|
408
|
+
const activeCallList = Object.values(this.extendedCalls);
|
404
409
|
if (activeCallList.length === 0) {
|
405
410
|
return;
|
406
411
|
}
|
@@ -418,17 +423,17 @@ class OpenSIPSJS extends UA_1.default {
|
|
418
423
|
});
|
419
424
|
}
|
420
425
|
removeRoom(roomId) {
|
421
|
-
const activeRoomsCopy = Object.assign({}, this.
|
426
|
+
const activeRoomsCopy = Object.assign({}, this.activeRooms);
|
422
427
|
const roomToRemove = Object.assign({}, activeRoomsCopy[roomId]);
|
423
428
|
delete activeRoomsCopy[roomId];
|
424
|
-
this.
|
425
|
-
this.emit('removeRoom', { room: roomToRemove, roomList: this.
|
429
|
+
this.activeRooms = Object.assign({}, activeRoomsCopy);
|
430
|
+
this.emit('removeRoom', { room: roomToRemove, roomList: this.activeRooms });
|
426
431
|
}
|
427
432
|
deleteRoomIfEmpty(roomId) {
|
428
433
|
if (roomId === undefined) {
|
429
434
|
return;
|
430
435
|
}
|
431
|
-
if (Object.values(this.
|
436
|
+
if (Object.values(this.extendedCalls).filter(call => call.roomId === roomId).length === 0) {
|
432
437
|
this.removeRoom(roomId);
|
433
438
|
if (this.currentActiveRoomId === roomId) {
|
434
439
|
this.currentActiveRoomId = undefined;
|
@@ -441,7 +446,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
441
446
|
}
|
442
447
|
}
|
443
448
|
muteReconfigure(call) {
|
444
|
-
if (this.
|
449
|
+
if (this.muted) {
|
445
450
|
call.mute({ audio: true });
|
446
451
|
}
|
447
452
|
else {
|
@@ -453,7 +458,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
453
458
|
if (roomId === undefined) {
|
454
459
|
return;
|
455
460
|
}
|
456
|
-
const callsInRoom = Object.values(this.
|
461
|
+
const callsInRoom = Object.values(this.extendedCalls).filter(call => call.roomId === roomId);
|
457
462
|
// Let`s take care on the audio output first and check if passed room is our selected room
|
458
463
|
if (this.currentActiveRoomId === roomId) {
|
459
464
|
callsInRoom.forEach(call => {
|
@@ -494,7 +499,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
494
499
|
}
|
495
500
|
if (stream && callsInRoom[0].connection && callsInRoom[0].connection.getSenders()[0]) {
|
496
501
|
const processedStream = (0, audio_helper_1.processAudioVolume)(stream, this.microphoneInputLevel);
|
497
|
-
processedStream.getTracks().forEach(track => track.enabled = !this.
|
502
|
+
processedStream.getTracks().forEach(track => track.enabled = !this.muted);
|
498
503
|
this._setOriginalStream(processedStream);
|
499
504
|
yield callsInRoom[0].connection.getSenders()[0].replaceTrack(processedStream.getTracks()[0]);
|
500
505
|
this.muteReconfigure(callsInRoom[0]);
|
@@ -566,7 +571,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
566
571
|
}
|
567
572
|
}
|
568
573
|
muteCaller(callId, value) {
|
569
|
-
const call = this.
|
574
|
+
const call = this.extendedCalls[callId];
|
570
575
|
if (call && call.connection.getReceivers().length) {
|
571
576
|
call.localMuted = value;
|
572
577
|
call.connection.getReceivers().forEach((receiver) => {
|
@@ -577,7 +582,13 @@ class OpenSIPSJS extends UA_1.default {
|
|
577
582
|
}
|
578
583
|
}
|
579
584
|
callTerminate(callId) {
|
580
|
-
const call = this.
|
585
|
+
const call = this.extendedCalls[callId];
|
586
|
+
if (call._status !== 8) {
|
587
|
+
call.terminate();
|
588
|
+
}
|
589
|
+
}
|
590
|
+
messageTerminate(callId) {
|
591
|
+
const call = this.extendedMessages[callId];
|
581
592
|
if (call._status !== 8) {
|
582
593
|
call.terminate();
|
583
594
|
}
|
@@ -586,7 +597,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
586
597
|
if (target.toString().length === 0) {
|
587
598
|
return console.error('Target must be passed');
|
588
599
|
}
|
589
|
-
const call = this.
|
600
|
+
const call = this.extendedCalls[callId];
|
590
601
|
if (!call._is_confirmed && !call._is_canceled) {
|
591
602
|
const redirectTarget = `sip:${target}@${this.sipDomain}`;
|
592
603
|
call.terminate({
|
@@ -601,7 +612,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
601
612
|
this.updateCall(call);
|
602
613
|
}
|
603
614
|
callMerge(roomId) {
|
604
|
-
const callsInRoom = Object.values(this.
|
615
|
+
const callsInRoom = Object.values(this.extendedCalls).filter((call) => call.roomId === roomId);
|
605
616
|
if (callsInRoom.length !== 2)
|
606
617
|
return;
|
607
618
|
const firstCall = callsInRoom[0];
|
@@ -617,7 +628,8 @@ class OpenSIPSJS extends UA_1.default {
|
|
617
628
|
}
|
618
629
|
// TODO: Use this method in demo
|
619
630
|
setDND(value) {
|
620
|
-
this.
|
631
|
+
this.isDNDEnabled = value;
|
632
|
+
this.emit('changeIsDND', value);
|
621
633
|
}
|
622
634
|
_startCallTimer(callId) {
|
623
635
|
const timeData = {
|
@@ -629,7 +641,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
629
641
|
};
|
630
642
|
this.setCallTime(timeData);
|
631
643
|
const interval = setInterval(() => {
|
632
|
-
const callTime = Object.assign({}, this.
|
644
|
+
const callTime = Object.assign({}, this.callTime[callId]);
|
633
645
|
const updatedTime = (0, time_helper_1.setupTime)(callTime);
|
634
646
|
this.setCallTime(Object.assign({ callId }, updatedTime));
|
635
647
|
}, 1000);
|
@@ -647,23 +659,24 @@ class OpenSIPSJS extends UA_1.default {
|
|
647
659
|
});
|
648
660
|
}
|
649
661
|
getNewRoomId() {
|
650
|
-
const roomIdList = Object.keys(this.
|
662
|
+
const roomIdList = Object.keys(this.activeRooms);
|
651
663
|
if (roomIdList.length === 0) {
|
652
664
|
return 1;
|
653
665
|
}
|
654
666
|
return (parseInt(roomIdList.sort()[roomIdList.length - 1]) + 1);
|
655
667
|
}
|
656
668
|
subscribe(type, listener) {
|
657
|
-
const isListenerEmpty = !this.
|
658
|
-
const newListeners = isListenerEmpty ? [listener] : [...this.
|
659
|
-
this.
|
669
|
+
const isListenerEmpty = !this.listenersList[type] || !this.listenersList[type].length;
|
670
|
+
const newListeners = isListenerEmpty ? [listener] : [...this.listenersList[type], listener];
|
671
|
+
this.listenersList = Object.assign(Object.assign({}, this.listenersList), { [type]: newListeners });
|
660
672
|
}
|
661
673
|
removeIListener(value) {
|
662
|
-
const listenersCopy = Object.assign({}, this.
|
674
|
+
const listenersCopy = Object.assign({}, this.listenersList);
|
663
675
|
delete listenersCopy[value];
|
664
|
-
this.
|
676
|
+
this.listenersList = Object.assign({}, listenersCopy);
|
665
677
|
}
|
666
678
|
addCall(event) {
|
679
|
+
var _a, _b;
|
667
680
|
return __awaiter(this, void 0, void 0, function* () {
|
668
681
|
const session = event.session;
|
669
682
|
const sessionAlreadyInActiveCalls = this.getActiveCalls[session.id];
|
@@ -677,6 +690,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
677
690
|
roomId
|
678
691
|
};
|
679
692
|
if (session.direction === 'incoming') {
|
693
|
+
this.logger.log('New incoming call from', (_b = (_a = session._remote_identity) === null || _a === void 0 ? void 0 : _a._uri) === null || _b === void 0 ? void 0 : _b._user);
|
680
694
|
newRoomInfo.incomingInProgress = true;
|
681
695
|
this.subscribe(call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_CONFIRMED, (call) => {
|
682
696
|
if (session.id === call.id) {
|
@@ -720,8 +734,65 @@ class OpenSIPSJS extends UA_1.default {
|
|
720
734
|
}
|
721
735
|
});
|
722
736
|
}
|
737
|
+
addMessageSession(session) {
|
738
|
+
// For cases when session.direction === 'outgoing' and all the
|
739
|
+
// session properties are missing before answer
|
740
|
+
if (!session._id) {
|
741
|
+
return;
|
742
|
+
}
|
743
|
+
const sessionAlreadyInActiveMessages = this.getActiveMessages[session._id];
|
744
|
+
if (sessionAlreadyInActiveMessages !== undefined) {
|
745
|
+
return;
|
746
|
+
}
|
747
|
+
/*const roomId = this.getNewRoomId()
|
748
|
+
|
749
|
+
const newRoomInfo: IRoom = {
|
750
|
+
started: new Date(),
|
751
|
+
incomingInProgress: false,
|
752
|
+
roomId
|
753
|
+
}*/
|
754
|
+
/*if (session.direction === 'incoming') {
|
755
|
+
newRoomInfo.incomingInProgress = true
|
756
|
+
|
757
|
+
this.subscribe(CALL_EVENT_LISTENER_TYPE.CALL_CONFIRMED, (call) => {
|
758
|
+
if (session.id === call.id) {
|
759
|
+
this.updateRoom( {
|
760
|
+
incomingInProgress: false,
|
761
|
+
roomId
|
762
|
+
})
|
763
|
+
this._startCallTimer(session.id)
|
764
|
+
}
|
765
|
+
})
|
766
|
+
|
767
|
+
this.subscribe(CALL_EVENT_LISTENER_TYPE.CALL_FAILED, (call) => {
|
768
|
+
if (session.id === call.id) {
|
769
|
+
this.updateRoom({
|
770
|
+
incomingInProgress: false,
|
771
|
+
roomId
|
772
|
+
})
|
773
|
+
}
|
774
|
+
})
|
775
|
+
|
776
|
+
} else if (session.direction === 'outgoing') {
|
777
|
+
this._startCallTimer(session.id)
|
778
|
+
}*/
|
779
|
+
const MSRPSession = session;
|
780
|
+
//MSRPSession.roomId = roomId
|
781
|
+
this._addMMSRPSession(MSRPSession);
|
782
|
+
//this._addMMSRPSessionStatus(session.id)
|
783
|
+
//this._addRoom(newRoomInfo)
|
784
|
+
}
|
723
785
|
_triggerListener({ listenerType, session, event }) {
|
724
|
-
const listeners = this.
|
786
|
+
const listeners = this.listenersList[listenerType];
|
787
|
+
if (!listeners || !listeners.length) {
|
788
|
+
return;
|
789
|
+
}
|
790
|
+
listeners.forEach((listener) => {
|
791
|
+
listener(session, event);
|
792
|
+
});
|
793
|
+
}
|
794
|
+
_triggerMSRPListener({ listenerType, session, event }) {
|
795
|
+
const listeners = this.listenersList[listenerType];
|
725
796
|
if (!listeners || !listeners.length) {
|
726
797
|
return;
|
727
798
|
}
|
@@ -730,20 +801,35 @@ class OpenSIPSJS extends UA_1.default {
|
|
730
801
|
});
|
731
802
|
}
|
732
803
|
_removeCall(value) {
|
733
|
-
const stateActiveCallsCopy = Object.assign({}, this.
|
804
|
+
const stateActiveCallsCopy = Object.assign({}, this.activeCalls);
|
734
805
|
delete stateActiveCallsCopy[value];
|
735
806
|
// delete activeCalls[value]
|
736
|
-
this.
|
737
|
-
const stateExtendedCallsCopy = Object.assign({}, this.
|
807
|
+
this.activeCalls = Object.assign({}, stateActiveCallsCopy);
|
808
|
+
const stateExtendedCallsCopy = Object.assign({}, this.extendedCalls);
|
738
809
|
delete stateExtendedCallsCopy[value];
|
739
|
-
this.
|
740
|
-
this.emit('changeActiveCalls', this.
|
810
|
+
this.extendedCalls = Object.assign({}, stateExtendedCallsCopy);
|
811
|
+
this.emit('changeActiveCalls', this.activeCalls);
|
812
|
+
}
|
813
|
+
_removeMMSRPSession(value) {
|
814
|
+
const stateActiveMessagesCopy = Object.assign({}, this.activeMessages);
|
815
|
+
delete stateActiveMessagesCopy[value];
|
816
|
+
//delete activeMessages[value]
|
817
|
+
this.activeMessages = Object.assign({}, stateActiveMessagesCopy);
|
818
|
+
const stateExtendedMessagesCopy = Object.assign({}, this.extendedMessages);
|
819
|
+
delete stateExtendedMessagesCopy[value];
|
820
|
+
this.extendedMessages = Object.assign({}, stateExtendedMessagesCopy);
|
821
|
+
this.emit('changeActiveMessages', this.activeMessages);
|
741
822
|
}
|
742
823
|
_activeCallListRemove(call) {
|
743
|
-
const callRoomIdToConfigure = this.
|
824
|
+
const callRoomIdToConfigure = this.extendedCalls[call._id].roomId;
|
744
825
|
this._removeCall(call._id);
|
745
826
|
this.roomReconfigure(callRoomIdToConfigure);
|
746
827
|
}
|
828
|
+
_activeMessageListRemove(call) {
|
829
|
+
//const callRoomIdToConfigure = activeMessages[call._id].roomId
|
830
|
+
this._removeMMSRPSession(call._id);
|
831
|
+
//this.roomReconfigure(callRoomIdToConfigure)
|
832
|
+
}
|
747
833
|
newRTCSessionCallback(event) {
|
748
834
|
const session = event.session;
|
749
835
|
if (this.isDND) {
|
@@ -752,6 +838,8 @@ class OpenSIPSJS extends UA_1.default {
|
|
752
838
|
}
|
753
839
|
// stop timers on ended and failed
|
754
840
|
session.on('ended', (event) => {
|
841
|
+
var _a, _b;
|
842
|
+
this.logger.log('Session ended for', (_b = (_a = session._remote_identity) === null || _a === void 0 ? void 0 : _a._uri) === null || _b === void 0 ? void 0 : _b._user);
|
755
843
|
this._triggerListener({ listenerType: call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_ENDED, session, event });
|
756
844
|
const s = this.getActiveCalls[session.id];
|
757
845
|
if (s) {
|
@@ -760,14 +848,18 @@ class OpenSIPSJS extends UA_1.default {
|
|
760
848
|
this._stopCallTimer(session.id);
|
761
849
|
this._removeCallStatus(session.id);
|
762
850
|
this._removeCallMetrics(session.id);
|
763
|
-
if (!Object.keys(this.
|
764
|
-
this.
|
851
|
+
if (!Object.keys(this.extendedCalls).length) {
|
852
|
+
this.setIsMuted(false);
|
765
853
|
}
|
766
854
|
});
|
767
855
|
session.on('progress', (event) => {
|
856
|
+
var _a, _b;
|
857
|
+
this.logger.log('Session in progress for', (_b = (_a = session._remote_identity) === null || _a === void 0 ? void 0 : _a._uri) === null || _b === void 0 ? void 0 : _b._user);
|
768
858
|
this._triggerListener({ listenerType: call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_PROGRESS, session, event });
|
769
859
|
});
|
770
860
|
session.on('failed', (event) => {
|
861
|
+
var _a, _b;
|
862
|
+
this.logger.log('Session failed for', (_b = (_a = session._remote_identity) === null || _a === void 0 ? void 0 : _a._uri) === null || _b === void 0 ? void 0 : _b._user);
|
771
863
|
this._triggerListener({ listenerType: call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_FAILED, session, event });
|
772
864
|
if (session.id === this.callAddingInProgress) {
|
773
865
|
this.callAddingInProgress = undefined;
|
@@ -779,11 +871,13 @@ class OpenSIPSJS extends UA_1.default {
|
|
779
871
|
this._stopCallTimer(session.id);
|
780
872
|
this._removeCallStatus(session.id);
|
781
873
|
this._removeCallMetrics(session.id);
|
782
|
-
if (!Object.keys(this.
|
783
|
-
this.
|
874
|
+
if (!Object.keys(this.extendedCalls).length) {
|
875
|
+
this.setIsMuted(false);
|
784
876
|
}
|
785
877
|
});
|
786
878
|
session.on('confirmed', (event) => {
|
879
|
+
var _a, _b;
|
880
|
+
this.logger.log('Session confirmed for', (_b = (_a = session._remote_identity) === null || _a === void 0 ? void 0 : _a._uri) === null || _b === void 0 ? void 0 : _b._user);
|
787
881
|
this._triggerListener({ listenerType: call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_CONFIRMED, session, event });
|
788
882
|
this.updateCall(session);
|
789
883
|
if (session.id === this.callAddingInProgress) {
|
@@ -796,37 +890,145 @@ class OpenSIPSJS extends UA_1.default {
|
|
796
890
|
this.setCurrentActiveRoomId(roomId);
|
797
891
|
}
|
798
892
|
}
|
893
|
+
newMSRPSessionCallback(event) {
|
894
|
+
const session = event.session;
|
895
|
+
/*if (this.isDND) {
|
896
|
+
session.terminate({ status_code: 486, reason_phrase: 'Do Not Disturb' })
|
897
|
+
return
|
898
|
+
}*/
|
899
|
+
// stop timers on ended and failed
|
900
|
+
session.on('ended', (event) => {
|
901
|
+
this._triggerMSRPListener({ listenerType: call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_ENDED, session, event });
|
902
|
+
const s = this.getActiveMessages[session.id];
|
903
|
+
this._activeMessageListRemove(s);
|
904
|
+
//this._stopCallTimer(session.id)
|
905
|
+
//this._removeCallStatus(session.id)
|
906
|
+
//this._removeCallMetrics(session.id)
|
907
|
+
/*if (!Object.keys(activeMessages).length) {
|
908
|
+
this.isMuted = false
|
909
|
+
}*/
|
910
|
+
});
|
911
|
+
/*session.on('active', (event: Event) => {
|
912
|
+
console.log('event newMSRPSessionCallback active', session)
|
913
|
+
//this._triggerMSRPListener({ listenerType: CALL_EVENT_LISTENER_TYPE.CALL_PROGRESS, session, event })
|
914
|
+
})*/
|
915
|
+
session.on('failed', (event) => {
|
916
|
+
this._triggerMSRPListener({ listenerType: call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_FAILED, session, event });
|
917
|
+
/*if (session.id === this.callAddingInProgress) {
|
918
|
+
this.callAddingInProgress = undefined
|
919
|
+
}*/
|
920
|
+
// console.log(session, '0000000000000000000000000')
|
921
|
+
const s = this.getActiveMessages[session.id];
|
922
|
+
this._activeMessageListRemove(s);
|
923
|
+
//this._stopCallTimer(session.id)
|
924
|
+
//this._removeCallStatus(session.id)
|
925
|
+
//this._removeCallMetrics(session.id)
|
926
|
+
/*if (!Object.keys(activeMessages).length) {
|
927
|
+
this.isMuted = false
|
928
|
+
}*/
|
929
|
+
});
|
930
|
+
session.on('confirmed', (event) => {
|
931
|
+
this._triggerMSRPListener({ listenerType: call_event_listener_type_1.CALL_EVENT_LISTENER_TYPE.CALL_CONFIRMED, session, event });
|
932
|
+
this.updateMSRPSession(session);
|
933
|
+
/*if (session.id === this.callAddingInProgress) {
|
934
|
+
this.callAddingInProgress = undefined
|
935
|
+
}*/
|
936
|
+
});
|
937
|
+
session.on('newMessage', (msg) => {
|
938
|
+
this._addMSRPMessage(msg, session);
|
939
|
+
});
|
940
|
+
this.addMessageSession(session);
|
941
|
+
/*if (session.direction === 'outgoing') {
|
942
|
+
const roomId = this.getActiveMessages[session.id].roomId
|
943
|
+
this.setCurrentActiveRoomId(roomId)
|
944
|
+
}*/
|
945
|
+
}
|
799
946
|
setInitialized(value) {
|
800
947
|
this.initialized = value;
|
801
948
|
this.emit('ready', value);
|
802
949
|
}
|
803
|
-
|
950
|
+
begin() {
|
951
|
+
if (this.isConnected()) {
|
952
|
+
console.error('Connection is already established');
|
953
|
+
return;
|
954
|
+
}
|
804
955
|
this.on(this.registeredEventName, () => {
|
956
|
+
this.logger.log('Successfully registered to', this.options.socketInterfaces[0]);
|
805
957
|
this.setInitialized(true);
|
806
958
|
});
|
807
959
|
this.on(this.unregisteredEventName, () => {
|
960
|
+
this.logger.log('Unregistered from', this.options.socketInterfaces[0]);
|
808
961
|
this.setInitialized(false);
|
809
962
|
});
|
810
963
|
this.on(this.newRTCSessionEventName, this.newRTCSessionCallback.bind(this));
|
811
|
-
|
964
|
+
this.on(this.connectedEventName, () => {
|
965
|
+
this.logger.log('Connected to', this.options.socketInterfaces[0]);
|
966
|
+
this.isReconnecting = false;
|
967
|
+
});
|
968
|
+
this.on(this.disconnectedEventName, () => {
|
969
|
+
if (this.isReconnecting) {
|
970
|
+
return;
|
971
|
+
}
|
972
|
+
this.logger.log('Disconnected from', this.options.socketInterfaces[0]);
|
973
|
+
this.logger.log('Reconnecting to', this.options.socketInterfaces[0]);
|
974
|
+
this.isReconnecting = true;
|
975
|
+
this.stop();
|
976
|
+
this.setInitialized(false);
|
977
|
+
setTimeout(this.start.bind(this), 5000);
|
978
|
+
});
|
979
|
+
this.on(this.newMSRPSessionEventName, this.newMSRPSessionCallback.bind(this));
|
980
|
+
this.logger.log('Connecting to', this.options.socketInterfaces[0]);
|
981
|
+
this.start();
|
812
982
|
this.setMediaDevices(true);
|
813
983
|
return this;
|
814
984
|
}
|
815
985
|
setMuteWhenJoin(value) {
|
816
|
-
this.
|
986
|
+
this.muteWhenJoinEnabled = value;
|
987
|
+
this.emit('changeMuteWhenJoin', value);
|
988
|
+
}
|
989
|
+
setMicrophoneInputLevel(value) {
|
990
|
+
this.microphoneInputLevelValue = value;
|
991
|
+
this.roomReconfigure(this.currentActiveRoomId);
|
992
|
+
}
|
993
|
+
setSpeakerVolume(value) {
|
994
|
+
this.speakerVolumeValue = value;
|
995
|
+
Object.values(this.extendedCalls).forEach((call) => {
|
996
|
+
if (call.audioTag) {
|
997
|
+
call.audioTag.volume = value;
|
998
|
+
}
|
999
|
+
});
|
1000
|
+
}
|
1001
|
+
setAutoAnswer(value) {
|
1002
|
+
this.isAutoAnswer = value;
|
1003
|
+
}
|
1004
|
+
setSelectedInputDevice(deviceId) {
|
1005
|
+
localStorage.setItem(STORAGE_KEYS.SELECTED_INPUT_DEVICE, deviceId);
|
1006
|
+
this.selectedMediaDevices.input = deviceId;
|
1007
|
+
this.emit('changeActiveInputMediaDevice', deviceId);
|
1008
|
+
}
|
1009
|
+
setSelectedOutputDevice(deviceId) {
|
1010
|
+
localStorage.setItem(STORAGE_KEYS.SELECTED_OUTPUT_DEVICE, deviceId);
|
1011
|
+
this.selectedMediaDevices.output = deviceId;
|
1012
|
+
this.emit('changeActiveOutputMediaDevice', deviceId);
|
1013
|
+
}
|
1014
|
+
setIsMSRPInitializing(value) {
|
1015
|
+
this.isMSRPInitializingValue = value;
|
1016
|
+
this.emit('isMSRPInitializingChanged', value);
|
817
1017
|
}
|
818
1018
|
_setCallMetrics(value) {
|
819
1019
|
const metrics = Object.assign({}, value);
|
820
1020
|
delete metrics['callId'];
|
821
|
-
this.
|
1021
|
+
this.callMetrics = Object.assign(Object.assign({}, this.callMetrics), { [value.callId]: metrics });
|
1022
|
+
this.emit('changeCallMetrics', this.callMetrics);
|
822
1023
|
}
|
823
1024
|
_removeCallMetrics(callId) {
|
824
|
-
const callMetricsCopy = Object.assign({}, this.
|
1025
|
+
const callMetricsCopy = Object.assign({}, this.callMetrics);
|
825
1026
|
delete callMetricsCopy[callId];
|
826
|
-
this.
|
1027
|
+
this.callMetrics = Object.assign({}, callMetricsCopy);
|
1028
|
+
this.emit('changeCallMetrics', this.callMetrics);
|
827
1029
|
}
|
828
1030
|
_getCallQuality(call) {
|
829
|
-
const metrics = new metrics_1.default(this.
|
1031
|
+
const metrics = new metrics_1.default(this.metricConfig);
|
830
1032
|
const probe = metrics.createProbe(call.connection, {
|
831
1033
|
cid: call._id
|
832
1034
|
});
|
@@ -864,7 +1066,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
864
1066
|
}
|
865
1067
|
_triggerAddStream(event, call) {
|
866
1068
|
return __awaiter(this, void 0, void 0, function* () {
|
867
|
-
this.
|
1069
|
+
this.setIsMuted(this.muteWhenJoin);
|
868
1070
|
const stream = yield navigator.mediaDevices.getUserMedia(this.getUserMediaConstraints);
|
869
1071
|
const processedStream = (0, audio_helper_1.processAudioVolume)(stream, this.microphoneInputLevel);
|
870
1072
|
const muteMicro = this.isMuted || this.muteWhenJoin;
|
@@ -881,6 +1083,7 @@ class OpenSIPSJS extends UA_1.default {
|
|
881
1083
|
if (target.length === 0) {
|
882
1084
|
return console.error('Target must be a valid string');
|
883
1085
|
}
|
1086
|
+
this.logger.log(`Calling sip:${target}@${this.sipDomain}...`);
|
884
1087
|
const call = this.call(`sip:${target}@${this.sipDomain}`, this.sipOptions);
|
885
1088
|
this.callAddingInProgress = call.id;
|
886
1089
|
if (addToCurrentRoom && this.currentActiveRoomId !== undefined) {
|
@@ -893,10 +1096,37 @@ class OpenSIPSJS extends UA_1.default {
|
|
893
1096
|
this._triggerAddStream(event, call);
|
894
1097
|
});
|
895
1098
|
}
|
1099
|
+
initMSRP(target, body, options) {
|
1100
|
+
this.checkInitialized();
|
1101
|
+
if (target.length === 0) {
|
1102
|
+
return console.error('Target must be a valid string');
|
1103
|
+
}
|
1104
|
+
const session = this.startMSRP(target, options);
|
1105
|
+
session.on('active', () => {
|
1106
|
+
this.addMessageSession(session);
|
1107
|
+
session.sendMSRP(body);
|
1108
|
+
this.setIsMSRPInitializing(false);
|
1109
|
+
});
|
1110
|
+
this.setIsMSRPInitializing(true);
|
1111
|
+
// if (this.currentActiveRoomId !== undefined) {
|
1112
|
+
// this.callChangeRoom({
|
1113
|
+
// callId: call.id,
|
1114
|
+
// roomId: this.currentActiveRoomId
|
1115
|
+
// })
|
1116
|
+
// }
|
1117
|
+
//this.updateMSRPSession(session)
|
1118
|
+
}
|
1119
|
+
sendMSRP(msrpSessionId, body) {
|
1120
|
+
const msrpSession = this.extendedMessages[msrpSessionId];
|
1121
|
+
if (!msrpSession) {
|
1122
|
+
throw new Error(`MSRP session with id ${msrpSessionId} doesn't exist!`);
|
1123
|
+
}
|
1124
|
+
msrpSession.sendMSRP(body);
|
1125
|
+
}
|
896
1126
|
callChangeRoom({ callId, roomId }) {
|
897
1127
|
return __awaiter(this, void 0, void 0, function* () {
|
898
|
-
const oldRoomId = this.
|
899
|
-
this.
|
1128
|
+
const oldRoomId = this.extendedCalls[callId].roomId;
|
1129
|
+
this.extendedCalls[callId].roomId = roomId;
|
900
1130
|
yield this.setCurrentActiveRoomId(roomId);
|
901
1131
|
return Promise.all([
|
902
1132
|
this.roomReconfigure(oldRoomId),
|