UNPKG

podchat-browser

Version:

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

398 lines (339 loc) 16.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _dataFormatters = require("../helpers/dataFormatters"); var _constants = require("../constants"); var _utility = _interopRequireDefault(require("../../utility/utility")); function ThreadHistoryMethods(app) { /** * Get History. * * This functions gets history of a thread * * @access private * * @param {int} count Count of threads to be received * @param {int} offset Offset of select query * @param {int} threadId Id of thread to get its history * @param {int} id Id of single message to get * @param {int} userId Messages of this SSO User * @param {int} messageType Type of messages to get (types should be set by client) * @param {int} fromTime Get messages which have bigger time than given fromTime * @param {int} fromTimeNanos Get messages which have bigger time than given fromTimeNanos * @param {int} toTime Get messages which have smaller time than given toTime * @param {int} toTimeNanos Get messages which have smaller time than given toTimeNanos * @param {int} senderId Messages of this sender only * @param {string} uniqueIds Array of unique ids to retrieve * @param {string} order Order of select query (default: DESC) * @param {string} query Search term to be looked up in messages content * @param {object} metadataCriteria This JSON will be used to search in message metadata with GraphQL * @param {function} callback The callback function to call after * * @return {object} Instant result of sendMessage */ function getHistory(params, callback) { if (parseInt(params.threadId) > 0) { var sendMessageParams = { chatMessageVOType: _constants.chatMessageVOTypes.GET_HISTORY, typeCode: params.typeCode, content: {}, subjectId: params.threadId }, offset = parseInt(params.offset) > 0 ? parseInt(params.offset) : 0, count = parseInt(params.count) > 0 ? parseInt(params.count) : 20, order = typeof params.order != 'undefined' ? params.order.toLowerCase() : 'desc', dynamicHistoryCount = params.dynamicHistoryCount && typeof params.dynamicHistoryCount === 'boolean' ? params.dynamicHistoryCount : false, sendingQueue = params.queues && typeof params.queues.sending === 'boolean' ? params.queues.sending : true, failedQueue = params.queues && typeof params.queues.failed === 'boolean' ? params.queues.failed : true, uploadingQueue = params.queues && typeof params.queues.uploading === 'boolean' ? params.queues.uploading : true, sendingQueueMessages = [], failedQueueMessages = [], uploadingQueueMessages = []; if (sendingQueue) { app.messageQueues.getChatSendQueue(parseInt(params.threadId), function (sendQueueMessages) { for (var i = 0; i < sendQueueMessages.length; i++) { var time = new Date().getTime(); sendingQueueMessages.push((0, _dataFormatters.formatDataToMakeMessage)(sendQueueMessages[i].threadId, { uniqueId: sendQueueMessages[i].uniqueId, ownerId: app.store.user.get().id, message: sendQueueMessages[i].content, metadata: sendQueueMessages[i].metadata, systemMetadata: sendQueueMessages[i].systemMetadata, replyInfo: sendQueueMessages[i].replyInfo, forwardInfo: sendQueueMessages[i].forwardInfo, time: time, timeNanos: time % 1000 * 1000000 })); } }); } if (uploadingQueue) { app.messageQueues.getChatUploadQueue(parseInt(params.threadId), function (uploadQueueMessages) { for (var i = 0; i < uploadQueueMessages.length; i++) { uploadQueueMessages[i].message.participant = app.store.user.get(); var time = new Date().getTime(); uploadQueueMessages[i].message.time = time; uploadQueueMessages[i].message.timeNanos = time % 1000 * 1000000; uploadingQueueMessages.push((0, _dataFormatters.formatDataToMakeMessage)(params.threadId, uploadQueueMessages[i].message, false)); } }); } app.messageQueues.getChatWaitQueue(parseInt(params.threadId), failedQueue, function (waitQueueMessages) { failedQueueMessages = []; if (dynamicHistoryCount) { var tempCount = count - (sendingQueueMessages.length + failedQueueMessages.length + uploadingQueueMessages.length); sendMessageParams.content.count = tempCount > 0 ? tempCount : 0; } else { sendMessageParams.content.count = count; } sendMessageParams.content.offset = offset; sendMessageParams.content.order = order; if (parseInt(params.messageId) > 0) { sendMessageParams.content.id = params.messageId; } if (Array.isArray(params.uniqueIds)) { sendMessageParams.content.uniqueIds = params.uniqueIds; } if (parseInt(params.fromTimeFull) > 0 && params.fromTimeFull.toString().length === 19) { sendMessageParams.content.fromTime = parseInt(params.fromTimeFull.toString().substring(0, 13)); sendMessageParams.content.fromTimeNanos = parseInt(params.fromTimeFull.toString().substring(10, 19)); } else { if (parseInt(params.fromTime) > 0 && parseInt(params.fromTime) < 9999999999999) { sendMessageParams.content.fromTime = parseInt(params.fromTime); } if (parseInt(params.fromTimeNanos) > 0 && parseInt(params.fromTimeNanos) < 999999999) { sendMessageParams.content.fromTimeNanos = parseInt(params.fromTimeNanos); } } if (parseInt(params.toTimeFull) > 0 && params.toTimeFull.toString().length === 19) { sendMessageParams.content.toTime = parseInt(params.toTimeFull.toString().substring(0, 13)); sendMessageParams.content.toTimeNanos = parseInt(params.toTimeFull.toString().substring(10, 19)); } else { if (parseInt(params.toTime) > 0 && parseInt(params.toTime) < 9999999999999) { sendMessageParams.content.toTime = parseInt(params.toTime); } if (parseInt(params.toTimeNanos) > 0 && parseInt(params.toTimeNanos) < 999999999) { sendMessageParams.content.toTimeNanos = parseInt(params.toTimeNanos); } } if (typeof params.query != 'undefined') { sendMessageParams.content.query = params.query; } if (params.allMentioned && typeof params.allMentioned == 'boolean') { sendMessageParams.content.allMentioned = params.allMentioned; } if (params.unreadMentioned && typeof params.unreadMentioned == 'boolean') { sendMessageParams.content.unreadMentioned = params.unreadMentioned; } if (params.messageType && typeof params.messageType.toUpperCase() !== 'undefined' && _constants.chatMessageTypes[params.messageType.toUpperCase()] > 0) { sendMessageParams.content.messageType = _constants.chatMessageTypes[params.messageType.toUpperCase()]; } if ((0, _typeof2["default"])(params.metadataCriteria) == 'object' && params.metadataCriteria.hasOwnProperty('field')) { sendMessageParams.content.metadataCriteria = params.metadataCriteria; } if (typeof params.repliedMessageId == 'number') { sendMessageParams.content.repliedMessageId = params.repliedMessageId; } if (typeof params.onlyNewMessages === "boolean") { sendMessageParams.content.newMessages = params.onlyNewMessages; } if (typeof params.uniqueId === "string") { sendMessageParams.uniqueId = params.uniqueId; } var memoryCache = false; if (typeof params.cache === "boolean") { memoryCache = params.cache; } var lastMessageItem = app.store.thread.getLastMessageItem(params.threadId); var timeMiliSeconds = lastMessageItem.timeMiliSeconds; if (memoryCache && app.store.history.canGetFromCache(params.threadId, sendMessageParams.content, lastMessageItem)) { var retrnData = { hasError: false, cache: false, errorMessage: "", errorCode: 0, typeCode: params.typeCode || app.typeCodes.getActiveTypeCode().typeCode, ownerId: params.ownerId || app.typeCodes.getActiveTypeCode().ownerId, uniqueId: sendMessageParams.uniqueId }, res = app.store.history.get(params.threadId).getCacheData(sendMessageParams.content, timeMiliSeconds); retrnData.result = { history: res, hasNext: !(res.length < params.count), //(res.length >= sendMessageParams.content.count),//(sendMessageParams.content.offset + sendMessageParams.content.count < result.contentCount && messageLength > 0), nextOffset: sendMessageParams.content.offset * 1 + res.length * 1 }; if (sendingQueue) { retrnData.result.sending = sendingQueueMessages; } if (uploadingQueue) { retrnData.result.uploading = uploadingQueueMessages; } if (failedQueue) { retrnData.result.failed = failedQueueMessages; } callback && callback(retrnData); callback = undefined; } else { /** * Get Thread Messages From Server */ return app.messenger.sendMessage(sendMessageParams, { onResult: function onResult(result) { var returnData = { uniqueId: params.uniqueId, hasError: result.hasError, cache: false, errorMessage: result.errorMessage, errorCode: result.errorCode }, resultMessagesId = []; if (!returnData.hasError) { var messageContent = result.result, messageLength = messageContent.length; var history = (0, _dataFormatters.reformatThreadHistory)(params.threadId, messageContent); var hasNext = !(result.result.length < sendMessageParams.content.count); if (memoryCache && app.store.history.isParamsValid(sendMessageParams.content)) { app.store.history.saveList(params.threadId, sendMessageParams.content, JSON.parse(JSON.stringify(history)), hasNext); } if (messageLength > 0) { /** * Calculating First and Last Messages of result */ var lastMessage = history[messageContent.length - 1], firstMessage = history[0]; /** * Sending Delivery for Last Message of Thread */ if (app.store.user.get().id !== firstMessage.participant.id && !firstMessage.delivered) { app.messageQueues.putInMessagesDeliveryQueue(params.threadId, firstMessage.id); } } returnData.result = { history: history, contentCount: result.contentCount, hasNext: result.result && hasNext, //(sendMessageParams.content.offset + sendMessageParams.content.count < result.contentCount && messageLength > 0), nextOffset: sendMessageParams.content.offset * 1 + messageLength * 1 }; if (sendingQueue) { returnData.result.sending = sendingQueueMessages; } if (uploadingQueue) { returnData.result.uploading = uploadingQueueMessages; } if (failedQueue) { returnData.result.failed = failedQueueMessages; } callback && callback(returnData); callback = undefined; } } }); } }); } else { app.chatEvents.fireEvent('error', { code: 999, message: '[SDK] Thread ID is required for Getting history!' }); } } function onGetHistory(uniqueId, messageContent, contentCount, chatMessage) { if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount, uniqueId)); } } /** * Returns some messages before and after the received messageId based on the size * * @param params * @param callback */ function getHistoryByMessageIdRange(params, callback) { if (!params) { app.chatEvents.fireEvent('error', { code: 999, message: '[SDK] No params have been received' }); return; } var sendMessageParams = { chatMessageVOType: _constants.chatMessageVOTypes.GET_HISTORY_BY_MESSAGE_ID_RANGE, typeCode: params.typeCode, content: {}, subjectId: params.threadId }; if (params.messageId) { sendMessageParams.content.messageId = params.messageId; } else { app.chatEvents.fireEvent('error', { code: 999, message: "[SDK] messageId is required" }); return; } sendMessageParams.content.size = typeof params.size == 'number' && params.size <= 10 ? params.size : 10; var memoryCache = false; if (typeof params.cache === "boolean") { memoryCache = params.cache; } var lastMessageItem = app.store.thread.getLastMessageItem(params.threadId); if (memoryCache && app.store.history.canGetFromCache(params.threadId, sendMessageParams.content, lastMessageItem)) { var retrnData = { hasError: false, cache: true, errorMessage: null, errorCode: 0 }, res = app.store.history.get(params.threadId).getRangeCacheData(sendMessageParams.content); retrnData.result = { history: res, hasNext: true }; callback && callback(retrnData); callback = undefined; return; } return app.messenger.sendMessage(sendMessageParams, { onResult: function onResult(result) { var returnData = { hasError: result.hasError, cache: false, errorMessage: result.errorMessage, errorCode: result.errorCode }; if (!returnData.hasError) { var messageContent = result.result; var history = (0, _dataFormatters.reformatThreadHistory)(params.threadId, messageContent); if (memoryCache && app.store.history.isParamsValid(sendMessageParams.content)) { app.store.history.saveList(params.threadId, sendMessageParams.content, JSON.parse(JSON.stringify(history)), true); } returnData.result = { history: history, hasNext: true }; callback && callback(returnData); callback = undefined; } } }); } function onGetHistoryByMessageIdRange(uniqueId, threadId, messageContent, chatMessage) { if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](_utility["default"].createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, null)); } } return { getHistory: getHistory, onGetHistory: onGetHistory, getHistoryByMessageIdRange: getHistoryByMessageIdRange, onGetHistoryByMessageIdRange: onGetHistoryByMessageIdRange }; } var _default = ThreadHistoryMethods; exports["default"] = _default;