podchat-browser
Version:
Javascript SDK to use POD's Chat Service - Browser Only
1,393 lines (1,202 loc) • 52.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _callUsers = _interopRequireDefault(require("./callUsers"));
var _utility = _interopRequireDefault(require("../../utility/utility"));
var _callServerManager = _interopRequireDefault(require("./callServerManager"));
var _constants = require("../constants");
var _errorHandler = require("../errorHandler");
var _screenShareStateManager = _interopRequireDefault(require("./screenShareStateManager"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function CallManager(_ref) {
var app = _ref.app,
callId = _ref.callId,
callConfig = _ref.callConfig;
var config = {
callId: callId,
callConfig: callConfig,
users: new _callUsers["default"]({
app: app,
callId: callId
}),
callServerController: new _callServerManager["default"](app),
screenShareInfo: new _screenShareStateManager["default"](app),
onChatReadyUniqueId: null,
failedPeersQueue: [],
inquiryCallCounter: 0,
isDestroyed: false
};
function reconnectFailedPeers() {
while (config.failedPeersQueue.length) {
var topic = config.failedPeersQueue.shift();
topic.shouldReconnectTopic();
}
}
function canReconnect() {
return config.failedPeersQueue.length && app.callsManager.currentCallId() == config.callId;
}
function socketConnectListener() {
if (!config.inquiryCallCounter) {
var dataChangeDetected = false;
config.inquiryCallCounter++;
setTimeout(function () {
config.inquiryCallCounter = 0;
if (!config.isDestroyed && canReconnect()) {
socketConnectListener();
}
}, 9000);
canReconnect() && app.call.inquiryCallParticipants.inquiryCallParticipants({}, /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(result) {
var _result$result, _result$result2, serverUsers, serverUserIds, screenOwnerChatId, _callId;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (result.hasError) {
_context.next = 24;
break;
}
if ((_result$result = result.result) !== null && _result$result !== void 0 && _result$result.callParticipantVOs && result.result.callParticipantVOs.length) {
serverUsers = (_result$result2 = result.result) === null || _result$result2 === void 0 ? void 0 : _result$result2.callParticipantVOs; //Sync local users with server users
serverUsers.forEach(function (item) {
if (!config.users.userExists(item.userId)) {
config.users.addItem({
clientId: item.participantVO.ssoId,
topicSend: item.sendTopic,
mute: item.mute,
video: item.video,
userId: item.userId,
callId: config.callId,
cameraPaused: false,
brokerAddress: config.callConfig.brokerAddress
});
dataChangeDetected = true;
}
});
serverUserIds = serverUsers.map(function (item) {
return item.userId;
});
Object.keys(config.users.getAll()).forEach(function (key) {
if (!serverUserIds.includes(Number(key)) && key != 'screenShare') {
config.users.removeItem(key);
}
dataChangeDetected = true;
});
} //TODO: IT gives screenShareUser client id instead of its chat user id,
// It might needs change in future
if (!Number(result.result.screenShareUser)) {
_context.next = 16;
break;
}
screenOwnerChatId = config.users.findUserIdByClientId(Number(result.result.screenShareUser));
callConfig.screenShareOwner = screenOwnerChatId;
config.screenShareInfo.setOwner(callConfig.screenShareOwner);
config.screenShareInfo.setIsStarted(true); // if (config.screenShareInfo.isStarted()) {
config.callConfig.screenShareObject.clientId = Number(result.result.screenShareUser);
config.callConfig.screenShareObject.brokerAddress = config.callConfig.brokerAddress; // config.screenShareInfo.setOwner(config.callConfig.screenShareOwner);
// }
if (!config.users.userExists('screenShare')) {
_context.next = 13;
break;
}
_context.next = 12;
return config.users.removeItem('screenShare');
case 12:
dataChangeDetected = true;
case 13:
config.users.addItem(config.callConfig.screenShareObject, "screenShare");
_context.next = 20;
break;
case 16:
if (!config.users.userExists('screenShare')) {
_context.next = 20;
break;
}
_context.next = 19;
return config.users.removeItem('screenShare');
case 19:
dataChangeDetected = true;
case 20:
if (Number(result.result.recordingUser)) {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_RECORDING_STARTED',
callId: config.callId,
result: {
id: result.result.recordingUser
}
});
} else if (config.callConfig.recordingOwner) {
app.chatEvents.fireEvent('callEvents', {
type: 'STOP_RECORDING_CALL',
callId: config.callId,
result: {
id: config.callConfig.recordingOwner
}
});
}
setTimeout(function () {
config.isReconnecting = true;
reconnectFailedPeers();
}, 500);
_context.next = 25;
break;
case 24:
if (result.errorCode == 171) {
_callId = config.callId;
app.call.endCall({
callId: config.callId
}, null);
app.callsManager.removeItem(config.callId);
app.chatEvents.fireEvent('callEvents', {
type: 'YOU_DROPPED_FROM_CALL',
callId: _callId,
result: {
callId: _callId,
userId: app.store.user.get().id
}
});
} else if (result.errorCode == 163) {
app.call.endCall({
callId: config.callId
}, null);
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ENDED',
callId: config.callId
});
app.callsManager.removeItem(config.callId);
} else if (result.errorCode == 160) {
app.call.endCall({
callId: config.callId
}, null);
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ENDED',
callId: config.callId
});
app.callsManager.removeItem(config.callId);
}
case 25:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}());
}
}
function startCallWebRTCFunctions(callConfig) {
config.onChatReadyUniqueId = app.chatEvents.on('chatReady', socketConnectListener);
config.callServerController.setServers(callConfig.kurentoAddress); // if (app.call.sharedVariables.callDivId) {
new Promise(function (resolve) {
var callVideo = typeof callConfig.video === 'boolean' ? callConfig.video : true,
callMute = typeof callConfig.mute === 'boolean' ? callConfig.mute : false;
if (callConfig.selfData) {
callConfig.selfData.callId = config.callId;
callConfig.selfData.cameraPaused = callConfig.cameraPaused;
config.users.addItem(callConfig.selfData); // callStateController.setupCallParticipant(params.selfData);
}
config.screenShareInfo.setOwner(callConfig.screenShareOwner);
config.screenShareInfo.setIsStarted(!!callConfig.screenShareOwner);
if (callConfig.recordingOwner) {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_RECORDING_STARTED',
callId: config.callId,
result: {
id: callConfig.recordingOwner
}
});
if (config.users.get(app.store.user.get().id).user().video) {
config.users.get(app.store.user.get().id).videoTopicManager().restartMediaOnKeyFrame(app.store.user.get().id, [4000, 12000, 16000, 24000]);
}
}
if (callConfig.clientsList && callConfig.clientsList.length) {
for (var i in callConfig.clientsList) {
if (callConfig.clientsList[i].userId !== app.store.user.get().id) {
callConfig.clientsList[i].callId = config.callId;
callConfig.clientsList[i].cameraPaused = false;
config.users.addItem(callConfig.clientsList[i]);
}
}
}
config.callConfig.screenShareObject = {
callId: config.callId,
cameraPaused: false,
userId: "screenShare",
topicSend: callConfig.screenShare
};
config.screenShareInfo.setIsStarted(!!config.callConfig.screenShareOwner);
if (config.screenShareInfo.isStarted()) {
config.screenShareInfo.setOwner(config.callConfig.screenShareOwner);
config.users.addItem(config.callConfig.screenShareObject, "screenShare");
}
config.callConfig.callVideo = callVideo;
config.callConfig.callAudio = callMute;
createSessionInChat();
resolve();
}).then(function () {
app.call.currentCall().sendCallDivs();
}); //
// } else {
// app.sdkParams.consoleLogging && console.log('No Call DIV has been declared!');
// }
}
function createSessionInChat() {
app.call.callStopQueue.callStarted = true;
var message = {
id: 'CREATE_SESSION',
brokerAddress: config.callConfig.brokerAddress,
turnAddress: config.callConfig.turnAddress.split(',')[0]
},
onResultCallback = function onResultCallback(res) {
if (res.done === 'TRUE') {
app.call.callStopQueue.callStarted = true; // callController.startCall(params);
} else {
app.callsManager.removeItem(config.callId); // endCall({callId: config.callId});
// callStop(true, true);
}
};
sendCallMessage(message, onResultCallback, {
timeoutTime: 4000,
timeoutRetriesCount: 5
});
}
function callStop() {
return _callStop.apply(this, arguments);
}
function _callStop() {
_callStop = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7() {
var resetCurrentCallId,
resetCameraPaused,
_args9 = arguments;
return _regenerator["default"].wrap(function _callee7$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
resetCurrentCallId = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : true;
resetCameraPaused = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : true;
_context9.next = 4;
return config.users.destroy();
case 4:
if (app.call.callStopQueue.callStarted) {
sendCallMessage({
id: 'CLOSE'
}, null, {});
app.call.callStopQueue.callStarted = false;
}
if (resetCameraPaused) app.call.joinCallParams.cameraPaused = false;
clearTimeout(config.callRequestTimeout);
config.callConfig = {};
if (resetCurrentCallId) config.callId = null;
case 9:
case "end":
return _context9.stop();
}
}
}, _callee7);
}));
return _callStop.apply(this, arguments);
}
function sendCallMessage(message, callback, _ref3) {
var _ref3$timeoutTime = _ref3.timeoutTime,
timeoutTime = _ref3$timeoutTime === void 0 ? 0 : _ref3$timeoutTime,
_ref3$timeoutRetriesC = _ref3.timeoutRetriesCount,
timeoutRetriesCount = _ref3$timeoutRetriesC === void 0 ? 0 : _ref3$timeoutRetriesC;
message.token = app.sdkParams.token; // let uniqueId;
if (!message.uniqueId) {
message.uniqueId = _utility["default"].generateUUID();
} // message.uniqueId = uniqueId;
message.chatId = config.callId;
var data = {
type: 3,
content: {
peerName: config.callServerController.getCurrentServer(),
// callServerName,
priority: 1,
content: JSON.stringify(message),
ttl: app.sdkParams.messageTtl
},
uniqueId: message.uniqueId
};
if (typeof callback == 'function') {
app.store.messagesCallbacks[message.uniqueId] = callback;
}
app.call.sharedVariables.asyncClient.send(data, function (res) {});
if (timeoutTime || app.call.sharedVariables.globalCallRequestTimeout > 0) {
app.store.asyncRequestTimeouts[message.uniqueId] && clearTimeout(app.store.asyncRequestTimeouts[message.uniqueId]);
app.store.asyncRequestTimeouts[message.uniqueId] = setTimeout(function () {
if (app.store.messagesCallbacks[message.uniqueId]) {
delete app.store.messagesCallbacks[message.uniqueId];
}
if (timeoutRetriesCount) {
app.logger.warn(app.logger.tags.CALL_SERVER_MESSAGE.id, "[sendCallMessage] ", {
msg: " Retrying call request. uniqueId: " + message.uniqueId,
message: message
}); // app.sdkParams.consoleLogging && console.log("[SDK][sendCallMessage] Retrying call request. uniqueId :" + message.uniqueId, {message})
sendCallMessage(message, callback, {
timeoutTime: timeoutTime,
timeoutRetriesCount: timeoutRetriesCount - 1
});
} else if (typeof callback == 'function') {
/**
* Request failed
*/
callback({
done: 'SKIP'
});
}
}, timeoutTime || app.call.sharedVariables.globalCallRequestTimeout);
}
}
function subscribeToReceiveOffers(jsonMessage) {
if (jsonMessage.upOrDown === true) {
//TRUE if participant is sending data on this topic
sendCallMessage({
id: 'SUBSCRIBE',
useComedia: true,
useSrtp: false,
topic: jsonMessage.topic,
mediaType: jsonMessage.topic.indexOf('screen-Share') !== -1 || jsonMessage.topic.indexOf('Vi-') !== -1 ? 2 : 1 //brokerAddress:brkrAddr
}, null, {
timeoutTime: 4000,
timeoutRetriesCount: 5
});
}
}
function handleProcessSdpOffer(jsonMessage) {
var userId = config.users.findUserIdByTopic(jsonMessage.topic),
topicManager,
peer; //callUsers[userId].peers[jsonMessage.topic];
if (!userId) {
console.warn("[SDK] Skipping PROCESS_SDP_OFFER, topic not exists.", {
jsonMessage: jsonMessage
});
return;
}
var userObj = config.users.get(userId);
if (jsonMessage.topic.indexOf('Vi-') !== -1 || jsonMessage.topic.indexOf('screen-Share') !== -1) {
topicManager = config.users.get(userId).videoTopicManager();
peer = topicManager.videoTopicManager().getPeer();
} else if (jsonMessage.topic.indexOf('Vo-') !== -1) {
topicManager = config.users.get(userId).audioTopicManager();
peer = topicManager.audioTopicManager().getPeer();
}
if (peer == null) {
console.warn("[handleProcessSdpAnswer] Skip, no WebRTC Peer");
return;
}
peer.processOffer(jsonMessage.sdpOffer, function (err, sdpAnswer) {
if (err) {
console.error("[SDK][handleProcessSdpOffer] Error: " + err);
stop();
return;
}
sendCallMessage({
id: 'RECIVE_SDP_ANSWER',
sdpAnswer: sdpAnswer,
useComedia: true,
useSrtp: false,
topic: jsonMessage.topic,
mediaType: jsonMessage.topic.indexOf('screen-Share') !== -1 || jsonMessage.topic.indexOf('Vi-') !== -1 ? 2 : 1
}, null, {
timeoutTime: 4000,
timeoutRetriesCount: 5
});
topicManager.topicMetaData().sdpAnswerReceived = true; // topicManager.startMedia()
// if (userObj.isScreenShare() || userObj.isMe()) {
// topicManager.restartMediaOnKeyFrame(userId, [2000, 4000, 8000, 12000]);
// }
});
}
function handleProcessSdpAnswer(jsonMessage) {
var userId = config.users.findUserIdByTopic(jsonMessage.topic),
topicManager,
peer; // = callUsers[userId].peers[jsonMessage.topic];
if (!userId) {
console.warn("[SDK] Skipping PROCESS_SDP_ANSWER, topic not exists. ", {
jsonMessage: jsonMessage
});
return;
}
var userObj = config.users.get(userId);
if (jsonMessage.topic.indexOf('Vi-') !== -1 || jsonMessage.topic.indexOf('screen-Share') !== -1) {
topicManager = userObj.videoTopicManager();
} else if (jsonMessage.topic.indexOf('Vo-') !== -1) {
topicManager = userObj.audioTopicManager();
}
if (!topicManager) return;
peer = topicManager.getPeer();
if (peer == null) {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ERROR',
callId: config.callId,
code: 7000,
message: "[handleProcessSdpAnswer] Skip, no WebRTC Peer",
error: peer,
environmentDetails: getCallDetails()
});
return;
}
peer.processAnswer(jsonMessage.sdpAnswer, function (err) {
if (err) {
sendCallSocketError("[handleProcessSdpAnswer] Error: " + err);
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ERROR',
callId: config.callId,
code: 7000,
message: "[handleProcessSdpAnswer] Error: " + err,
environmentDetails: getCallDetails()
});
return;
}
app.sdkParams.consoleLogging && console.log("[SDK][handleProcessSdpAnswer]", jsonMessage, jsonMessage.topic, topicManager.metadata().isIceCandidateIntervalSet().toString());
if (topicManager.metadata().isIceCandidateIntervalSet()) {
topicManager.topicMetaData().sdpAnswerReceived = true; // topicManager.startMedia()
// if (userId == 'screenShare' || userId == app.store.user.get().id) {
// topicManager.restartMediaOnKeyFrame(userId, [2000, 4000, 8000, 12000, 20000]);
// }
}
});
}
function handleAddIceCandidate(jsonMessage) {
var userId = config.users.findUserIdByTopic(jsonMessage.topic);
if (!userId) {
console.warn("[SDK] Skipping ADD_ICE_CANDIDATE, topic not exists.", {
jsonMessage: jsonMessage
});
return;
}
var peer; //= callUsers[userId].peers[jsonMessage.topic];
if (jsonMessage.topic.indexOf('Vi-') > -1 || jsonMessage.topic.indexOf('screen-Share') !== -1) {
peer = config.users.get(userId).videoTopicManager();
} else if (jsonMessage.topic.indexOf('Vo-') > -1) {
peer = config.users.get(userId).audioTopicManager();
}
if (!peer) return;
peer = peer.getPeer();
if (peer == null) {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ERROR',
callId: config.callId,
code: 7000,
message: "[handleAddIceCandidate] Skip, no WebRTC Peer",
error: JSON.stringify(peer),
environmentDetails: getCallDetails()
});
return;
}
peer.addIceCandidate(jsonMessage.candidate, function (err) {
if (err) {
console.error("[handleAddIceCandidate] " + err);
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ERROR',
callId: config.callId,
code: 7000,
message: "[handleAddIceCandidate] " + err,
error: JSON.stringify(jsonMessage.candidate),
environmentDetails: getCallDetails()
});
return;
}
});
}
function getCallDetails(customData) {
return _objectSpread({
currentUser: app.store.user.get(),
// currentServers: {
// callTurnIp: app.call.sharedVariables.callTurnIp,
// },
isJanus: config.callId && config.callServerController.isJanus(),
screenShareInfo: {
isStarted: config.screenShareInfo.isStarted(),
iAmOwner: config.screenShareInfo.iAmOwner()
},
callId: config.callId,
startCallInfo: config.callConfig
}, customData);
}
function sendCallSocketError(message) {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ERROR',
callId: config.callId,
code: 7000,
message: message,
environmentDetails: getCallDetails()
});
sendCallMessage({
id: 'ERROR',
message: message
}, null, {});
}
function handlePartnerFreeze(jsonMessage) {
if (!!jsonMessage && !!jsonMessage.topic && jsonMessage.topic.substring(0, 2) === 'Vi') {
var userId = config.users.findUserIdByTopic();
if (userId) {
config.users.get(userId).videoTopicManager().restartMedia();
setTimeout(function () {
config.users.get(userId).videoTopicManager().restartMedia();
}, 4000);
setTimeout(function () {
config.users.get(userId).videoTopicManager().restartMedia();
}, 8000);
}
}
}
function handleReceivedMetaData(jsonMessage, uniqueId) {
var jMessage = JSON.parse(jsonMessage.message);
var id = jMessage.id;
if (!id || typeof id === "undefined" || jsonMessage.userid == app.store.user.get().id) {
return;
}
switch (id) {
case _constants.callMetaDataTypes.POORCONNECTION:
publicized.sendQualityCheckEvent({
userId: jMessage.userid,
topic: jMessage.content.description,
//jMessage.topic,
mediaType: jMessage.content.description.indexOf('Vi') !== -1 ? 'video' : 'audio',
//jMessage.mediaType,
canSendCallMetaData: false
});
break;
case _constants.callMetaDataTypes.POORCONNECTIONRESOLVED:
publicized.sendQualityCheckEvent({
userId: jMessage.userid,
topic: jMessage.content.description,
mediaType: jMessage.content.description.indexOf('Vi') !== -1 ? 'video' : 'audio',
isResolved: true,
canSendCallMetaData: false
});
break;
case _constants.callMetaDataTypes.CUSTOMUSERMETADATA:
if (app.store.messagesCallbacks[uniqueId]) {
app.store.messagesCallbacks[uniqueId](jsonMessage);
}
app.chatEvents.fireEvent('callEvents', {
type: 'CUSTOM_USER_METADATA',
callId: config.callId,
userId: jMessage.userid,
content: jMessage.content
});
break;
case _constants.callMetaDataTypes.SCREENSHAREMETADATA:
if (config.screenShareInfo.isStarted()) {
config.screenShareInfo.setWidth(jMessage.content.dimension.width);
config.screenShareInfo.setHeight(jMessage.content.dimension.height); // applyScreenShareSizeToElement();
if (config.screenShareInfo.iAmOwner()) {
setTimeout(function () {
if (config.users.get('screenShare') && config.users.get('screenShare').videoTopicManager()) config.users.get('screenShare').videoTopicManager().restartMediaOnKeyFrame('screenShare', [2000]);
}, 2500);
}
app.chatEvents.fireEvent("callEvents", {
type: 'SCREENSHARE_METADATA',
callId: config.callId,
userId: jMessage.userid,
content: jMessage.content
});
}
break;
}
}
function sendCallMetaData(params) {
var message = {
id: params.id,
userid: params.userid,
content: params.content || undefined
};
sendCallMessage({
id: 'SENDMETADATA',
message: JSON.stringify(message),
chatId: config.callId
}, null, {});
}
function handleError(jsonMessage, sendingTopic, receiveTopic) {
var errMessage = jsonMessage.message;
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ERROR',
callId: config.callId,
code: 7000,
message: "Kurento error: " + errMessage,
environmentDetails: getCallDetails()
});
}
var publicized = {
queueMeForReconnect: function queueMeForReconnect(topic) {
config.failedPeersQueue.push(topic);
},
callServerController: function callServerController() {
return config.callServerController;
},
callConfig: function callConfig() {
return config.callConfig;
},
callStop: callStop,
endCall: app.call.endCall,
users: function users() {
return config.users;
},
sendCallDivs: function sendCallDivs() {
if (app.sdkParams.enableCallDivs) {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_DIVS',
callId: config.callId,
result: config.users.generateCallUIList()
});
} else {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_STREAMS',
callId: config.callId,
result: config.users.generateCallStreamsList()
});
}
},
screenShareInfo: config.screenShareInfo,
raiseCallError: function raiseCallError(errorObject, callBack, fireEvent) {
app.errorHandler.raiseError(errorObject, callBack, fireEvent, {
eventName: 'callEvents',
eventType: 'CALL_ERROR',
environmentDetails: getCallDetails()
});
},
getCallDetails: getCallDetails,
sendCallMessage: sendCallMessage,
getTurnServer: function getTurnServer(params) {
// if (!!params.turnAddress && params.turnAddress.length > 0
// || (app.call.sharedVariables.useInternalTurnAddress && !!params.internalTurnAddress && params.turnAddress.length > 0)) {
var serversTemp = app.call.sharedVariables.useInternalTurnAddress ? params.internalTurnAddress.split(',') : params.turnAddress.split(','),
turnsList = [];
if (app.call.sharedVariables.useCustomTurnAddress) {
return [{
"urls": "turn:" + app.call.sharedVariables.callTurnIp + ":3478",
"username": "mkhorrami",
"credential": "mkh_123456"
}];
} else {
for (var i in serversTemp) {
turnsList.push({
"urls": "turn:" + serversTemp[i],
"username": "mkhorrami",
"credential": "mkh_123456"
});
}
return turnsList;
} // } else {
// return [
// {
// "urls": "turn:" + app.call.sharedVariables.callTurnIp + ":3478",
// "username": "mkhorrami",
// "credential": "mkh_123456"
// }
// ];
// }
},
sendQualityCheckEvent: function sendQualityCheckEvent(_ref4) {
var userId = _ref4.userId,
topic = _ref4.topic,
mediaType = _ref4.mediaType,
_ref4$isLongTime = _ref4.isLongTime,
isLongTime = _ref4$isLongTime === void 0 ? false : _ref4$isLongTime,
_ref4$isResolved = _ref4.isResolved,
isResolved = _ref4$isResolved === void 0 ? false : _ref4$isResolved,
_ref4$canSendCallMeta = _ref4.canSendCallMetaData,
canSendCallMetaData = _ref4$canSendCallMeta === void 0 ? true : _ref4$canSendCallMeta;
if (mediaType === 'video') {
//TODO: Deprecated!
app.chatEvents.fireEvent('callEvents', {
type: isResolved ? 'POOR_VIDEO_CONNECTION_RESOLVED' : 'POOR_VIDEO_CONNECTION',
callId: config.callId,
subType: isResolved ? undefined : isLongTime ? 'LONG_TIME' : 'SHORT_TIME',
message: 'Poor connection resolved',
metadata: {
elementId: "uiRemoteVideo-" + topic,
topic: topic,
userId: userId
}
});
}
app.chatEvents.fireEvent('callEvents', {
type: isResolved ? 'POOR_CONNECTION_RESOLVED' : 'POOR_CONNECTION',
callId: config.callId,
subType: isResolved ? undefined : isLongTime ? 'LONG_TIME' : 'SHORT_TIME',
message: "Poor connection ".concat(isResolved ? 'resolved' : ''),
metadata: {
media: mediaType,
elementId: "uiRemoteVideo-" + topic,
topic: topic,
userId: userId
}
});
if (canSendCallMetaData) {
sendCallMetaData({
id: isResolved ? _constants.callMetaDataTypes.POORCONNECTIONRESOLVED : _constants.callMetaDataTypes.POORCONNECTION,
userid: userId,
content: {
title: "Poor Connection ".concat(isResolved ? 'Resolved' : ''),
description: topic
}
});
}
},
processCallMessage: function processCallMessage(message) {
var uniqueId = message.uniqueId;
if (message.done !== 'FALSE' || message.done === 'FALSE' && message.desc === 'duplicated') {
app.store.asyncRequestTimeouts[uniqueId] && clearTimeout(app.store.asyncRequestTimeouts[uniqueId]);
} else if (message.done === 'FALSE') {
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ERROR',
callId: config.callId,
code: 7000,
message: "Kurento error: " + (message.desc ? message.desc : message.message),
environmentDetails: getCallDetails()
});
}
switch (message.id) {
case 'PROCESS_SDP_ANSWER':
handleProcessSdpAnswer(message);
break;
case 'RECEIVING_MEDIA':
// Only for receiving topics from janus, first we subscribe
subscribeToReceiveOffers(message);
break;
case 'PROCESS_SDP_OFFER':
//Then janus sends offers
handleProcessSdpOffer(message);
break;
case 'ADD_ICE_CANDIDATE':
handleAddIceCandidate(message);
break;
case 'GET_KEY_FRAME':
var user = config.users.get(app.store.user.get().id);
if (user && user.user().video) {
user.videoTopicManager().restartMediaOnKeyFrame(app.store.user.get().id, [2000, 4000, 8000, 12000]);
}
var screenShareuser = config.users.get('screenShare');
if (screenShareuser && screenShareuser.user().video && config.screenShareInfo.isStarted() && config.screenShareInfo.iAmOwner()) {
screenShareuser.videoTopicManager().restartMediaOnKeyFrame('screenShare', [2000, 4000, 8000, 12000]);
}
break;
case 'FREEZED':
handlePartnerFreeze(message);
break;
/*case 'STOPALL':
if (app.store.messagesCallbacks[uniqueId]) {
app.store.messagesCallbacks[uniqueId](jsonMessage);
}
break;*/
case 'STOP':
if (app.store.messagesCallbacks[uniqueId]) {
app.store.messagesCallbacks[uniqueId](message);
}
break;
case 'CLOSE':
if (app.store.messagesCallbacks[uniqueId]) {
app.store.messagesCallbacks[uniqueId](message);
}
break;
case 'SESSION_NEW_CREATED':
if (app.store.messagesCallbacks[uniqueId]) {
app.store.messagesCallbacks[uniqueId](message);
}
break;
case 'SESSION_REFRESH':
if (app.store.messagesCallbacks[uniqueId]) {
app.store.messagesCallbacks[uniqueId](message);
}
break;
case 'RECEIVEMETADATA':
handleReceivedMetaData(message, uniqueId);
break;
case 'ERROR':
publicized.raiseCallError(app.errorHandler.getFilledErrorObject(_objectSpread(_objectSpread({}, _errorHandler.errorList.CALL_SERVER_ERROR), {}, {
replacements: [JSON.stringify(message)]
})), null, true);
break;
case 'SEND_SDP_OFFER':
case 'RECIVE_SDP_OFFER':
case 'SDP_ANSWER_RECEIVED':
break;
default:
console.warn("[SDK][onmessage] Invalid message, id: " + message.id, message); // if (jsonMessage.match(/NOT CREATE SESSION/g)) {
// if (currentCallParams && Object.keys(currentCallParams)) {
// //handleCallSocketOpen(currentCallParams);
// callStateController.createSessionInChat(currentCallParams);
// }
// }
break;
}
app.store.messagesCallbacks[uniqueId] && delete app.store.messagesCallbacks[uniqueId];
},
handleParticipantJoin: function handleParticipantJoin(messageContent, threadId) {
if (Array.isArray(messageContent)) {
var _loop = function _loop(i) {
var correctedData = {
video: messageContent[i].video,
mute: messageContent[i].mute,
userId: messageContent[i].userId,
topicSend: messageContent[i].sendTopic,
autoStartStreams: true,
callId: config.callId,
cameraPaused: false
};
if (!config.users.get(correctedData.userId)) {
new Promise(function (resolve) {
config.users.addItem(correctedData);
resolve();
}).then(function () {
app.call.currentCall().sendCallDivs();
});
} else {
config.users.removeItem(correctedData.userId);
new Promise(function (resolve) {
config.users.addItem(correctedData);
resolve();
}).then(function () {
app.call.currentCall().sendCallDivs();
});
}
};
for (var i in messageContent) {
_loop(i);
}
}
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_PARTICIPANT_JOINED',
callId: config.callId,
result: messageContent
});
if (config.users.get(app.store.user.get().id).video) {
config.users.get(app.store.user.get().id).videoTopicManager().restartMediaOnKeyFrame(app.store.user().id, [2000, 4000, 8000, 12000, 16000, 24000]);
}
if (config.screenShareInfo.isStarted() && config.screenShareInfo.iAmOwner()) {
sendCallMetaData({
id: _constants.callMetaDataTypes.SCREENSHAREMETADATA,
userid: app.store.user.get().id,
content: {
dimension: {
width: config.screenShareInfo.getWidth(),
height: config.screenShareInfo.getHeight()
}
}
}); // config.users.get('screenShare').videoTopicManager().restartMediaOnKeyFrame('screenShare', [2000, 4000, 8000, 12000, 16000, 24000]);
}
},
handleParticipantLeft: function handleParticipantLeft(messageContent, threadId) {
return (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_PARTICIPANT_LEFT',
callId: config.callId,
result: messageContent
}); //If I'm the only call participant, stop the call
if (!(Object.values(config.users.getAll()).length < 2)) {
_context2.next = 5;
break;
}
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_ENDED',
callId: config.callId
});
app.callsManager.removeItem(config.callId);
return _context2.abrupt("return");
case 5:
if (!messageContent[0].userId) {
_context2.next = 13;
break;
}
if (!(messageContent[0].userId == app.store.user.get().id)) {
_context2.next = 10;
break;
}
// await callStop();
app.callsManager.removeItem(config.callId);
_context2.next = 13;
break;
case 10:
_context2.next = 12;
return config.users.removeItem(messageContent[0].userId);
case 12:
if (config.screenShareInfo.isStarted() && config.screenShareInfo.getOwner() === messageContent[0].userId) {
config.users.removeItem("screenShare");
} //callStateController.removeScreenShareFromCall()
case 13:
case "end":
return _context2.stop();
}
}
}, _callee2);
}))();
},
handleParticipantMute: function handleParticipantMute(messageContent, threadId) {
if (Array.isArray(messageContent)) {
for (var i in messageContent) {
var user = config.users.get(messageContent[i].userId);
if (user) {
user.stopAudio();
}
}
}
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_PARTICIPANT_MUTE',
callId: config.callId,
result: messageContent
});
},
handleParticipantUnMute: function handleParticipantUnMute(messageContent, threadId) {
return (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
var _loop2, i;
return _regenerator["default"].wrap(function _callee3$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
if (!Array.isArray(messageContent)) {
_context4.next = 8;
break;
}
_loop2 = /*#__PURE__*/_regenerator["default"].mark(function _loop2(i) {
var user;
return _regenerator["default"].wrap(function _loop2$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
user = config.users.get(messageContent[i].userId);
if (!user) {
_context3.next = 6;
break;
}
if (!user.audioTopicManager()) {
_context3.next = 5;
break;
}
_context3.next = 5;
return user.destroyAudio();
case 5:
setTimeout(function () {
user.startAudio(messageContent[i].sendTopic);
}, 50);
case 6:
case "end":
return _context3.stop();
}
}
}, _loop2);
});
_context4.t0 = _regenerator["default"].keys(messageContent);
case 3:
if ((_context4.t1 = _context4.t0()).done) {
_context4.next = 8;
break;
}
i = _context4.t1.value;
return _context4.delegateYield(_loop2(i), "t2", 6);
case 6:
_context4.next = 3;
break;
case 8:
app.chatEvents.fireEvent('callEvents', {
type: 'CALL_PARTICIPANT_UNMUTE',
callId: config.callId,
result: messageContent
});
case 9:
case "end":
return _context4.stop();
}
}
}, _callee3);
}))();
},
handleParticipantVideoOn: function handleParticipantVideoOn(messageContent, threadId) {
return (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
var _loop3, i;
return _regenerator["default"].wrap(function _callee4$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
if (!Array.isArray(messageContent)) {
_context6.next = 8;
break;
}
_loop3 = /*#__PURE__*/_regenerator["default"].mark(function _loop3(i) {
var user;
return _regenerator["default"].wrap(function _loop3$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
user = config.users.get(messageContent[i].userId);
if (!user) {
_context5.next = 6;
break;
}
if (!user.videoTopicManager()) {
_context5.next = 5;
break;
}
_context5.next = 5;
return user.destroyVideo();
case 5:
setTimeout(function () {
user.startVideo(messageContent[i].sendTopic);
}, 50);
case 6:
case "end":
return _context5.stop();
}
}
}, _loop3);
});
_context6.t0 = _regenerator["default"].keys(messageContent);
case 3:
if ((_context6.t1 = _context6.t0()).done) {
_context6.next = 8;
break;
}
i = _context6.t1.value;
return _context6.delegateYield(_loop3(i), "t2", 6);
case 6:
_context6.next = 3;
break;
case 8:
setTimeout(function () {
app.call.currentCall().sendCallDivs();
});
app.chatEvents.fireEvent('callEvents', {
type: 'TURN_ON_VIDEO_CALL',
callId: config.callId,
result: messageContent
});
case 10:
case "end":
return _context6.stop();
}
}
}, _callee4);
}))();
},
handleParticipantVideoOff: function handleParticipantVideoOff(messageContent, threadId) {
if (Array.isArray(messageContent)) {
for (var i in messageContent) {
var user = config.users.get(messageContent[i].userId);
if (user) user.stopVideo();
}
}
setTimeout(function () {
app.call.currentCall().sendCallDivs();
});
app.chatEvents.fireEvent('callEvents', {
type: 'TURN_OFF_VIDEO_CALL',
callId: config.callId,
result: messageContent
});
},
handleStartScreenShare: function handleStartScreenShare(typeCode, onwerId, messageContent, threadId) {
app.sdkParams.consoleLogging && console.log("[sdk][startScreenShare][onResult]: ", messageContent);
var result = _utility["default"].createReturnData(typeCode, onwerId, false, '', 0, messageContent, null);
if (result.hasError) {
// endScreenShare({}, null);
config.users.removeItem("screenShare");
return;
}
var direction = 'send',
shareScreen = true;
config.screenShareInfo.setIsStarted(true);
config.screenShareInfo.setOwner(messageContent.screenOwner.id);
if (config.screenShareInfo.isStarted() && !config.screenShareInfo.iAmOwner()) {
direction = 'receive';
shareScreen = false;
}
if (config.screenShareInfo.isStarted() && config.screenShareInfo.iAmOwner()) {
var qualityObject = app.call.calculateScreenSize({
quality: app.call.sharedVariables.startScreenShareParams.quality
});
config.screenShareInfo.setWidth(qualityObject.width);
config.screenShareInfo.setHeight(qualityObject.height);
sendCallMetaData({
id: _constants.callMetaDataTypes.SCREENSHAREMETADATA,
userid: app.store.user.get().id,
content: {
dimension: {
width: config.screenShareInfo.getWidth(),
height: config.screenShareInfo.getHeight()
}
}
});
} // callStateController.addScreenShareToCall(direction, shareScreen);
if (config.screenShareInfo.iAmOwner()) {
setTimeout(function () {
doThings();
}, 1000);
} else {
doThings();
}
function doThings() {
callConfig.screenShareObject.callId = config.callId;
callConfig.screenShareObject.cameraPaused = false;
callConfig.screenShareObject.userId = "screenShare";
config.users.addItem(callConfig.screenShareObject, "screenShare");
app.chatEvents.fireEvent('callEvents', {
type: 'START_SCREEN_SHARE',
callId: config.callId,
result: messageContent
});
}
},
handleEndScreenShare: function handleEndScreenShare(messageContent, threadId) {
return (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
return _regenerator["default"].wrap(function _callee5$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
config.screenShareInfo.setIsStarted(false);
config.screenShareInfo.setOwner(messageContent.screenOwner.id);
_context7.next = 4;
return config.users.removeItem('screenShare');
case 4:
_context7.next = 6;
return app.call.deviceManager.mediaStreams.stopScreenShareInput();
case 6:
app.chatEvents.fireEvent('callEvents', {
type: 'END_SCREEN_SHARE',
callId: config.callId,
result: messageContent
});
app.call.currentCall().sendCallDivs();
case 8:
case "end":
return _context7.stop();
}
}
}, _callee5);
}))();
},
pauseCamera: function pauseCamera() {
var me = config.users.get(app.store.user.get().id);
if (!me || !me.user().video || !me.videoTopicManager().getPeer()) return;
me.videoTopicManager().pauseSendStream();
},
resumeCamera: function resumeCamera() {
var me = config.users.get(app.store.user.get().id);
if (!me || !me.user().videoTopicName || !me.videoTopicManager().getPeer()) //!me.peers[me.videoTopicName]
return;
me.videoTopicManager().resumeSendStream();
},
pauseMice: function pauseMice() {
var me = config.users.get(app.store.user.get().id);
if (!me || !me.user().audioTopicName || !me.audioTopicManager().getPeer()) //!me.peers[me.videoTopicName]
return;
me.audioTopicManager().pauseSendStream();
},
resumeMice: function resumeMice() {
var me = config.users.get(app.store.user.get().id);
if (!me || !me.user().audioTopicName || !me.audioTopicManager().getPeer()) //!me.peers[me.v