UNPKG

podchat

Version:
766 lines (696 loc) 27.6 kB
import {assistantActionTypes, inviteeVOidTypes} from "../constants"; /** * Format Data To Make Message * * This functions reformats given JSON to proper Object * * @access private * * * @return {object} message Object * @param threadId * @param pushMessageVO * @param fromCache */ function formatDataToMakeMessage(threadId, pushMessageVO, fromCache) { /** * + MessageVO {object} * - id {int} * - threadId {int} * - ownerId {int} * - uniqueId {string} * - previousId {int} * - message {string} * - messageType {int} * - edited {boolean} * - editable {boolean} * - deletable {boolean} * - delivered {boolean} * - seen {boolean} * - mentioned {boolean} * - pinned {boolean} * - participant {object : ParticipantVO} * - conversation {object : ConversationVO} * - replyInfo {object : replyInfoVO} * - forwardInfo {object : forwardInfoVO} * - metadata {string} * - systemMetadata {string} * - time {int} * - timeNanos {int} */ if (fromCache || pushMessageVO.time.toString().length > 14) { var time = pushMessageVO.time, timeMiliSeconds = parseInt(pushMessageVO.time / 1000000); } else { var time = (pushMessageVO.timeNanos) ? (parseInt(parseInt(pushMessageVO.time) / 1000) * 1000000000) + parseInt(pushMessageVO.timeNanos) : (parseInt(pushMessageVO.time)), timeMiliSeconds = parseInt(pushMessageVO.time); } var message = { id: pushMessageVO.id, threadId: threadId, ownerId: (pushMessageVO.ownerId) ? pushMessageVO.ownerId : undefined, uniqueId: pushMessageVO.uniqueId, previousId: pushMessageVO.previousId, message: filterXSS(pushMessageVO.message), messageType: pushMessageVO.messageType, edited: pushMessageVO.edited, editable: pushMessageVO.editable, deletable: pushMessageVO.deletable, delivered: pushMessageVO.delivered, seen: pushMessageVO.seen, mentioned: pushMessageVO.mentioned, pinned: pushMessageVO.pinned, participant: undefined, conversation: undefined, replyInfo: undefined, forwardInfo: undefined, metadata: pushMessageVO.metadata, systemMetadata: pushMessageVO.systemMetadata, time: time, timeMiliSeconds: timeMiliSeconds, timeNanos: parseInt(pushMessageVO.timeNanos), callHistory: pushMessageVO.callHistoryVO }; if (pushMessageVO.participant) { message.ownerId = pushMessageVO.participant.id; } else if (pushMessageVO.participantVO) { message.ownerId = pushMessageVO.participantVO.id; } if (pushMessageVO.conversation) { message.conversation = formatDataToMakeConversation(pushMessageVO.conversation); message.threadId = pushMessageVO.conversation.id; } if (pushMessageVO.replyInfoVO || pushMessageVO.replyInfo) { message.replyInfo = (pushMessageVO.replyInfoVO) ? formatDataToMakeReplyInfo(pushMessageVO.replyInfoVO, threadId) : formatDataToMakeReplyInfo(pushMessageVO.replyInfo, threadId); } if (pushMessageVO.forwardInfo) { message.forwardInfo = formatDataToMakeForwardInfo(pushMessageVO.forwardInfo, threadId); } if (pushMessageVO.participant) { message.participant = formatDataToMakeParticipant(pushMessageVO.participant, threadId); } // return message; return JSON.parse(JSON.stringify(message)); } /** * Format Data To Make Participant * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @param threadId * @return {object} participant Object */ function formatDataToMakeParticipant(messageContent, threadId) { /** * + ParticipantVO {object} * - id {int} * - coreUserId {int} * - threadId {int} * - sendEnable {boolean} * - receiveEnable {boolean} * - firstName {string} * - lastName {string} * - name {string} * - cellphoneNumber {string} * - email {string} * - image {string} * - chatProfileVO {object} * - myFriend {boolean} * - online {boolean} * - notSeenDuration {int} * - contactId {int} * - contactName {string} * - contactFirstName {string} * - contactLastName {string} * - blocked {boolean} * - admin {boolean} * - auditor {boolean} * - keyId {string} * - roles {list:string} * - username {string} */ var participant = { id: messageContent.id, coreUserId: messageContent.coreUserId, threadId: parseInt(threadId), sendEnable: messageContent.sendEnable, receiveEnable: messageContent.receiveEnable, firstName: messageContent.firstName, lastName: messageContent.lastName, name: messageContent.name, cellphoneNumber: messageContent.cellphoneNumber, email: messageContent.email, image: messageContent.image, myFriend: messageContent.myFriend, online: messageContent.online, notSeenDuration: messageContent.notSeenDuration, contactId: messageContent.contactId, contactName: messageContent.contactName, contactFirstName: messageContent.contactFirstName, contactLastName: messageContent.contactLastName, blocked: messageContent.blocked, admin: messageContent.admin, auditor: messageContent.auditor, keyId: messageContent.keyId, roles: messageContent.roles, username: messageContent.username }; // Add chatProfileVO if exist if (messageContent.chatProfileVO) { participant.chatProfileVO = messageContent.chatProfileVO; } // return participant; return JSON.parse(JSON.stringify(participant)); } /** * Format Data To Make Pin Message * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} pin message Object */ function formatDataToMakePinMessage(threadId, pushMessageVO) { /** * + PinMessageVO {object} * - messageId {int} * - time {int} * - sender {int} * - text {string} * - notifyAll {boolean} */ pushMessageVO.time = (pushMessageVO.timeNanos) ? (parseInt(parseInt(pushMessageVO.time) / 1000) * 1000000000) + parseInt(pushMessageVO.timeNanos) : (parseInt(pushMessageVO.time)); var pinMessage = { threadId: threadId, time: pushMessageVO.time, timeNanos: pushMessageVO.timeNanos, sender: pushMessageVO.sender, messageId: pushMessageVO.messageId, text: filterXSS(pushMessageVO.text), metadata: pushMessageVO.metadata, systemMetadata: pushMessageVO.systemMetadata, }; if (typeof pushMessageVO.notifyAll === 'boolean') { pinMessage.notifyAll = pushMessageVO.notifyAll } // return pinMessage; return JSON.parse(JSON.stringify(pinMessage)); } /** * Reformat Thread History * * This functions reformats given Array of thread Messages * into proper chat message object * * @access private * * @param {int} threadId Id of Thread * @param {object} historyContent Array of Thread History Messages * * @return {object} Formatted Thread History */ function reformatThreadHistory(threadId, historyContent) { var returnData = []; for (var i = 0; i < historyContent.length; i++) { returnData.push(formatDataToMakeMessage(threadId, historyContent[i])); } return returnData; } /** * Format Data To Make Forward Info * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @param threadId * @return {object} forwardInfo Object */ function formatDataToMakeForwardInfo(messageContent, threadId) { /** * + forwardInfo {object : forwardInfoVO} * - participant {object : ParticipantVO} * - conversation {object : ConversationSummary} */ var forwardInfo = { participant: undefined, conversation: undefined }; if (messageContent.conversation) { forwardInfo.conversation = formatDataToMakeConversation(messageContent.conversation); } if (messageContent.participant) { forwardInfo.participant = formatDataToMakeParticipant(messageContent.participant, threadId); } // return forwardInfo; return JSON.parse(JSON.stringify(forwardInfo)); } /** * Format Data To Make Reply Info * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @param threadId * @return {object} replyInfo Object */ function formatDataToMakeReplyInfo(messageContent, threadId) { /** * + replyInfoVO {object : replyInfoVO} * - participant {object : ParticipantVO} * - repliedToMessageId {int} * - repliedToMessageTime {int} * - repliedToMessageNanos {int} * - message {string} * - deleted {boolean} * - messageType {int} * - metadata {string} * - systemMetadata {string} */ var replyInfo = { participant: undefined, repliedToMessageId: messageContent.repliedToMessageId, repliedToMessageTime: (messageContent.repliedToMessageNanos) ? (parseInt(parseInt(messageContent.repliedToMessageTime) / 1000) * 1000000000) + parseInt(messageContent.repliedToMessageNanos) : (parseInt(messageContent.repliedToMessageTime)), repliedToMessageTimeMiliSeconds: parseInt(messageContent.repliedToMessageTime), repliedToMessageTimeNanos: parseInt(messageContent.repliedToMessageNanos), message: messageContent.message, deleted: messageContent.deleted, messageType: messageContent.messageType, metadata: messageContent.metadata, systemMetadata: messageContent.systemMetadata }; if (messageContent.participant) { replyInfo.participant = formatDataToMakeParticipant(messageContent.participant, threadId); } if (messageContent.replyPrivatelyInfoVO) { replyInfo.replyPrivatelyInfoVO = messageContent.replyPrivatelyInfoVO; } // return replyInfo; return JSON.parse(JSON.stringify(replyInfo)); } /** * Format Data To Make Conversation * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} Conversation Object */ function formatDataToMakeConversation(messageContent) { /** * + Conversation {object} * - id {int} * - joinDate {int} * - title {string} * - inviter {object : ParticipantVO} * - participants {list : ParticipantVO} * - time {int} * - lastMessage {string} * - lastParticipantName {string} * - group {boolean} * - partner {int} * - lastParticipantImage {string} * - image {string} * - description {string} * - unreadCount {int} * - lastSeenMessageId {int} * - lastSeenMessageTime {int} * - lastSeenMessageNanos {integer} * - lastMessageVO {object : ChatMessageVO} * - pinMessageVO {object : pinMessageVO} * - partnerLastSeenMessageId {int} * - partnerLastSeenMessageTime {int} * - partnerLastSeenMessageNanos {integer} * - partnerLastDeliveredMessageId {int} * - partnerLastDeliveredMessageTime {int} * - partnerLastDeliveredMessageNanos {integer} * - type {int} * - metadata {string} * - mute {boolean} * - participantCount {int} * - canEditInfo {boolean} * - canSpam {boolean} * - admin {boolean} * - mentioned {boolean} * - pin {boolean} * - uniqueName {string} * - userGroupHash {string} * - leftWithHistory {boolean} * - closed {boolean} */ var conversation = { id: messageContent.id, joinDate: messageContent.joinDate, title: messageContent.title, inviter: undefined, participants: undefined, time: messageContent.time, lastMessage: messageContent.lastMessage, lastParticipantName: messageContent.lastParticipantName, group: messageContent.group, partner: messageContent.partner, lastParticipantImage: messageContent.lastParticipantImage, image: messageContent.image, description: messageContent.description, unreadCount: messageContent.unreadCount, lastSeenMessageId: messageContent.lastSeenMessageId, lastSeenMessageTime: (messageContent.lastSeenMessageNanos) ? (parseInt(parseInt(messageContent.lastSeenMessageTime) / 1000) * 1000000000) + parseInt(messageContent.lastSeenMessageNanos) : (parseInt(messageContent.lastSeenMessageTime)), lastMessageVO: undefined, pinMessageVO: undefined, partnerLastSeenMessageId: messageContent.partnerLastSeenMessageId, partnerLastSeenMessageTime: (messageContent.partnerLastSeenMessageNanos) ? (parseInt(parseInt(messageContent.partnerLastSeenMessageTime) / 1000) * 1000000000) + parseInt(messageContent.partnerLastSeenMessageNanos) : (parseInt(messageContent.partnerLastSeenMessageTime)), partnerLastDeliveredMessageId: messageContent.partnerLastDeliveredMessageId, partnerLastDeliveredMessageTime: (messageContent.partnerLastDeliveredMessageNanos) ? (parseInt(parseInt(messageContent.partnerLastDeliveredMessageTime) / 1000) * 1000000000) + parseInt(messageContent.partnerLastDeliveredMessageNanos) : (parseInt(messageContent.partnerLastDeliveredMessageTime)), archiveThread: messageContent.archiveThread, type: messageContent.type, metadata: messageContent.metadata, mute: messageContent.mute, participantCount: messageContent.participantCount, canEditInfo: messageContent.canEditInfo, canSpam: messageContent.canSpam, admin: messageContent.admin, mentioned: messageContent.mentioned, pin: messageContent.pin, uniqueName: messageContent.uniqueName, userGroupHash: messageContent.userGroupHash, leftWithHistory: messageContent.leftWithHistory, closed: messageContent.closed, seenByAnyAssistant: messageContent.seenByAnyAssistant, lastReactionVO: messageContent.lastReactionVO, reactionStatus: messageContent.reactionStatus }; // Add inviter if exist if (messageContent.inviter) { conversation.inviter = formatDataToMakeParticipant(messageContent.inviter, messageContent.id); } // Add participants list if exist if (messageContent.participants && Array.isArray(messageContent.participants)) { conversation.participants = []; for (var i = 0; i < messageContent.participants.length; i++) { var participantData = formatDataToMakeParticipant(messageContent.participants[i], messageContent.id); if (participantData) { conversation.participants.push(participantData); } } } // Add lastMessageVO if exist if (messageContent.lastMessageVO) { conversation.lastMessageVO = formatDataToMakeMessage(messageContent.id, messageContent.lastMessageVO); } // Add pinMessageVO if exist if (messageContent.pinMessageVO) { conversation.pinMessageVO = formatDataToMakePinMessage(messageContent.id, messageContent.pinMessageVO); } // return conversation; return JSON.parse(JSON.stringify(conversation)); } /** * Format Data To Make Linked User * * This functions re-formats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} linkedUser Object */ function formatDataToMakeLinkedUser(messageContent) { /** * + RelatedUserVO {object} * - coreUserId {int} * - username {string} * - nickname {string} * - name {string} * - image {string} */ var linkedUser = { coreUserId: (typeof messageContent.coreUserId !== 'undefined') ? messageContent.coreUserId : messageContent.id, username: messageContent.username, nickname: messageContent.nickname, name: messageContent.name, image: messageContent.image }; // return linkedUser; return JSON.parse(JSON.stringify(linkedUser)); } /** * Format Data To Make Contact * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} contact Object */ function formatDataToMakeContact(messageContent) { /** * + ContactVO {object} * - id {int} * - blocked {boolean} * - userId {int} * - firstName {string} * - lastName {string} * - image {string} * - email {string} * - cellphoneNumber {string} * - uniqueId {string} * - notSeenDuration {int} * - hasUser {boolean} * - linkedUser {object : RelatedUserVO} */ var contact = { id: messageContent.id, blocked: (typeof messageContent.blocked !== 'undefined') ? messageContent.blocked : false, userId: messageContent.userId, firstName: messageContent.firstName, lastName: messageContent.lastName, image: messageContent.profileImage, email: messageContent.email, cellphoneNumber: messageContent.cellphoneNumber, uniqueId: messageContent.uniqueId, notSeenDuration: messageContent.notSeenDuration, hasUser: messageContent.hasUser, linkedUser: undefined }; if (typeof messageContent.linkedUser !== 'undefined') { contact.linkedUser = formatDataToMakeLinkedUser(messageContent.linkedUser); } // return contact; return JSON.parse(JSON.stringify(contact)); } /** * Format Data To Make User * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} user Object */ function formatDataToMakeUser(messageContent) { /** * + User {object} * - id {int} * - name {string} * - email {string} * - cellphoneNumber {string} * - image {string} * - lastSeen {int} * - sendEnable {boolean} * - receiveEnable {boolean} * - contactSynced {boolean} * - chatProfileVO {object:chatProfileVO} */ var user = { id: messageContent.id, coreUserId: messageContent.coreUserId, username: messageContent.username, name: messageContent.name, email: messageContent.email, cellphoneNumber: messageContent.cellphoneNumber, image: messageContent.image, lastSeen: messageContent.lastSeen, sendEnable: messageContent.sendEnable, receiveEnable: messageContent.receiveEnable, contactSynced: messageContent.contactSynced, callCenter: messageContent.callCenter }; if (messageContent.contactId) { user.contactId = messageContent.contactId; } if (messageContent.contactName) { user.contactName = messageContent.contactName; } if (messageContent.contactFirstName) { user.contactFirstName = messageContent.contactFirstName; } if (messageContent.contactLastName) { user.contactLastName = messageContent.contactLastName; } if (messageContent.blocked) { user.blocked = messageContent.blocked; } // Add chatProfileVO if exist if (messageContent.chatProfileVO) { user.chatProfileVO = messageContent.chatProfileVO; } // return user; return JSON.parse(JSON.stringify(user)); } /** * Format Data To Make Blocked User * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} blockedUser Object */ function formatDataToMakeBlockedUser(messageContent) { /** * + BlockedUser {object} * - id {int} * - coreUserId {int} * - firstName {string} * - lastName {string} * - nickName {string} * - profileImage {string} * - contact {object: contactVO} */ var blockedUser = { blockId: messageContent.id, coreUserId: messageContent.coreUserId, firstName: messageContent.firstName, lastName: messageContent.lastName, nickName: messageContent.nickName, profileImage: messageContent.profileImage }; // Add contactVO if exist if (messageContent.contactVO) { blockedUser.contact = messageContent.contactVO; } // return blockedUser; return JSON.parse(JSON.stringify(blockedUser)); } function formatDataToMakeAssistanthistoryItem(messageContent) { var assistant = { actionType: Object.keys(assistantActionTypes)[Object.values(assistantActionTypes).indexOf(messageContent.actionType)], actionTime: messageContent.actionTime }; // Add chatProfileVO if exist if (messageContent.participantVO) { assistant.participantVO = messageContent.participantVO; } // return participant; return JSON.parse(JSON.stringify(assistant)); } function formatDataToMakeAssistantHistoryList(assistantsList) { var returnData = []; for (var i = 0; i < assistantsList.length; i++) { returnData.push(formatDataToMakeAssistanthistoryItem(assistantsList[i])); } return returnData; } /** * Format Data To Make Invitee * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} inviteeData Object */ function formatDataToMakeInvitee(messageContent) { /** * + InviteeVO {object} * - id {string} * - idType {int} */ return { id: messageContent.id, idType: inviteeVOidTypes[messageContent.idType] }; } /** * Reformat Thread Participants * * This functions reformats given Array of thread Participants * into proper thread participant * * @access private * * @param {object} participantsContent Array of Thread Participant Objects * @param {int} threadId Id of Thread * * @return {object} Formatted Thread Participant Array */ function reformatThreadParticipants(participantsContent, threadId) { var returnData = []; for (var i = 0; i < participantsContent.length; i++) { returnData.push(formatDataToMakeParticipant(participantsContent[i], threadId)); } return returnData; } export { formatDataToMakeConversation, formatDataToMakeAssistanthistoryItem, formatDataToMakeInvitee, formatDataToMakeMessage, formatDataToMakeBlockedUser, formatDataToMakeContact, formatDataToMakeReplyInfo, formatDataToMakeAssistantHistoryList, formatDataToMakeUser, formatDataToMakeForwardInfo, formatDataToMakeParticipant, reformatThreadHistory, formatDataToMakeLinkedUser, formatDataToMakePinMessage, reformatThreadParticipants }