@wazo/sdk 1.0.0-alpha.0 → 1.0.0-alpha.10
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/README.md +16 -7
- package/dist/wazo-sdk.js +6 -6
- package/esm/__tests__/__voice__/call.test.js +57 -2
- package/esm/__tests__/api-client.test.js +20 -1
- package/esm/api/auth.js +16 -2
- package/esm/checker/checks/webrtc.js +2 -2
- package/esm/domain/CallLog.js +2 -3
- package/esm/domain/Phone/CTIPhone.js +2 -2
- package/esm/domain/Phone/WebRTCPhone.js +64 -63
- package/esm/index.js +5 -1
- package/esm/service/CallApi.js +4 -4
- package/esm/simple/Auth.js +19 -15
- package/esm/simple/Phone.js +6 -5
- package/esm/simple/__tests__/Auth.test.js +8 -64
- package/esm/simple/index.js +2 -1
- package/esm/simple/room/Room.js +2 -2
- package/esm/simple/room/SipRoom.js +2 -2
- package/esm/state-machine/call-state-machine.js +2 -2
- package/esm/state-machine/softphone-state-machine.js +1 -2
- package/esm/state-machine/utils.js +8 -3
- package/esm/types/api/auth.d.ts +3 -0
- package/esm/types/api/auth.d.ts.map +1 -1
- package/esm/types/checker/checks/index.d.ts +1 -1
- package/esm/types/checker/checks/webrtc-transport.d.ts +2 -2
- package/esm/types/checker/checks/webrtc-transport.d.ts.map +1 -1
- package/esm/types/domain/CallLog.d.ts.map +1 -1
- package/esm/types/domain/CallSession.d.ts +3 -3
- package/esm/types/domain/CallSession.d.ts.map +1 -1
- package/esm/types/domain/Phone/CTIPhone.d.ts.map +1 -1
- package/esm/types/domain/Phone/WebRTCPhone.d.ts +22 -22
- package/esm/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
- package/esm/types/domain/types.d.ts +0 -4
- package/esm/types/domain/types.d.ts.map +1 -1
- package/esm/types/index.d.ts +5 -1
- package/esm/types/index.d.ts.map +1 -1
- package/esm/types/lib/WazoSessionDescriptionHandler.d.ts +3 -3
- package/esm/types/lib/WazoSessionDescriptionHandler.d.ts.map +1 -1
- package/esm/types/service/CallApi.d.ts +5 -5
- package/esm/types/service/CallApi.d.ts.map +1 -1
- package/esm/types/simple/Auth.d.ts +6 -1
- package/esm/types/simple/Auth.d.ts.map +1 -1
- package/esm/types/simple/Phone.d.ts +8 -8
- package/esm/types/simple/Phone.d.ts.map +1 -1
- package/esm/types/simple/index.d.ts +3 -1
- package/esm/types/simple/index.d.ts.map +1 -1
- package/esm/types/state-machine/softphone-state-machine.d.ts +1 -2
- package/esm/types/state-machine/softphone-state-machine.d.ts.map +1 -1
- package/esm/types/state-machine/utils.d.ts +2 -2
- package/esm/types/state-machine/utils.d.ts.map +1 -1
- package/esm/types/utils/api-requester.d.ts.map +1 -1
- package/esm/types/utils/sdp.d.ts +3 -2
- package/esm/types/utils/sdp.d.ts.map +1 -1
- package/esm/types/utils/webrtc.d.ts +1 -0
- package/esm/types/utils/webrtc.d.ts.map +1 -1
- package/esm/types/voice/call.d.ts +30 -12
- package/esm/types/voice/call.d.ts.map +1 -1
- package/esm/types/voice/softphone.d.ts +25 -13
- package/esm/types/voice/softphone.d.ts.map +1 -1
- package/esm/types/web-rtc-client.d.ts +39 -38
- package/esm/types/web-rtc-client.d.ts.map +1 -1
- package/esm/utils/__tests__/api-requester.test.js +17 -0
- package/esm/utils/api-requester.js +9 -1
- package/esm/utils/sdp.js +22 -9
- package/esm/utils/webrtc.js +24 -4
- package/esm/voice/call.js +130 -38
- package/esm/voice/softphone.js +145 -35
- package/esm/web-rtc-client.js +61 -58
- package/lib/__tests__/__voice__/call.test.js +56 -1
- package/lib/__tests__/api-client.test.js +20 -1
- package/lib/api/auth.js +16 -2
- package/lib/checker/checks/webrtc.js +1 -1
- package/lib/domain/CallLog.js +2 -3
- package/lib/domain/Phone/CTIPhone.js +2 -2
- package/lib/domain/Phone/WebRTCPhone.js +63 -62
- package/lib/index.js +11 -3
- package/lib/service/CallApi.js +2 -2
- package/lib/simple/Auth.js +21 -15
- package/lib/simple/Phone.js +3 -2
- package/lib/simple/__tests__/Auth.test.js +11 -64
- package/lib/simple/index.js +2 -1
- package/lib/simple/room/Room.js +1 -1
- package/lib/simple/room/SipRoom.js +1 -1
- package/lib/state-machine/call-state-machine.js +2 -2
- package/lib/state-machine/softphone-state-machine.js +1 -2
- package/lib/state-machine/utils.js +8 -3
- package/lib/types/api/auth.d.ts +3 -0
- package/lib/types/api/auth.d.ts.map +1 -1
- package/lib/types/checker/checks/index.d.ts +1 -1
- package/lib/types/checker/checks/webrtc-transport.d.ts +2 -2
- package/lib/types/checker/checks/webrtc-transport.d.ts.map +1 -1
- package/lib/types/domain/CallLog.d.ts.map +1 -1
- package/lib/types/domain/CallSession.d.ts +3 -3
- package/lib/types/domain/CallSession.d.ts.map +1 -1
- package/lib/types/domain/Phone/CTIPhone.d.ts.map +1 -1
- package/lib/types/domain/Phone/WebRTCPhone.d.ts +22 -22
- package/lib/types/domain/Phone/WebRTCPhone.d.ts.map +1 -1
- package/lib/types/domain/types.d.ts +0 -4
- package/lib/types/domain/types.d.ts.map +1 -1
- package/lib/types/index.d.ts +5 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/lib/WazoSessionDescriptionHandler.d.ts +3 -3
- package/lib/types/lib/WazoSessionDescriptionHandler.d.ts.map +1 -1
- package/lib/types/service/CallApi.d.ts +5 -5
- package/lib/types/service/CallApi.d.ts.map +1 -1
- package/lib/types/simple/Auth.d.ts +6 -1
- package/lib/types/simple/Auth.d.ts.map +1 -1
- package/lib/types/simple/Phone.d.ts +8 -8
- package/lib/types/simple/Phone.d.ts.map +1 -1
- package/lib/types/simple/index.d.ts +3 -1
- package/lib/types/simple/index.d.ts.map +1 -1
- package/lib/types/state-machine/softphone-state-machine.d.ts +1 -2
- package/lib/types/state-machine/softphone-state-machine.d.ts.map +1 -1
- package/lib/types/state-machine/utils.d.ts +2 -2
- package/lib/types/state-machine/utils.d.ts.map +1 -1
- package/lib/types/utils/api-requester.d.ts.map +1 -1
- package/lib/types/utils/sdp.d.ts +3 -2
- package/lib/types/utils/sdp.d.ts.map +1 -1
- package/lib/types/utils/webrtc.d.ts +1 -0
- package/lib/types/utils/webrtc.d.ts.map +1 -1
- package/lib/types/voice/call.d.ts +30 -12
- package/lib/types/voice/call.d.ts.map +1 -1
- package/lib/types/voice/softphone.d.ts +25 -13
- package/lib/types/voice/softphone.d.ts.map +1 -1
- package/lib/types/web-rtc-client.d.ts +39 -38
- package/lib/types/web-rtc-client.d.ts.map +1 -1
- package/lib/utils/__tests__/api-requester.test.js +17 -0
- package/lib/utils/api-requester.js +9 -1
- package/lib/utils/sdp.js +25 -10
- package/lib/utils/webrtc.js +25 -4
- package/lib/voice/call.js +131 -36
- package/lib/voice/softphone.js +150 -35
- package/lib/web-rtc-client.js +59 -57
- package/package.json +1 -1
- package/src/__tests__/__voice__/call.test.ts +63 -2
- package/src/__tests__/api-client.test.ts +22 -1
- package/src/api/auth.ts +30 -3
- package/src/checker/checks/webrtc-transport.ts +2 -2
- package/src/checker/checks/webrtc.ts +2 -2
- package/src/domain/CallLog.ts +2 -3
- package/src/domain/CallSession.ts +3 -3
- package/src/domain/Phone/CTIPhone.ts +3 -2
- package/src/domain/Phone/WebRTCPhone.ts +95 -93
- package/src/domain/types.ts +0 -5
- package/src/index.ts +6 -1
- package/src/lib/WazoSessionDescriptionHandler.ts +3 -3
- package/src/service/CallApi.ts +7 -7
- package/src/simple/Auth.ts +21 -16
- package/src/simple/Phone.ts +12 -11
- package/src/simple/__tests__/Auth.test.ts +9 -87
- package/src/simple/index.ts +2 -1
- package/src/simple/room/Room.ts +3 -3
- package/src/simple/room/SipRoom.ts +3 -3
- package/src/state-machine/call-state-machine.ts +2 -2
- package/src/state-machine/softphone-state-machine.ts +1 -2
- package/src/state-machine/utils.ts +12 -5
- package/src/utils/__tests__/api-requester.test.ts +20 -0
- package/src/utils/api-requester.ts +9 -1
- package/src/utils/sdp.ts +26 -11
- package/src/utils/webrtc.ts +27 -5
- package/src/voice/call.ts +169 -50
- package/src/voice/softphone.ts +180 -41
- package/src/web-rtc-client.ts +106 -99
package/lib/voice/call.js
CHANGED
|
@@ -35,20 +35,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.MESSAGE_TRACK_UPDATED = exports.MESSAGE_TYPE_SIGNAL = exports.MESSAGE_TYPE_CHAT = exports.
|
|
38
|
+
exports.MESSAGE_TRACK_UPDATED = exports.MESSAGE_TYPE_SIGNAL = exports.MESSAGE_TYPE_CHAT = exports.EVENT_CAMERA_DISABLED = exports.EVENT_CAMERA_RESUMED = exports.EVENT_WEB_RTC_STATS = exports.EVENT_SHARE_SCREEN_ENDED = exports.EVENT_SHARE_SCREEN_STARTED = exports.EVENT_SHARE_SCREEN_ENDING = exports.EVENT_REMOVE_STREAM = exports.EVENT_VIDEO_STREAM = exports.EVENT_AUDIO_STREAM = exports.EVENT_TRACK = exports.EVENT_REINVITE = exports.EVENT_CALL_RESUMED = exports.EVENT_CALL_HELD = exports.EVENT_CALL_UN_MUTED = exports.EVENT_CALL_MUTED = exports.EVENT_CALL_ENDED = exports.EVENT_CALL_TERMINATING = exports.EVENT_CALL_REJECTED = exports.EVENT_CALL_ERROR = exports.EVENT_EARLY_MEDIA = exports.EVENT_PROGRESS = exports.EVENT_CALL_CANCELED = exports.EVENT_CALL_LOCALLY_ACCEPTED = exports.EVENT_CALL_REMOTLY_ACCEPTED = void 0;
|
|
39
39
|
/* eslint-disable no-underscore-dangle */
|
|
40
40
|
const events_1 = require("events");
|
|
41
41
|
const xstate_1 = require("xstate");
|
|
42
42
|
const invitation_1 = require("sip.js/lib/api/invitation");
|
|
43
43
|
const session_state_1 = require("sip.js/lib/api/session-state");
|
|
44
44
|
const call_state_machine_1 = __importStar(require("../state-machine/call-state-machine"));
|
|
45
|
+
const new_from_1 = __importDefault(require("../utils/new-from"));
|
|
46
|
+
const update_from_1 = __importDefault(require("../utils/update-from"));
|
|
45
47
|
const IssueReporter_1 = __importDefault(require("../service/IssueReporter"));
|
|
48
|
+
const softphone_1 = __importDefault(require("./softphone"));
|
|
46
49
|
const sdp_1 = require("../utils/sdp");
|
|
47
50
|
const utils_1 = require("../state-machine/utils");
|
|
48
51
|
const webrtc_1 = require("../utils/webrtc");
|
|
49
52
|
const logger = IssueReporter_1.default.loggerFor('call');
|
|
50
53
|
// Events
|
|
51
|
-
exports.
|
|
54
|
+
exports.EVENT_CALL_REMOTLY_ACCEPTED = 'remotelyAccepted';
|
|
55
|
+
exports.EVENT_CALL_LOCALLY_ACCEPTED = 'locallyAccepted';
|
|
52
56
|
exports.EVENT_CALL_CANCELED = 'canceled';
|
|
53
57
|
exports.EVENT_PROGRESS = 'progress';
|
|
54
58
|
exports.EVENT_EARLY_MEDIA = 'earlyMedia';
|
|
@@ -71,20 +75,65 @@ exports.EVENT_SHARE_SCREEN_ENDED = 'onScreenShareEnded';
|
|
|
71
75
|
exports.EVENT_WEB_RTC_STATS = 'webRtcStats';
|
|
72
76
|
exports.EVENT_CAMERA_RESUMED = 'onCameraResumed';
|
|
73
77
|
exports.EVENT_CAMERA_DISABLED = 'onCameraDisabled';
|
|
74
|
-
exports.EVENT_TERMINATE_SOUND = 'terminateSound';
|
|
75
78
|
exports.MESSAGE_TYPE_CHAT = 'message/TYPE_CHAT';
|
|
76
79
|
exports.MESSAGE_TYPE_SIGNAL = 'message/TYPE_SIGNAL';
|
|
77
80
|
exports.MESSAGE_TRACK_UPDATED = 'onTrackUpdated';
|
|
78
81
|
class Call extends events_1.EventEmitter {
|
|
82
|
+
static newFrom(call) {
|
|
83
|
+
return (0, new_from_1.default)(call, Call);
|
|
84
|
+
}
|
|
85
|
+
static parseCall(apiCall) {
|
|
86
|
+
const sipCall = {
|
|
87
|
+
id: apiCall.sipCallId,
|
|
88
|
+
stateChange: {
|
|
89
|
+
addListener: () => { },
|
|
90
|
+
},
|
|
91
|
+
remoteIdentity: {
|
|
92
|
+
uri: {
|
|
93
|
+
_normal: {
|
|
94
|
+
user: apiCall.calleeNumber,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
// Mock sdk so `hasLocalVideo` will return true.
|
|
99
|
+
sessionDescriptionHandler: {
|
|
100
|
+
localMediaStream: {
|
|
101
|
+
getTracks: () => (apiCall.isVideo ? [{ kind: 'video', readyState: 'live' }] : []),
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
const call = new Call(sipCall, softphone_1.default);
|
|
106
|
+
call.apiId = apiCall.id;
|
|
107
|
+
call.answerTime = new Date(+apiCall.startingTime);
|
|
108
|
+
// Update call state
|
|
109
|
+
const snapshot = call.callActor.getSnapshot();
|
|
110
|
+
if (apiCall.isUp()) {
|
|
111
|
+
snapshot.value = { [call_state_machine_1.States.ESTABLISHED]: call_state_machine_1.EstablishedStates.ONGOING };
|
|
112
|
+
}
|
|
113
|
+
if (apiCall.muted) {
|
|
114
|
+
snapshot.value = { [call_state_machine_1.States.ESTABLISHED]: call_state_machine_1.EstablishedStates.MUTED };
|
|
115
|
+
}
|
|
116
|
+
if (apiCall.isRinging()) {
|
|
117
|
+
snapshot.value = call_state_machine_1.States.RINGING;
|
|
118
|
+
}
|
|
119
|
+
if (apiCall.isRecording()) {
|
|
120
|
+
call.recording = true;
|
|
121
|
+
}
|
|
122
|
+
// @ts-ignore
|
|
123
|
+
call.callActor.update(snapshot);
|
|
124
|
+
return call;
|
|
125
|
+
}
|
|
79
126
|
constructor(sipCall, phone) {
|
|
80
127
|
super();
|
|
81
128
|
this.shouldSendReinvite = false;
|
|
129
|
+
this.recording = false;
|
|
82
130
|
this.callActor = (0, xstate_1.createActor)(call_state_machine_1.default);
|
|
83
131
|
this.callActor.start();
|
|
84
132
|
this.creationTime = new Date();
|
|
85
133
|
this.phone = phone;
|
|
86
134
|
this.sipCall = sipCall;
|
|
87
|
-
this.
|
|
135
|
+
this.number = (0, sdp_1.getCallNumber)(sipCall);
|
|
136
|
+
this.displayName = (0, sdp_1.getCallDisplayName)(sipCall);
|
|
88
137
|
}
|
|
89
138
|
accept() {
|
|
90
139
|
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
@@ -96,6 +145,7 @@ class Call extends events_1.EventEmitter {
|
|
|
96
145
|
this.answerTime = new Date();
|
|
97
146
|
return this.phone.client.answer(this.sipCall, options.withCamera).then(() => {
|
|
98
147
|
logger.info('call - accepted', Object.assign({ id: this.id }, options));
|
|
148
|
+
this.emit(exports.EVENT_CALL_LOCALLY_ACCEPTED, this);
|
|
99
149
|
return this.id;
|
|
100
150
|
}).catch(e => {
|
|
101
151
|
logger.error(e);
|
|
@@ -108,18 +158,22 @@ class Call extends events_1.EventEmitter {
|
|
|
108
158
|
return __awaiter(this, void 0, void 0, function* () {
|
|
109
159
|
(0, utils_1.assertCan)(this.callActor, call_state_machine_1.Actions.REJECT);
|
|
110
160
|
logger.info('call - reject', { id: this.id });
|
|
111
|
-
this.
|
|
112
|
-
this.shouldSendReinvite = false;
|
|
113
|
-
return this.hangup();
|
|
161
|
+
return this._terminate();
|
|
114
162
|
});
|
|
115
163
|
}
|
|
116
164
|
hangup() {
|
|
117
165
|
return __awaiter(this, void 0, void 0, function* () {
|
|
118
166
|
(0, utils_1.assertCan)(this.callActor, call_state_machine_1.Actions.HANGUP);
|
|
119
167
|
logger.info('call - hangup', { id: this.id });
|
|
168
|
+
return this._terminate();
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
_terminate() {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
120
173
|
yield this.phone.client.hangup(this.sipCall);
|
|
174
|
+
this.shouldSendReinvite = false;
|
|
121
175
|
// Remove this call from softphone's calls
|
|
122
|
-
this.phone.
|
|
176
|
+
this.phone.onCallTerminated(this);
|
|
123
177
|
return true;
|
|
124
178
|
});
|
|
125
179
|
}
|
|
@@ -132,7 +186,7 @@ class Call extends events_1.EventEmitter {
|
|
|
132
186
|
logger.info('call - force cancel, error', e);
|
|
133
187
|
}
|
|
134
188
|
}
|
|
135
|
-
startConference(withCalls) {
|
|
189
|
+
startConference( /* withCalls: Call[] */) {
|
|
136
190
|
// @TODO
|
|
137
191
|
// const participants = [this, ...withCalls].reduce((acc: Record<string, any>, call: Call) => {
|
|
138
192
|
// acc[call.talkingToIds[0]] = call;
|
|
@@ -150,14 +204,14 @@ class Call extends events_1.EventEmitter {
|
|
|
150
204
|
logger.info('call - mute', { id: this.id });
|
|
151
205
|
this._sendAction(call_state_machine_1.EstablishedActions.MUTE);
|
|
152
206
|
this.phone.client.mute(this.sipCall);
|
|
153
|
-
this.
|
|
207
|
+
this.emit(exports.EVENT_CALL_MUTED);
|
|
154
208
|
}
|
|
155
209
|
unMute() {
|
|
156
210
|
(0, utils_1.assertCan)(this.callActor, call_state_machine_1.EstablishedActions.UN_MUTE);
|
|
157
211
|
logger.info('call - un-mute', { id: this.id });
|
|
158
212
|
this._sendAction(call_state_machine_1.EstablishedActions.UN_MUTE);
|
|
159
213
|
this.phone.client.unmute(this.sipCall);
|
|
160
|
-
this.
|
|
214
|
+
this.emit(exports.EVENT_CALL_UN_MUTED);
|
|
161
215
|
}
|
|
162
216
|
hold() {
|
|
163
217
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -174,7 +228,7 @@ class Call extends events_1.EventEmitter {
|
|
|
174
228
|
yield (0, webrtc_1.downgradeToAudio)(this.sipCall);
|
|
175
229
|
}
|
|
176
230
|
const promise = this.phone.client.hold(this.sipCall, this.isConference(), hasVideo);
|
|
177
|
-
this.
|
|
231
|
+
this.emit(exports.EVENT_CALL_HELD);
|
|
178
232
|
return promise;
|
|
179
233
|
});
|
|
180
234
|
}
|
|
@@ -203,7 +257,7 @@ class Call extends events_1.EventEmitter {
|
|
|
203
257
|
this._onScreenSharing(stream, hadVideo, wasDesktop);
|
|
204
258
|
}
|
|
205
259
|
};
|
|
206
|
-
this.
|
|
260
|
+
this.emit(exports.EVENT_CALL_RESUMED);
|
|
207
261
|
return promise.then(() => {
|
|
208
262
|
const stream = this.getLocalVideoStream();
|
|
209
263
|
if (wasScreensharing) {
|
|
@@ -217,19 +271,37 @@ class Call extends events_1.EventEmitter {
|
|
|
217
271
|
(0, utils_1.assertState)(this.callActor, call_state_machine_1.States.ESTABLISHED);
|
|
218
272
|
logger.info('call - turn camera on', { id: this.id });
|
|
219
273
|
(0, webrtc_1.toggleVideo)(this.sipCall, true);
|
|
220
|
-
this.
|
|
274
|
+
this.emit(exports.EVENT_CAMERA_RESUMED);
|
|
221
275
|
}
|
|
222
276
|
turnCameraOff() {
|
|
223
277
|
(0, utils_1.assertState)(this.callActor, call_state_machine_1.States.ESTABLISHED);
|
|
224
278
|
logger.info('call - turn camera off', { id: this.id });
|
|
225
279
|
(0, webrtc_1.toggleVideo)(this.sipCall, false);
|
|
226
|
-
this.
|
|
280
|
+
this.emit(exports.EVENT_CAMERA_DISABLED);
|
|
281
|
+
}
|
|
282
|
+
isMuted() {
|
|
283
|
+
return this._hasEstablishedState(call_state_machine_1.EstablishedStates.MUTED);
|
|
284
|
+
}
|
|
285
|
+
isCameraMuted() {
|
|
286
|
+
return (0, webrtc_1.isVideoMuted)(this.sipCall);
|
|
227
287
|
}
|
|
228
288
|
isHeld() {
|
|
229
|
-
return
|
|
289
|
+
return this._hasEstablishedState(call_state_machine_1.EstablishedStates.HELD);
|
|
290
|
+
}
|
|
291
|
+
isEstablishing() {
|
|
292
|
+
return this.sipCall.state === session_state_1.SessionState.Establishing;
|
|
230
293
|
}
|
|
231
294
|
isEstablished() {
|
|
232
|
-
return
|
|
295
|
+
return typeof this.state === 'object' && call_state_machine_1.States.ESTABLISHED in this.state;
|
|
296
|
+
}
|
|
297
|
+
isRinging() {
|
|
298
|
+
return this.state === call_state_machine_1.States.RINGING;
|
|
299
|
+
}
|
|
300
|
+
isOutgoing() {
|
|
301
|
+
return this.sipCall instanceof invitation_1.Invitation;
|
|
302
|
+
}
|
|
303
|
+
isIncoming() {
|
|
304
|
+
return !this.isOutgoing();
|
|
233
305
|
}
|
|
234
306
|
isConference() {
|
|
235
307
|
var _a;
|
|
@@ -238,7 +310,7 @@ class Call extends events_1.EventEmitter {
|
|
|
238
310
|
transfer(target) {
|
|
239
311
|
(0, utils_1.assertState)(this.callActor, call_state_machine_1.States.ESTABLISHED);
|
|
240
312
|
logger.info('call - transfer', { id: this.id, target });
|
|
241
|
-
this.phone.client.transfer(this.sipCall, target);
|
|
313
|
+
return this.phone.client.transfer(this.sipCall, target);
|
|
242
314
|
}
|
|
243
315
|
atxfer() {
|
|
244
316
|
(0, utils_1.assertState)(this.callActor, call_state_machine_1.States.ESTABLISHED);
|
|
@@ -366,7 +438,7 @@ class Call extends events_1.EventEmitter {
|
|
|
366
438
|
catch (e) {
|
|
367
439
|
console.warn(e);
|
|
368
440
|
}
|
|
369
|
-
this.
|
|
441
|
+
this.emit(exports.EVENT_SHARE_SCREEN_ENDED);
|
|
370
442
|
this.currentScreenShare = null;
|
|
371
443
|
return reinvited;
|
|
372
444
|
});
|
|
@@ -376,9 +448,13 @@ class Call extends events_1.EventEmitter {
|
|
|
376
448
|
logger.info('call - updrading directly in screensharing mode', { id: this.id, tracks: localStream === null || localStream === void 0 ? void 0 : localStream.getTracks() });
|
|
377
449
|
this._onScreenSharing(localStream, false, desktop);
|
|
378
450
|
}
|
|
451
|
+
onMakeCall() {
|
|
452
|
+
this._bindEvents();
|
|
453
|
+
this._sendAction(call_state_machine_1.Actions.MAKE_CALL);
|
|
454
|
+
}
|
|
379
455
|
onAccepted() {
|
|
380
456
|
this._sendAction(call_state_machine_1.Actions.REMOTLY_ACCEPTED);
|
|
381
|
-
this.emit(exports.
|
|
457
|
+
this.emit(exports.EVENT_CALL_REMOTLY_ACCEPTED);
|
|
382
458
|
}
|
|
383
459
|
onProgress() {
|
|
384
460
|
this.emit(exports.EVENT_PROGRESS);
|
|
@@ -392,10 +468,14 @@ class Call extends events_1.EventEmitter {
|
|
|
392
468
|
onError(error) {
|
|
393
469
|
this.emit(exports.EVENT_CALL_ERROR, error);
|
|
394
470
|
}
|
|
471
|
+
onCallIncoming() {
|
|
472
|
+
this._bindEvents();
|
|
473
|
+
this._sendAction(call_state_machine_1.Actions.INCOMING_CALL);
|
|
474
|
+
}
|
|
395
475
|
onRejected() {
|
|
396
476
|
this.endTime = new Date();
|
|
397
477
|
this.emit(exports.EVENT_CALL_REJECTED);
|
|
398
|
-
this.phone.
|
|
478
|
+
this.phone.onCallTerminated(this);
|
|
399
479
|
}
|
|
400
480
|
onNetworkStats(stats, previousStats) {
|
|
401
481
|
this.emit(exports.EVENT_WEB_RTC_STATS, stats, previousStats);
|
|
@@ -427,15 +507,28 @@ class Call extends events_1.EventEmitter {
|
|
|
427
507
|
onReinvite(request, updatedCalleeName, updatedNumber, hadRemoteVideo) {
|
|
428
508
|
this.emit(exports.EVENT_REINVITE, request, updatedCalleeName, updatedNumber, hadRemoteVideo);
|
|
429
509
|
}
|
|
510
|
+
updateFrom(call) {
|
|
511
|
+
(0, update_from_1.default)(this, call);
|
|
512
|
+
}
|
|
513
|
+
is(otherCall) {
|
|
514
|
+
return otherCall && this.id && this.id === otherCall.id;
|
|
515
|
+
}
|
|
516
|
+
shouldAutoAnswer() {
|
|
517
|
+
var _a;
|
|
518
|
+
return !!((_a = this.sipCall.request) === null || _a === void 0 ? void 0 : _a.getHeader('alert-info'));
|
|
519
|
+
}
|
|
430
520
|
get id() {
|
|
431
|
-
return (0, sdp_1.
|
|
521
|
+
return (0, sdp_1.getSipCallId)(this.sipCall);
|
|
522
|
+
}
|
|
523
|
+
get state() {
|
|
524
|
+
return (0, utils_1.getState)(this.callActor);
|
|
432
525
|
}
|
|
433
|
-
|
|
434
|
-
const
|
|
435
|
-
|
|
436
|
-
return identity ? identity.uri._normal.user : null;
|
|
526
|
+
_hasEstablishedState(establishedState) {
|
|
527
|
+
const state = this.state;
|
|
528
|
+
return typeof state === 'object' && call_state_machine_1.States.ESTABLISHED in state && state[call_state_machine_1.States.ESTABLISHED] === establishedState;
|
|
437
529
|
}
|
|
438
530
|
_bindEvents() {
|
|
531
|
+
var _a, _b;
|
|
439
532
|
if (this.sipCall instanceof invitation_1.Invitation) {
|
|
440
533
|
// Monkey patch to know when canceled with the CANCEL message
|
|
441
534
|
const onCancel = this.sipCall._onCancel.bind(this.sipCall);
|
|
@@ -443,21 +536,22 @@ class Call extends events_1.EventEmitter {
|
|
|
443
536
|
logger.trace('call - on sip session canceled', { callId: message.callId, id: this.id });
|
|
444
537
|
onCancel(message);
|
|
445
538
|
const elsewhere = message.data.indexOf('cause=26') !== -1 && message.data.indexOf('completed elsewhere') !== -1;
|
|
446
|
-
this.
|
|
539
|
+
this.emit(exports.EVENT_CALL_CANCELED, elsewhere);
|
|
447
540
|
};
|
|
448
541
|
}
|
|
449
|
-
this.sipCall.stateChange.addListener((newState) => {
|
|
542
|
+
(_b = (_a = this.sipCall) === null || _a === void 0 ? void 0 : _a.stateChange) === null || _b === void 0 ? void 0 : _b.addListener((newState) => {
|
|
450
543
|
switch (newState) {
|
|
451
544
|
case session_state_1.SessionState.Terminating:
|
|
452
545
|
logger.info('call - terminating', { id: this.id });
|
|
453
|
-
this.
|
|
546
|
+
this.emit(exports.EVENT_CALL_TERMINATING);
|
|
454
547
|
break;
|
|
455
548
|
case session_state_1.SessionState.Terminated:
|
|
456
549
|
{
|
|
457
550
|
logger.info('call - terminated', { id: this.id });
|
|
458
551
|
// Should be called before `_onCallTerminated` or the callCount will not decrement...
|
|
459
552
|
this.endTime = new Date();
|
|
460
|
-
|
|
553
|
+
this.emit(exports.EVENT_CALL_ENDED);
|
|
554
|
+
return this.phone.onCallTerminated(this);
|
|
461
555
|
}
|
|
462
556
|
default:
|
|
463
557
|
break;
|
|
@@ -484,18 +578,17 @@ class Call extends events_1.EventEmitter {
|
|
|
484
578
|
kind,
|
|
485
579
|
});
|
|
486
580
|
if (kind === 'audio') {
|
|
487
|
-
return this.
|
|
581
|
+
return this.emit(exports.EVENT_AUDIO_STREAM, stream);
|
|
488
582
|
}
|
|
489
|
-
return this.
|
|
583
|
+
return this.emit(exports.EVENT_VIDEO_STREAM, stream, event.track.id, event);
|
|
490
584
|
};
|
|
491
585
|
peerConnection.onremovestream = (event) => {
|
|
492
586
|
logger.info('call - on remove stream called on the peer connection', {
|
|
493
587
|
id: event.stream.id,
|
|
494
588
|
tracks: event.stream.getTracks(),
|
|
495
589
|
});
|
|
496
|
-
this.
|
|
590
|
+
this.emit(exports.EVENT_REMOVE_STREAM, event.stream);
|
|
497
591
|
};
|
|
498
|
-
// Client events
|
|
499
592
|
}
|
|
500
593
|
_downgradeToAudio(withMessage = true) {
|
|
501
594
|
(0, utils_1.assertState)(this.callActor, call_state_machine_1.States.ESTABLISHED);
|
|
@@ -558,7 +651,7 @@ class Call extends events_1.EventEmitter {
|
|
|
558
651
|
if (screenTrack) {
|
|
559
652
|
screenTrack.onended = () => {
|
|
560
653
|
logger.info('call - on screenshare ended', { hadVideo, id: this.id, screenTrack });
|
|
561
|
-
this.
|
|
654
|
+
this.emit(exports.EVENT_SHARE_SCREEN_ENDING);
|
|
562
655
|
};
|
|
563
656
|
}
|
|
564
657
|
this.currentScreenShare = {
|
|
@@ -568,10 +661,12 @@ class Call extends events_1.EventEmitter {
|
|
|
568
661
|
desktop,
|
|
569
662
|
};
|
|
570
663
|
(0, webrtc_1.setLocalMediaStream)(this.sipCall, screenStream);
|
|
571
|
-
this.
|
|
664
|
+
this.emit(exports.EVENT_SHARE_SCREEN_STARTED, screenStream);
|
|
572
665
|
}
|
|
573
666
|
_sendAction(action) {
|
|
667
|
+
const was = this.state;
|
|
574
668
|
this.callActor.send({ type: action });
|
|
669
|
+
logger.trace('call - send action', { action, was, state: this.state });
|
|
575
670
|
}
|
|
576
671
|
}
|
|
577
672
|
exports.default = Call;
|