podchat
Version:
Javascript SDK to use POD's Chat Service
766 lines (696 loc) • 27.6 kB
JavaScript
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
}