UNPKG

podchat-browser

Version:

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

1,469 lines (1,275 loc) 305 kB
'use strict'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _app = _interopRequireDefault(require("./lib/app")); var _podasyncWsOnly = _interopRequireDefault(require("podasync-ws-only")); var _utility = _interopRequireDefault(require("./utility/utility")); var _call = _interopRequireDefault(require("./call.module")); var _messaging = _interopRequireDefault(require("./messaging.module")); var _buildConfig = _interopRequireDefault(require("./buildConfig.json")); var _deprecateMethods = require("./deprecateMethods"); var _xss = _interopRequireDefault(require("xss")); var _threadParticipantsMethods = _interopRequireDefault(require("./lib/chat/threadParticipantsMethods")); var _constants = require("./lib/constants"); var _reactionsMethods = _interopRequireDefault(require("./lib/chat/reactionsMethods")); var _threadMethods = _interopRequireDefault(require("./lib/chat/threadMethods")); var _errorHandler = require("./lib/errorHandler"); var _typecodes = _interopRequireDefault(require("./lib/store/typecodes")); var _contactsMethods = _interopRequireDefault(require("./lib/chat/contactsMethods")); var _contactsV = _interopRequireDefault(require("./lib/chat/contacts/contactsV2")); var _dataFormatters = require("./lib/helpers/dataFormatters"); var _sdkParams = require("./lib/sdkParams"); function Chat(params) { /******************************************************* * P R I V A T E V A R I A B L E S * *******************************************************/ var app = new _app["default"](); (0, _sdkParams.initSdkParams)(app, params); var publicized = {}; if (params.loggerConfig) app.logger.processInitConfig(params.loggerConfig); var typeCodes = new _typecodes["default"]({ app: app, whiteList: params.typeCodesList, current: { typeCode: params.typeCode || 'default', ownerId: params.typeCodeOwnerId || undefined } }); app.typeCodes = typeCodes; app.contact = new _contactsV["default"](app); publicized.contact = { add: app.contact.add, remove: app.contact.remove, get: app.contact.get, update: app.contact.update }; var reactionsMethods = new _reactionsMethods["default"](app); var contactsMethods = new _contactsMethods["default"](app); var threadParticipantsMethods = new _threadParticipantsMethods["default"](app); var asyncClient, peerId, oldPeerId, localDeviceId, cacheInMemory = app.sdkParams.forceWaitQueueInMemory ? true : false, //!hasCache, cacheSecret = 'VjaaS9YxNdVVAd3cAsRPcU5FyxRcyyV6tG6bFGjjK5RV8JJjLrXNbS5zZxnqUT6Y', queueHost = params.queueHost, queuePort = params.queuePort, queueUsername = params.queueUsername, queuePassword = params.queuePassword, queueReceive = params.queueReceive, queueSend = params.queueSend, queueConnectionTimeout = params.queueConnectionTimeout, config = { getHistoryCount: 25 }, getUserInfoRetry = 5, getUserInfoRetryCount = 0, chatFullStateObject = {}, httpRequestObject = {}, minIntegerValue = Number.MAX_SAFE_INTEGER * -1, maxIntegerValue = Number.MAX_SAFE_INTEGER, chatWaitQueue = [], protocolSwitching = params.protocolSwitching, protocolManager = new ProtocolManager({ protocol: app.sdkParams.protocol }), asyncLogCallback = typeof params.asyncLogCallback == "function" ? params.asyncLogCallback : null, msgLogCallback = typeof params.msgLogCallback == "function" ? params.msgLogCallback : null; /** * Minimum value for messageTtl is 2000 */ if (app.sdkParams.messageTtl < 2000) { app.sdkParams.messageTtl = 2000; console.warn("[SDK] messageTtl can not be less than 2000, we changed it to 2000"); } app.messenger = new _messaging["default"](app, Object.assign(params, { asyncClient: asyncClient })); var callModule = new _call["default"](app, Object.assign(params, { asyncClient: asyncClient })); function ProtocolManager(_ref) { var _ref$protocol = _ref.protocol, protocol = _ref$protocol === void 0 ? 'auto' : _ref$protocol; var config = { switchingEnabled: protocol == "auto", currentProtocol: protocol == "auto" ? 'websocket' : protocol, failOverProtocol: protocol == "auto" || protocol == "websocket" ? 'webrtc' : 'websocket', retries: 0, allowedRetries: { websocket: protocolSwitching && typeof protocolSwitching.websocket !== "undefined" ? protocolSwitching.websocket : 1, webrtc: protocolSwitching && typeof protocolSwitching.webrtc !== "undefined" ? protocolSwitching.webrtc : 1 }, currentWaitTime: 0 }; function canRetry() { return config.retries <= config.allowedRetries[config.currentProtocol]; } function _switchProtocol(protocol) { var canResetRetries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; asyncClient.logout().then(function () { var current; if (protocol) { current = protocol.toLowerCase(); config.failOverProtocol = current == "webrtc" ? "websocket" : "webrtc"; config.currentProtocol = current; } else { current = config.currentProtocol; config.currentProtocol = config.failOverProtocol; config.failOverProtocol = current; } app.sdkParams.consoleLogging && console.log("[SDK]|/| switchProtocol: ", "config.currentProtocol: ", config.currentProtocol, "config.currentWaitTime: ", config.currentWaitTime); app.chatEvents.fireEvent("autoSwitchAsyncProtocol", { current: config.currentProtocol, previous: config.failOverProtocol }); if (canResetRetries) config.retries = 1; initAsync(); }); } function _resetRetries() { config.retries = 0; } var publics = { switchProtocol: function switchProtocol(protocol) { if (protocol == 'auto') { config.switchingEnabled = true; _switchProtocol("websocket"); } else { config.switchingEnabled = false; _switchProtocol(protocol); } }, increaseRetries: function increaseRetries() { config.retries += 1; }, canRetry: canRetry, getCurrentProtocol: function getCurrentProtocol() { return config.currentProtocol; }, resetRetries: function resetRetries() { _resetRetries(); }, resetTimerTime: function resetTimerTime(time) { config.currentWaitTime = typeof time != "undefined" ? time : 0; }, onAsyncIsReconnecting: function onAsyncIsReconnecting(event) { app.sdkParams.consoleLogging && console.log("[SDK]|/| onAsyncIsReconnecting: ", "config.currentProtocol: ", config.currentProtocol, "config.currentWaitTime: ", config.currentWaitTime); publics.increaseRetries(); if (config.currentWaitTime < 64) { config.currentWaitTime += 3; } if (!canRetry() && config.switchingEnabled) { _switchProtocol(); } }, getRetryStepTimerTime: function getRetryStepTimerTime() { return config.currentWaitTime; }, reconnectAsync: function reconnectAsync() { publics.resetTimerTime(); if (config.switchingEnabled) { if (canRetry()) { publics.increaseRetries(); _switchProtocol(config.currentProtocol, false); // asyncClient.reconnectSocket(); } else { _switchProtocol(); } } else { // switchProtocol(config.currentProtocol); asyncClient.reconnectSocket(); } } }; return publics; } /******************************************************* * P R I V A T E M E T H O D S * *******************************************************/ function onAsyncStateChange(state) { app.chatEvents.fireEvent('chatState', state); chatFullStateObject = state; switch (state.socketState) { case 1: // CONNECTED protocolManager.resetRetries(); protocolManager.resetTimerTime(); if (state.deviceRegister && state.serverRegister) { // app.messenger.chatState = true; // app.messenger.ping(); app.messenger.startChatPing(); } break; case 0: // CONNECTING app.messenger.chatState = false; app.messenger.stopChatPing(); break; case 2: // CLOSING app.messenger.chatState = false; app.messenger.stopChatPing(); break; case 3: // CLOSED app.store.reactionSummaries.removeAllMessages(); app.store.reactionsList.removeAllMessages(); // store.reactionsList.invalidateCache(); app.messenger.chatState = false; app.messenger.stopChatPing(); if (app.call.currentCall() && app.call.currentCall().callServerController().isJanus()) { app.call.currentCall().sendCallStatusEvent(); } // TODO: Check if this is OK or not?! //app.messenger.sendPingTimeout && clearTimeout(app.messenger.sendPingTimeout); break; } } var init = function init() { /** * Initialize Cache Databases */ //startCacheDatabases(function () { if (app.sdkParams.grantDeviceIdFromSSO) { var getDeviceIdWithTokenTime = new Date().getTime(); getDeviceIdWithToken(function (retrievedDeviceId) { if (app.sdkParams.actualTimingLog) { _utility["default"].chatStepLogger('Get Device ID ', new Date().getTime() - getDeviceIdWithTokenTime); } localDeviceId = retrievedDeviceId; initAsync(); }); } else { initAsync(); } //}); }, /** * Initialize Async * * Initializes Async module and sets proper callbacks * * @access private * * @return {undefined} * @return {undefined} */ initAsync = function initAsync() { var asyncGetReadyTime = new Date().getTime(); if (typeof app.sdkParams.appId == "number") { app.sdkParams.appId = app.sdkParams.appId.toString(); } if (typeof app.sdkParams.appId != "string" || app.sdkParams.appId.length > 30) { app.errorHandler.raiseError(_errorHandler.errorList.INVALID_APP_ID, null, true, {}); return; } asyncClient = new _podasyncWsOnly["default"]({ appId: app.sdkParams.appId, protocol: protocolManager.getCurrentProtocol(), queueHost: queueHost, queuePort: queuePort, queueUsername: queueUsername, queuePassword: queuePassword, queueReceive: queueReceive, queueSend: queueSend, queueConnectionTimeout: queueConnectionTimeout, socketAddress: app.sdkParams.socketAddress, serverName: app.sdkParams.serverName, deviceId: app.store.asyncInfo.deviceId, wsConnectionWaitTime: app.sdkParams.wsConnectionWaitTime, connectionRetryInterval: app.sdkParams.connectionRetryInterval, connectionCheckTimeout: app.sdkParams.connectionCheckTimeout, connectionCheckTimeoutThreshold: app.sdkParams.connectionCheckTimeoutThreshold, messageTtl: app.sdkParams.messageTtl, reconnectOnClose: app.sdkParams.reconnectOnClose, asyncLogging: app.sdkParams.asyncLogging, logLevel: app.sdkParams.consoleLogging ? 3 : 1, webrtcConfig: app.sdkParams.webrtcConfig, retryStepTimerTime: protocolManager.getRetryStepTimerTime(), onStartWithRetryStepGreaterThanZero: onAsyncStateChange, msgLogCallback: msgLogCallback || null, asyncLogCallback: asyncLogCallback || null, onDeviceId: onDeviceId }); function onDeviceId(deviceId) { if (!app.store.asyncInfo.deviceId) { app.store.asyncInfo.deviceId = deviceId; } asyncClient.registerDevice(app.store.asyncInfo.deviceId); } callModule.asyncInitialized(asyncClient); app.messenger.asyncInitialized(asyncClient); asyncClient.on('asyncReady', function () { app.store.history.reset(); app.store.contacts.removeAll(); app.store.thread.removeAll(); if (app.sdkParams.actualTimingLog) { _utility["default"].chatStepLogger('Async Connection ', new Date().getTime() - asyncGetReadyTime); } // peerId = asyncClient.getPeerId(); app.store.asyncInfo.peerId = asyncClient.getPeerId(); // store.reactionSummaries.removeAllMessages(); if (!app.store.user.get()) { getUserAndUpdateSDKState(); } else if (app.store.user.get().id > 0) { app.messenger.chatState = true; app.chatEvents.fireEvent('chatReady'); if (app.call.currentCall() && app.call.currentCall().callServerController().isJanus()) { app.call.currentCall().sendCallStatusEvent(); } chatSendQueueHandler(); } app.sdkParams.seenInterval && clearInterval(app.sdkParams.seenInterval); app.sdkParams.seenInterval = setInterval(function () { if (Object.keys(app.sdkParams.messagesSeen).length) { messagesSeenQueueHandler(); } }, app.sdkParams.seenIntervalPitch); //shouldReconnectCall(); }); asyncClient.on('stateChange', onAsyncStateChange); asyncClient.on('connect', function (newPeerId) { asyncGetReadyTime = new Date().getTime(); // peerId = newPeerId; app.store.asyncInfo.peerId = newPeerId; app.chatEvents.fireEvent('connect'); app.messenger.ping(); }); asyncClient.on('disconnect', function (event) { // oldPeerId = peerId; app.store.asyncInfo.oldPeerId = app.store.asyncInfo.peerId; app.store.asyncInfo.peerId = undefined; // peerId = undefined; app.chatEvents.fireEvent('disconnect', event); // app.chatEvents.fireEvent('callEvents', { // type: 'CALL_ERROR', // code: 7000, // message: 'Call Socket is closed!', // error: event // }); }); asyncClient.on('reconnect', function (newPeerId) { // peerId = newPeerId; app.store.asyncInfo.peerId = newPeerId; app.chatEvents.fireEvent('reconnect'); }); asyncClient.on('reconnecting', function (event) { app.sdkParams.consoleLogging && console.log("[SDK][event: asyncClient.reconnecting]"); protocolManager.onAsyncIsReconnecting(event); }); asyncClient.on('message', function (params, ack) { receivedAsyncMessageHandler(params); ack && ack(); }); asyncClient.on('error', function (error) { app.chatEvents.fireEvent('error', { code: error.errorCode, message: error.errorMessage, error: error.errorEvent }); }); }, getUserAndUpdateSDKState = function getUserAndUpdateSDKState() { var getUserInfoTime = new Date().getTime(); getUserInfo(function (userInfoResult) { if (app.sdkParams.actualTimingLog) { _utility["default"].chatStepLogger('Get User Info ', new Date().getTime() - getUserInfoTime); } if (!userInfoResult.hasError) { app.store.user.setUser(userInfoResult.result.user); // setSDKUser(userInfoResult.result.user); // app.messenger.userInfo = userInfoResult.result.user; // getAllThreads({ // summary: true, // cache: false // }); app.messenger.chatState = true; app.chatEvents.fireEvent('chatReady'); if (app.call.currentCall() && app.call.currentCall().callServerController().isJanus()) { app.call.currentCall().sendCallStatusEvent(); } chatSendQueueHandler(); } }); }, /** * Deprecated * Get Device Id With Token * * If ssoGrantDevicesAddress set as TRUE, chat agent gets Device ID * from SSO server and passes it to Async Module * * @access private * * @param {function} callback The callback function to run after getting Device Id * * @return {undefined} */ getDeviceIdWithToken = function getDeviceIdWithToken(callback) { var deviceId; var params = { url: app.sdkParams.SERVICE_ADDRESSES.SSO_ADDRESS + app.sdkParams.SERVICES_PATH.SSO_DEVICES, method: 'GET', headers: { 'Authorization': 'Bearer ' + app.sdkParams.token } }; app.httpRequest.httpRequest(params, function (result) { if (!result.hasError) { var devices = JSON.parse(result.result.responseText).devices; if (devices && devices.length > 0) { for (var i = 0; i < devices.length; i++) { if (devices[i].current) { deviceId = devices[i].uid; break; } } if (!deviceId) { app.chatEvents.fireEvent('error', { code: 6000, message: _constants.CHAT_ERRORS[6000], error: null }); } else { callback(deviceId); } } else { app.chatEvents.fireEvent('error', { code: 6001, message: _constants.CHAT_ERRORS[6001], error: null }); } } else { app.chatEvents.fireEvent('error', { code: result.errorCode, message: result.errorMessage, error: result }); } }); }, /** * Get User Info * * This functions gets user info from chat serverName. * If info is not retrived the function will attemp * 5 more times to get info from erver * * @recursive * @access private * * @param {function} callback The callback function to call after * * @return {object} Instant function return */ getUserInfo = function getUserInfoRecursive(callback) { getUserInfoRetryCount++; if (getUserInfoRetryCount > getUserInfoRetry) { app.sdkParams.getUserInfoTimeout && clearTimeout(app.sdkParams.getUserInfoTimeout); getUserInfoRetryCount = 0; app.chatEvents.fireEvent('error', { code: 6101, message: _constants.CHAT_ERRORS[6101], error: null }); } else { app.sdkParams.getUserInfoTimeout && clearTimeout(app.sdkParams.getUserInfoTimeout); app.sdkParams.getUserInfoTimeout = setTimeout(function () { getUserInfoRecursive(callback); }, getUserInfoRetryCount * 10000); return app.messenger.sendMessage({ chatMessageVOType: _constants.chatMessageVOTypes.USER_INFO, typeCode: params.typeCode //params.typeCode }, { onResult: function onResult(result) { var returnData = { typeCode: result.typeCode, ownerId: result.ownerId, hasError: result.hasError, cache: false, errorMessage: result.errorMessage, errorCode: result.errorCode }; if (!returnData.hasError) { app.sdkParams.getUserInfoTimeout && clearTimeout(app.sdkParams.getUserInfoTimeout); var messageContent = result.result; var currentUser = (0, _dataFormatters.formatDataToMakeUser)(messageContent); returnData.result = { user: currentUser }; getUserInfoRetryCount = 0; callback && callback(returnData); /** * Delete callback so if server pushes response * before cache, cache won't send data again */ callback = undefined; } } }); } }, sendSystemMessage = function sendSystemMessage(params) { return app.messenger.sendMessage({ chatMessageVOType: _constants.chatMessageVOTypes.SYSTEM_MESSAGE, subjectId: params.threadId, content: params.content, uniqueId: params.uniqueId, pushMsgType: 3 }); }, /** * Chat Send Message Queue Handler * * Whenever something pushes into cahtSendQueue * this function invokes and does the message * sending progress throught async * * @access private * * @return {undefined} */ chatSendQueueHandler = function chatSendQueueHandler() { if (app.store.chatSendQueue.length) { var messageToBeSend = app.store.chatSendQueue[0]; app.store.history.remove(messageToBeSend.threadId); /** * Getting chatSendQueue from either cache or * memory and scrolling through the send queue * to send all the messages which are waiting * for app.messenger.chatState to become TRUE * * There is a small possibility that a Message * wouldn't make it through network, so it Will * not reach chat server. To avoid losing those * messages, we put a clone of every message * in waitQ, and when ack of the message comes, * we delete that message from waitQ. otherwise * we assume that these messages have been failed to * send and keep them to be either canceled or resent * by user later. When user calls getHistory(), they * will have failed messages alongside with typical * messages history. */ if (app.messenger.chatState) { app.messageQueues.getChatSendQueue(0, function (chatSendQueue) { app.messageQueues.deleteFromChatSentQueue(messageToBeSend, function () { app.messenger.sendMessage(messageToBeSend.message, messageToBeSend.callbacks, function () { if (app.store.chatSendQueue.length) { chatSendQueueHandler(); } }); }); }); } } }, /** * Messages Seen Queue Handler * * Whenever something pushes into messagesSeen * this function invokes and does the message * seen progress throught async * * @access private * * @return {undefined} */ messagesSeenQueueHandler = function messagesSeenQueueHandler() { if (Object.keys(app.sdkParams.messagesSeen).length) { if (app.messenger.chatState) { for (var key in app.sdkParams.messagesSeen) { seen({ messageId: app.sdkParams.messagesSeen[key].messageId, typeCode: app.sdkParams.messagesSeen[key].typeCode }); delete app.sdkParams.messagesSeen[key]; } } } }, /** * Clear Cache * * Clears Async queue so that all the remained messages will be * ignored * * @access private * * @return {undefined} */ clearChatServerCaches = function clearChatServerCaches() { app.messenger.sendMessage({ chatMessageVOType: _constants.chatMessageVOTypes.LOGOUT, pushMsgType: 3 }); }, /** * Received Async Message Handler * * This functions parses received message from async * * @access private * * @param {object} asyncMessage Received Message from Async * * @return {undefined} */ receivedAsyncMessageHandler = function receivedAsyncMessageHandler(asyncMessage) { /** * + Message Received From Async {object} * - id {int} * - senderMessageId {int} * - senderName {string} * - senderId {int} * - type {int} * - content {string} */ if (asyncMessage.senderName === app.sdkParams.serverName) { var content = JSON.parse(asyncMessage.content); if (!content.typeCode || app.typeCodes.isAllowed(content.typeCode)) chatMessageHandler(content); } else { callModule.callMessageHandler(asyncMessage); } }, /** * Chat Message Handler * * Manages received chat messages and do the job * * @access private * * @param {object} chatMessage Content of Async Message which is considered as Chat Message * * @return {undefined} */ chatMessageHandler = function chatMessageHandler(chatMessage) { // if(chatMessage.typeCode && chatMessage.typeCode !== app.sdkParams.generalTypeCode) { // return; // } var threadId = chatMessage.subjectId, type = chatMessage.type, typeCode = chatMessage.typeCode, messageContent = typeof chatMessage.content === 'string' && _utility["default"].isValidJson(chatMessage.content) ? JSON.parse(chatMessage.content) : chatMessage.content, contentCount = chatMessage.contentCount, uniqueId = chatMessage.uniqueId, time = chatMessage.time; app.store.asyncRequestTimeouts[uniqueId] && clearTimeout(app.store.asyncRequestTimeouts[uniqueId]); switch (type) { /** * Type 1 Get Threads */ case _constants.chatMessageVOTypes.CREATE_THREAD: app.threadMethods.onCreateThread(uniqueId, messageContent, contentCount, chatMessage); break; /** * Type 2 Message */ case _constants.chatMessageVOTypes.MESSAGE: newMessageHandler(threadId, messageContent, chatMessage, uniqueId); break; /** * Type 3 Message Sent */ case _constants.chatMessageVOTypes.SENT: if (app.store.sendMessageCallbacks[uniqueId] && app.store.sendMessageCallbacks[uniqueId].onSent) { app.store.sendMessageCallbacks[uniqueId].onSent({ uniqueId: uniqueId, messageId: messageContent, typeCode: chatMessage.typeCode, ownerId: chatMessage.ownerId }); delete app.store.sendMessageCallbacks[uniqueId].onSent; if (app.store.threadCallbacks[threadId] && app.store.threadCallbacks[threadId][uniqueId]) app.store.threadCallbacks[threadId][uniqueId].onSent = true; } break; /** * Type 4 Message Delivery */ case _constants.chatMessageVOTypes.DELIVERY: // var threadObject = { // id: messageContent.conversationId, // lastSeenMessageId: messageContent.messageId, // lastSeenMessageTime: messageContent.messageTime, // lastParticipantId: messageContent.participantId // }; // // app.chatEvents.fireEvent('threadEvents', { // type: 'THREAD_LAST_ACTIVITY_TIME', // result: { // thread: threadObject // } // }); // // // if (fullResponseObject) { // // getHistory({ // // offset: 0, // // threadId: threadId, // // id: messageContent.messageId, // // cache: false // // }, function (result) { // // if (!result.hasError) { // // app.chatEvents.fireEvent('messageEvents', { // // type: 'MESSAGE_DELIVERY', // // result: { // // message: result.result.history[0], // // threadId: threadId, // // senderId: messageContent.participantId // // } // // }); // // } // // }); // // } else { // // app.chatEvents.fireEvent('messageEvents', { // // type: 'MESSAGE_DELIVERY', // // result: { // // message: messageContent.messageId, // // threadId: threadId, // // senderId: messageContent.participantId // // } // // }); // // } // // sendMessageCallbacksHandler(chatMessageVOTypes.DELIVERY, threadId, uniqueId); // break; /** * Type 5 Message Seen */ case _constants.chatMessageVOTypes.SEEN: var threadObject = { id: messageContent.conversationId, lastSeenMessageId: messageContent.messageId, lastSeenMessageTime: messageContent.messageTime, lastParticipantId: messageContent.participantId }; // check last message id with thread lastmessageVo and update deliverd and seen var cachedLastMessageItem = app.store.thread.getLastMessageItem(threadId); if (threadObject.lastSeenMessageId == cachedLastMessageItem.id) { app.store.thread.updateDelivered(threadId, true); } app.store.thread.updateMentioned(threadId, false); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threadObject } }); app.chatEvents.fireEvent('messageEvents', { type: 'MESSAGE_SEEN', result: { message: messageContent.messageId, threadId: threadId, senderId: messageContent.participantId } }); if (app.store.history.get(threadId)) { app.store.history.updateSeen(threadId, threadObject.lastSeenMessageTime); } sendMessageCallbacksHandler(_constants.chatMessageVOTypes.SEEN, threadId, uniqueId); break; /** * Type 6 Chat Ping */ case _constants.chatMessageVOTypes.PING: break; /** * Type 7 Block Contact */ case _constants.chatMessageVOTypes.BLOCK: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent)); } break; /** * Type 8 Unblock Blocked User */ case _constants.chatMessageVOTypes.UNBLOCK: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent)); } break; /** * Type 9 Leave Thread */ case _constants.chatMessageVOTypes.LEAVE_THREAD: app.threadMethods.onLeaveThread(uniqueId, messageContent, contentCount, chatMessage, threadId, typeCode); break; /** * Type 11 Add Participant to Thread */ case _constants.chatMessageVOTypes.ADD_PARTICIPANT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (app.sdkParams.fullResponseObject) { app.threadMethods.getThreads({ threadIds: [messageContent.id], typeCode: typeCode }, function (threadsResult) { var threads = threadsResult.result.threads; if (!threadsResult.cache) { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_ADD_PARTICIPANTS', result: { thread: threads[0], messageContent: messageContent, typeCode: typeCode } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threads[0], typeCode: typeCode } }); } }); } else { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_ADD_PARTICIPANTS', result: { thread: messageContent, messageContent: messageContent, typeCode: typeCode } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: messageContent, typeCode: typeCode } }); } break; /** * Type 13 Get Contacts List */ case _constants.chatMessageVOTypes.GET_CONTACTS: contactsMethods.onGetContacts(uniqueId, messageContent, contentCount, chatMessage); break; /** * Type 14 Get Threads List */ case _constants.chatMessageVOTypes.GET_THREADS: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount, uniqueId)); } break; /** * Type 15 Get Message History of an Thread */ case _constants.chatMessageVOTypes.GET_HISTORY: app.threadHistory.onGetHistory(uniqueId, messageContent, contentCount, chatMessage); break; /** * Type 17 Remove sb from thread */ case _constants.chatMessageVOTypes.REMOVED_FROM_THREAD: app.threadMethods.onRemovedFromThread(threadId); break; /** * Type 18 Remove a participant from Thread */ case _constants.chatMessageVOTypes.REMOVE_PARTICIPANT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (app.sdkParams.fullResponseObject) { app.threadMethods.getThreads({ threadIds: [threadId], typeCode: typeCode }, function (threadsResult) { var threads = threadsResult.result.threads; if (!threadsResult.cache) { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_REMOVE_PARTICIPANTS', result: { thread: threads[0], messageContent: messageContent, typeCode: typeCode } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threads[0], typeCode: typeCode } }); } }); } else { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_REMOVE_PARTICIPANTS', result: { thread: threadId, messageContent: messageContent, typeCode: typeCode } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threadId, typeCode: typeCode } }); } break; /** * Type 19 Mute Thread */ case _constants.chatMessageVOTypes.MUTE_THREAD: app.threadMethods.onMuteThread(uniqueId, messageContent, contentCount, chatMessage, threadId, typeCode); break; /** * Type 20 Unmute muted Thread */ case _constants.chatMessageVOTypes.UNMUTE_THREAD: app.threadMethods.onUnMuteThread(uniqueId, messageContent, contentCount, chatMessage, threadId, typeCode); break; /** * Type 21 Update Thread Info */ case _constants.chatMessageVOTypes.UPDATE_THREAD_INFO: app.threadMethods.onUpdateThreadInfo(uniqueId, messageContent, contentCount, chatMessage, threadId, typeCode); break; /** * Type 22 Forward Multiple Messages */ case _constants.chatMessageVOTypes.FORWARD_MESSAGE: newMessageHandler(threadId, messageContent, chatMessage, uniqueId); break; /** * Type 23 User Info */ case _constants.chatMessageVOTypes.USER_INFO: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent)); } app.chatEvents.fireEvent('systemEvents', { type: 'SERVER_TIME', result: { time: time } }); break; /** * Type 25 Get Blocked List */ case _constants.chatMessageVOTypes.GET_BLOCKED: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 27 Thread Participants List */ case _constants.chatMessageVOTypes.THREAD_PARTICIPANTS: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 28 Edit Message */ case _constants.chatMessageVOTypes.EDIT_MESSAGE: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } chatEditMessageHandler(threadId, messageContent, chatMessage, typeCode, uniqueId); break; /** * Type 29 Delete Message */ case _constants.chatMessageVOTypes.DELETE_MESSAGE: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } var msgTime = parseInt(parseInt(messageContent.time) / 1000) * 1000000000 + parseInt(messageContent.timeNanos); if (app.store.threads.get(threadId)) app.store.threads.get(threadId).unreadCount.decrease(msgTime); if (messageContent.pinned) { unPinMessage({ messageId: messageContent.id, notifyAll: true }); } app.store.history.removeMessage(threadId, messageContent.id); if (app.sdkParams.fullResponseObject) { var time, timeMiliSeconds; if (messageContent.time.toString().length > 14) { time = messageContent.time; timeMiliSeconds = parseInt(messageContent.time / 1000000); } else { time = messageContent.timeNanos ? parseInt(parseInt(messageContent.time) / 1000) * 1000000000 + parseInt(messageContent.timeNanos) : parseInt(pushMessageVO.time); timeMiliSeconds = parseInt(messageContent.time); } app.threadMethods.getThreads({ threadIds: [threadId], typeCode: typeCode, cache: false }, function (threadsResult) { var threads = threadsResult.result.threads; if (!threadsResult.cache) { app.chatEvents.fireEvent('messageEvents', { type: 'MESSAGE_DELETE', result: { typeCode: chatMessage.typeCode, message: { id: messageContent.id, pinned: messageContent.pinned, threadId: threadId, time: time, timeMiliSeconds: timeMiliSeconds, timeNanos: messageContent.timeNanos } } }); if (messageContent.pinned) { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threads[0], typeCode: typeCode } }); } } }); } else { app.chatEvents.fireEvent('messageEvents', { type: 'MESSAGE_DELETE', result: { typeCode: chatMessage.typeCode, message: { id: messageContent.id, pinned: messageContent.pinned, threadId: threadId, time: time, timeMiliSeconds: timeMiliSeconds, timeNanos: messageContent.timeNanos } } }); if (messageContent.pinned) { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threadId, typeCode: typeCode } }); } } break; /** * Type 30 Thread Info Updated */ case _constants.chatMessageVOTypes.THREAD_INFO_UPDATED: // TODO: Check this line again // if (!messageContent.conversation && !messageContent.conversation.id) { // messageContent.conversation.id = threadId; // } // // var thread = formatDataToMakeConversation(messageContent.conversation); var thread = (0, _dataFormatters.formatDataToMakeConversation)(messageContent); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_INFO_UPDATED', result: { thread: thread } }); break; /** * Type 31 Thread Last Seen Updated */ case _constants.chatMessageVOTypes.LAST_SEEN_UPDATED: app.store.thread.updateMentioned(threadId, false); app.store.thread.updateSeen(threadId, messageContent.unreadCount); var threadObject = messageContent; threadObject.unreadCount = messageContent.unreadCount ? messageContent.unreadCount : 0; threadObject.lastSeenMessageTime = messageContent.lastSeenMessageNanos ? parseInt(parseInt(messageContent.lastSeenMessageTime) / 1000) * 1000000000 + parseInt(messageContent.lastSeenMessageNanos) : parseInt(messageContent.lastSeenMessageTime); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_UNREAD_COUNT_UPDATED', result: { thread: threadObject, unreadCount: messageContent.unreadCount ? messageContent.unreadCount : 0 } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_SEEN_UPDATED', result: { thread: threadObject, unreadCount: messageContent.unreadCount ? messageContent.unreadCount : 0 } }); if (app.store.threads.get(threadId) && (!app.store.threads.get(threadId).lastSeenMessageTime.get() || app.store.threads.get(threadId).lastSeenMessageTime.get() && threadObject.lastSeenMessageTime > app.store.threads.get(threadId).lastSeenMessageTime.get() && threadObject.unreadCount < app.store.threads.get(threadId).unreadCount.get())) { var localThreadLastSeenUpdated = JSON.parse(JSON.stringify(messageContent)); app.store.threads.save(localThreadLastSeenUpdated); app.store.threads.get(threadId).lastSeenMessageTime.set(threadObject.lastSeenMessageTime); app.store.threads.get(threadId).unreadCount.set(messageContent.unreadCount); } // if (fullResponseObject) { // getThreads({ // threadIds: [messageContent.id] // }, function (threadsResult) { // var threads = threadsResult.result.threads; // // if (!threadsResult.cache) { // app.chatEvents.fireEvent('threadEvents', { // type: 'THREAD_UNREAD_COUNT_UPDATED', // result: { // thread: threads[0], // unreadCount: (messageContent.unreadCount) ? messageContent.unreadCount : 0 // } // }); // // app.chatEvents.fireEvent('threadEvents', { // type: 'THREAD_LAST_ACTIVITY_TIME', // result: { // thread: threads[0] // } // }); // } // }); // } else { // app.chatEvents.fireEvent('threadEvents', { // type: 'THREAD_UNREAD_COUNT_UPDATED', // result: { // thread: threadId, // unreadCount: (messageContent.unreadCount) ? messageContent.unreadCount : 0 // } // }); // // app.chatEvents.fireEvent('threadEvents', { // type: 'THREAD_LAST_ACTIVITY_TIME', // result: { // thread: threadId // } // }); // } break; /** * Type 32 Get Message Delivered List */ case _constants.chatMessageVOTypes.GET_MESSAGE_DELIVERY_PARTICIPANTS: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 33 Get Message Seen List */ case _constants.chatMessageVOTypes.GET_MESSAGE_SEEN_PARTICIPANTS: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 34 Is Public Group Name Available? */ case _constants.chatMessageVOTypes.IS_NAME_AVAILABLE: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 39 Join Public Group or Channel */ case _constants.chatMessageVOTypes.JOIN_THREAD: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (app.sdkParams.fullResponseObject) { app.threadMethods.getThreads({ threadIds: [messageContent.id], typeCode: typeCode }, function (threadsResult) { var threads = threadsResult.result.threads; if (!threadsResult.cache) { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_PARTICIPANT_JOIN', result: { thread: threads[0], messageContent: messageContent, typeCode: typeCode } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threads[0], typeCode: typeCode } }); } }); } else { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_PARTICIPANT_JOIN', result: { thread: messageContent, messageContent: messageContent, typeCode: typeCode } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: messageContent, typeCode: typeCode } }); } break; /** * Type 40 Bot Messages */ case _constants.chatMessageVOTypes.BOT_MESSAGE: app.chatEvents.fireEvent('botEvents', { type: 'BOT_MESSAGE', result: { bot: messageContent } }); break; /** * Type 41 Spam P2P Thread */ case _constants.chatMessageVOTypes.SPAM_PV_THREAD: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent)); } break; /** * Type 42 Set Role To User */ case _constants.chatMessageVOTypes.SET_ROLE_TO_USER: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent)); } if (app.sdkParams.fullResponseObject) { app.threadMethods.getThreads({ threadIds: [threadId], typeCode: typeCode }, function (threadsResult) { var threads = threadsResult.result.threads; if (!threadsResult.cache) { app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_ADD_ADMIN', result: { thread: threads[0], admin: messageContent, typeCode: typeCode } }); app.chatEvents.fireEvent('threadEvents', { type: 'THREAD_LAST_ACTIVITY_TIME', result: { thread: threads[0], admin: messageContent, typeCode: typeCode } }); } }); } else { app.chatEvents.fireEvent('threa