UNPKG

podchat-browser

Version:

Javascript SDK to use POD's Chat Service - Browser Only

1,393 lines (1,202 loc) 52.3 kB
"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