UNPKG

softchatjs-core

Version:
1 lines 13.9 kB
{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["import moment from 'moment';\r\n\r\nimport { Conversation, StringOrNumber, Participant, ParticipantListInfo, Message, MessageStates, UserMeta } from \"./types\";\r\n\r\nfunction murmurHash3_x64_64(str: string, seed = 0) {\r\n let h1 = BigInt(seed);\r\n let h2 = BigInt(seed);\r\n const c1 = BigInt(\"0x87c37b91114253d5\");\r\n const c2 = BigInt(\"0x4cf5ad432745937f\");\r\n\r\n let length = str.length;\r\n const remainder = length & 15; // length % 16\r\n const bytes = length - remainder;\r\n\r\n for (let i = 0; i < bytes; i += 16) {\r\n let k1 =\r\n BigInt(str.charCodeAt(i)) |\r\n (BigInt(str.charCodeAt(i + 1)) << BigInt(8)) |\r\n (BigInt(str.charCodeAt(i + 2)) << BigInt(16)) |\r\n (BigInt(str.charCodeAt(i + 3)) << BigInt(24)) |\r\n (BigInt(str.charCodeAt(i + 4)) << BigInt(32)) |\r\n (BigInt(str.charCodeAt(i + 5)) << BigInt(40)) |\r\n (BigInt(str.charCodeAt(i + 6)) << BigInt(48)) |\r\n (BigInt(str.charCodeAt(i + 7)) << BigInt(56));\r\n\r\n let k2 =\r\n BigInt(str.charCodeAt(i + 8)) |\r\n (BigInt(str.charCodeAt(i + 9)) << BigInt(8)) |\r\n (BigInt(str.charCodeAt(i + 10)) << BigInt(16)) |\r\n (BigInt(str.charCodeAt(i + 11)) << BigInt(24)) |\r\n (BigInt(str.charCodeAt(i + 12)) << BigInt(32)) |\r\n (BigInt(str.charCodeAt(i + 13)) << BigInt(40)) |\r\n (BigInt(str.charCodeAt(i + 14)) << BigInt(48)) |\r\n (BigInt(str.charCodeAt(i + 15)) << BigInt(56));\r\n\r\n k1 = k1 * c1;\r\n k1 = (k1 << BigInt(31)) | (k1 >> BigInt(33));\r\n k1 = k1 * c2;\r\n h1 ^= k1;\r\n\r\n h1 = (h1 << BigInt(27)) | (h1 >> BigInt(37));\r\n h1 = h1 + h2;\r\n h1 = h1 * BigInt(5) + BigInt(\"0x52dce729\");\r\n\r\n k2 = k2 * c2;\r\n k2 = (k2 << BigInt(33)) | (k2 >> BigInt(31));\r\n k2 = k2 * c1;\r\n h2 ^= k2;\r\n\r\n h2 = (h2 << BigInt(31)) | (h2 >> BigInt(33));\r\n h2 = h1 + h2;\r\n h2 = h2 * BigInt(5) + BigInt(\"0x38495ab5\");\r\n }\r\n\r\n let k1 = BigInt(0);\r\n let k2 = BigInt(0);\r\n\r\n switch (remainder) {\r\n case 15:\r\n k2 ^= BigInt(str.charCodeAt(bytes + 14)) << BigInt(48);\r\n case 14:\r\n k2 ^= BigInt(str.charCodeAt(bytes + 13)) << BigInt(40);\r\n case 13:\r\n k2 ^= BigInt(str.charCodeAt(bytes + 12)) << BigInt(32);\r\n case 12:\r\n k2 ^= BigInt(str.charCodeAt(bytes + 11)) << BigInt(24);\r\n case 11:\r\n k2 ^= BigInt(str.charCodeAt(bytes + 10)) << BigInt(16);\r\n case 10:\r\n k2 ^= BigInt(str.charCodeAt(bytes + 9)) << BigInt(8);\r\n case 9:\r\n k2 ^= BigInt(str.charCodeAt(bytes + 8));\r\n k2 = k2 * c2;\r\n k2 = (k2 << BigInt(33)) | (k2 >> BigInt(31));\r\n k2 = k2 * c1;\r\n h2 ^= k2;\r\n case 8:\r\n k1 ^= BigInt(str.charCodeAt(bytes + 7)) << BigInt(56);\r\n case 7:\r\n k1 ^= BigInt(str.charCodeAt(bytes + 6)) << BigInt(48);\r\n case 6:\r\n k1 ^= BigInt(str.charCodeAt(bytes + 5)) << BigInt(40);\r\n case 5:\r\n k1 ^= BigInt(str.charCodeAt(bytes + 4)) << BigInt(32);\r\n case 4:\r\n k1 ^= BigInt(str.charCodeAt(bytes + 3)) << BigInt(24);\r\n case 3:\r\n k1 ^= BigInt(str.charCodeAt(bytes + 2)) << BigInt(16);\r\n case 2:\r\n k1 ^= BigInt(str.charCodeAt(bytes + 1)) << BigInt(8);\r\n case 1:\r\n k1 ^= BigInt(str.charCodeAt(bytes));\r\n k1 = k1 * c1;\r\n k1 = (k1 << BigInt(31)) | (k1 >> BigInt(33));\r\n k1 = k1 * c2;\r\n h1 ^= k1;\r\n }\r\n\r\n h1 ^= BigInt(length);\r\n h2 ^= BigInt(length);\r\n\r\n h1 += h2;\r\n h2 += h1;\r\n\r\n h1 ^= h1 >> BigInt(33);\r\n h1 = h1 * BigInt(\"0xff51afd7ed558ccd\");\r\n h1 ^= h1 >> BigInt(33);\r\n h1 = h1 * BigInt(\"0xc4ceb9fe1a85ec53\");\r\n h1 ^= h1 >> BigInt(33);\r\n\r\n h2 ^= h2 >> BigInt(33);\r\n h2 = h2 * BigInt(\"0xff51afd7ed558ccd\");\r\n h2 ^= h2 >> BigInt(33);\r\n h2 = h2 * BigInt(\"0xc4ceb9fe1a85ec53\");\r\n h2 ^= h2 >> BigInt(33);\r\n\r\n h1 += h2;\r\n h2 += h1;\r\n\r\n // Combine h1 and h2 to return a 64-bit hash\r\n return (h1 & BigInt(\"0xFFFFFFFFFFFFFFFF\")).toString(16);\r\n}\r\n\r\n// Updated generateConversationId using MurmurHash3 x64 (64-bit)\r\nexport function generateConversationId(str1: string, str2: string, projectId: string) {\r\n // Sort the strings alphabetically to ensure consistency\r\n const sortedStrings = [str1, str2].sort();\r\n // Concatenate the sorted strings with a delimiter\r\n const combinedString = sortedStrings.join(\"_\");\r\n // Generate a 64-bit hash of the combined string using MurmurHash3 x64\r\n const hash = murmurHash3_x64_64(`${projectId}:${combinedString}`);\r\n // Return the hash as the unique ID\r\n return hash;\r\n}\r\n\r\nexport const generateId = () => {\r\n let uuid = '';\r\n const characters = 'abcdef0123456789';\r\n for (let i = 0; i < 32; i++) {\r\n const randomNumber = Math.floor(Math.random() * characters.length);\r\n const character = characters.charAt(randomNumber);\r\n if (i === 8 || i === 12 || i === 16 || i === 20) {\r\n uuid += '-';\r\n }\r\n uuid += character;\r\n }\r\n return uuid;\r\n}\r\n\r\n\r\nexport const getUserInfoWithId = (userId: string, participantList: ParticipantListInfo[]): {\r\n presentUser: UserMeta | undefined,\r\n receivingUser: UserMeta | undefined,\r\n} => {\r\n let presentUser = participantList.find(participant => participant.participantId === userId);\r\n let otherParticipants = participantList.filter(participant => participant.participantId !== userId)\r\n return { presentUser: presentUser?.participantDetails, receivingUser: otherParticipants[0]?.participantDetails };\r\n};\r\n\r\nexport const truncate = (str: string, len: number) => {\r\n return str.length > len ? str.substring(0, len)+'...' : str;\r\n}\r\n\r\nexport const getConversationTitle = (userId: string, converstaion: Conversation) => {\r\n if(converstaion.conversationType === 'private-chat'){\r\n const userInfos = getUserInfoWithId(userId, converstaion.participantList);\r\n\r\n const firstname = userInfos.receivingUser?.firstname\r\n const username = userInfos.receivingUser?.username\r\n return firstname? firstname : username\r\n }\r\n if(converstaion.conversationType === 'group-chat') {\r\n return converstaion.groupMeta?.groupName || 'no-groupname'\r\n }\r\n}\r\n\r\nexport const getUsernameInitials = (username: string) =>{\r\n return username.substring(0, 1)\r\n}\r\n\r\nexport function formatMessageTime(time: Date | string) {\r\n return moment(new Date(time)).format(\"hh:mm a\");\r\n}\r\n\r\nexport function formatConversationTime(time: Date | string) {\r\n const now = moment();\r\n const then = moment(time);\r\n const duration = moment.duration(now.diff(then));\r\n\r\n // Get the largest unit\r\n const years = Math.floor(duration.asYears());\r\n if (years > 0) return years + 'yr';\r\n\r\n const months = Math.floor(duration.asMonths());\r\n if (months > 0) return months + 'mo';\r\n\r\n const weeks = Math.floor(duration.asWeeks());\r\n if (weeks > 0) return weeks + 'w';\r\n\r\n const days = Math.floor(duration.asDays());\r\n if (days > 0) return days + 'd';\r\n\r\n const hours = Math.floor(duration.asHours());\r\n if (hours > 0) return hours + 'h';\r\n\r\n const minutes = Math.floor(duration.asMinutes());\r\n if (minutes > 0) return minutes + 'm';\r\n\r\n // If duration is less than 1 minute\r\n return 'Just now';\r\n}\r\n\r\nexport const generateFillerTimestamps = () => {\r\n return {\r\n createdAt: new Date(),\r\n updatedAt: new Date(),\r\n }\r\n}\r\n\r\nexport const getUnreadMessageIds = (conversation: Conversation, userId: string) => {\r\n var ids: string[] = []\r\n conversation.messages.map(m => {\r\n if (m.messageState === MessageStates.SENT && m.from !== userId) {\r\n ids.push(m.messageId)\r\n }\r\n })\r\n return ids\r\n}\r\n\r\nexport const getQuotedMessage = (messageId: string, messages: Message[]) => {\r\n const message = messages.find(msg => msg.messageId === messageId)\r\n return message\r\n}\r\n"],"mappings":"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","names":["moment","murmurHash3_x64_64","str","seed","h1","h2","c1","c2","length","remainder","bytes","i","k1","k2","generateConversationId","str1","str2","projectId","combinedString","generateId","uuid","characters","randomNumber","character","getUserInfoWithId","userId","participantList","presentUser","participant","otherParticipants","truncate","len","getConversationTitle","converstaion","userInfos","firstname","username","getUsernameInitials","formatMessageTime","time","moment","formatConversationTime","now","then","duration","years","months","weeks","days","hours","minutes","generateFillerTimestamps","getUnreadMessageIds","conversation","ids","m","getQuotedMessage","messageId","messages","msg"]}