This repository was archived by the owner on Aug 30, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathutils-818b10da.js.map
1 lines (1 loc) · 33.4 KB
/
utils-818b10da.js.map
1
{"version":3,"file":"utils-818b10da.js","sources":["../src/utils/index.ts","../src/ui/FileMessage/utils.js"],"sourcesContent":["import format from 'date-fns/format';\nimport { AdminMessage, Emoji, EmojiCategory, EmojiContainer, FileMessage, GroupChannel, GroupChannelListQuery, Member, MessageListParams, OpenChannel, Reaction, SendBirdInstance, User, UserMessage } from \"sendbird\";\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types\nconst SUPPORTED_MIMES = {\n IMAGE: [\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp', // not supported in IE\n ],\n VIDEO: [\n 'video/mpeg',\n 'video/ogg',\n 'video/webm',\n 'video/mp4',\n ],\n AUDIO: [\n 'audio/aac',\n 'audio/midi',\n 'audio/x-midi',\n 'audio/mpeg',\n 'audio/ogg',\n 'audio/opus',\n 'audio/wav',\n 'audio/webm',\n 'audio/3gpp',\n 'audio/3gpp2',\n 'audio/mp3',\n ],\n};\n\nexport interface UIKitMessageTypes {\n ADMIN: \"ADMIN\",\n TEXT: \"TEXT\",\n FILE: \"FILE\",\n THUMBNAIL: \"THUMBNAIL\",\n OG: \"OG\",\n UNKNOWN: \"UNKNOWN\",\n}\nconst UIKitMessageTypes: UIKitMessageTypes = {\n ADMIN: \"ADMIN\",\n TEXT: \"TEXT\",\n FILE: \"FILE\",\n THUMBNAIL: \"THUMBNAIL\",\n OG: \"OG\",\n UNKNOWN: \"UNKNOWN\",\n};\nexport interface UIKitFileTypes {\n IMAGE: \"IMAGE\",\n AUDIO: \"AUDIO\",\n VIDEO: \"VIDEO\",\n GIF: \"GIF\",\n OTHERS: \"OTHERS\",\n}\nexport const UIKitFileTypes: UIKitFileTypes = {\n IMAGE: \"IMAGE\",\n AUDIO: \"AUDIO\",\n VIDEO: \"VIDEO\",\n GIF: \"GIF\",\n OTHERS: \"OTHERS\",\n};\n\nexport interface SendingMessageStatus {\n NONE: 'none',\n SUCCEEDED: 'succeeded',\n FAILED: 'failed',\n PENDING: 'pending',\n}\nconst SendingMessageStatus: SendingMessageStatus = {\n NONE: 'none',\n SUCCEEDED: 'succeeded',\n FAILED: 'failed',\n PENDING: 'pending',\n};\n\nexport interface OutgoingMessageStates {\n NONE: 'NONE',\n PENDING: 'PENDING',\n SENT: 'SENT',\n FAILED: 'FAILED',\n DELIVERED: 'DELIVERED',\n READ: 'READ',\n // delivered and read are only in group channel\n}\nconst OutgoingMessageStates: OutgoingMessageStates = {\n NONE: 'NONE',\n PENDING: 'PENDING',\n SENT: 'SENT',\n FAILED: 'FAILED',\n DELIVERED: 'DELIVERED',\n READ: 'READ',\n};\n\nexport type CoreMessageType = AdminMessage | UserMessage | FileMessage;\n\nexport const isImage = (type: string): boolean => SUPPORTED_MIMES.IMAGE.indexOf(type) >= 0;\nexport const isVideo = (type: string): boolean => SUPPORTED_MIMES.VIDEO.indexOf(type) >= 0;\nexport const isGif = (type: string): boolean => type === 'image/gif';\nexport const isSupportedFileView = (type: string): boolean => isImage(type) || isVideo(type);\nexport const isAudio = (type: string): boolean => SUPPORTED_MIMES.AUDIO.indexOf(type) >= 0;\n\nexport const getUIKitFileTypes = (): UIKitFileTypes => ({ ...UIKitFileTypes });\nexport const getUIKitFileType = (type: string): string => {\n if (isImage(type)) return UIKitFileTypes.IMAGE;\n if (isVideo(type)) return UIKitFileTypes.VIDEO;\n if (isAudio(type)) return UIKitFileTypes.AUDIO;\n if (isGif(type)) return UIKitFileTypes.GIF;\n return UIKitFileTypes.OTHERS;\n};\nexport const getOutgoingMessageStates = (): OutgoingMessageStates => ({ ...OutgoingMessageStates });\nexport const getOutgoingMessageState = (channel: GroupChannel | OpenChannel, message: UserMessage | FileMessage): string => {\n if (message.sendingStatus === 'pending') return OutgoingMessageStates.PENDING;\n if (message.sendingStatus === 'failed') return OutgoingMessageStates.FAILED;\n if (channel.isGroupChannel()) {\n /* GroupChannel only */\n if ((channel as GroupChannel).getUnreadMemberCount(message) === 0) {\n return OutgoingMessageStates.READ;\n } else if ((channel as GroupChannel).getUndeliveredMemberCount(message) === 0) {\n return OutgoingMessageStates.DELIVERED;\n }\n }\n if (message.sendingStatus === 'succeeded') return OutgoingMessageStates.SENT;\n return OutgoingMessageStates.NONE;\n};\nexport const isSentMessage = (channel: GroupChannel | OpenChannel, message: UserMessage | FileMessage): boolean => (\n getOutgoingMessageState(channel, message) === OutgoingMessageStates.SENT\n || getOutgoingMessageState(channel, message) === OutgoingMessageStates.DELIVERED\n || getOutgoingMessageState(channel, message) === OutgoingMessageStates.READ\n);\nexport const isDeliveredMessage = (channel: GroupChannel, message: UserMessage | FileMessage): boolean => (\n getOutgoingMessageState(channel, message) === OutgoingMessageStates.DELIVERED\n || getOutgoingMessageState(channel, message) === OutgoingMessageStates.READ\n);\nexport const isReadMessage = (channel: GroupChannel, message: UserMessage | FileMessage): boolean => (\n getOutgoingMessageState(channel, message) === OutgoingMessageStates.READ\n);\nexport const isFailedMessage = (channel: GroupChannel | OpenChannel, message: UserMessage | FileMessage): boolean => (\n getOutgoingMessageState(channel, message) === OutgoingMessageStates.FAILED\n);\nexport const isPendingMessage = (channel: GroupChannel | OpenChannel, message: UserMessage | FileMessage): boolean => (\n getOutgoingMessageState(channel, message) === OutgoingMessageStates.PENDING\n);\nexport const isSentStatus = (state: string): boolean => (\n state === OutgoingMessageStates.SENT\n || state === OutgoingMessageStates.DELIVERED\n || state === OutgoingMessageStates.READ\n);\n\nexport const isAdminMessage = (message: AdminMessage): boolean => (\n message && (message.isAdminMessage?.() || (message['messageType'] && message.messageType === 'admin'))\n);\nexport const isUserMessage = (message: UserMessage): boolean => (\n message && (message.isUserMessage?.() || (message['messageType'] && message.messageType === 'user'))\n);\nexport const isFileMessage = (message: FileMessage): boolean => (\n message && (message.isFileMessage?.() || (message['messageType'] && message.messageType === 'file'))\n);\n\nexport const isOGMessage = (message: UserMessage): boolean => !!(\n message && isUserMessage(message) && message?.ogMetaData && message?.ogMetaData?.url\n);\nexport const isTextMessage = (message: UserMessage): boolean => isUserMessage(message) && !isOGMessage(message);\nexport const isThumbnailMessage = (message: FileMessage): boolean => message && isFileMessage(message) && isSupportedFileView(message.type);\nexport const isImageMessage = (message: FileMessage): boolean => message && isThumbnailMessage(message) && isImage(message.type);\nexport const isVideoMessage = (message: FileMessage): boolean => message && isThumbnailMessage(message) && isVideo(message.type);\nexport const isGifMessage = (message: FileMessage): boolean => message && isThumbnailMessage(message) && isGif(message.type);\nexport const isAudioMessage = (message: FileMessage): boolean => message && isFileMessage(message) && isAudio(message.type);\n\nexport const isEditedMessage = (message: UserMessage): boolean => isUserMessage(message) && (message?.updatedAt > 0);\nexport const isEnabledOGMessage = (message: UserMessage): boolean => (\n (!message || !message.ogMetaData || !message.ogMetaData.url) ? false : true\n);\n\nexport const getUIKitMessageTypes = (): UIKitMessageTypes => ({ ...UIKitMessageTypes });\nexport const getUIKitMessageType = (message: CoreMessageType): string => {\n if (isAdminMessage(message as AdminMessage)) return UIKitMessageTypes.ADMIN;\n if (isUserMessage(message as UserMessage)) {\n return isOGMessage(message as UserMessage) ? UIKitMessageTypes.OG : UIKitMessageTypes.TEXT;\n }\n if (isFileMessage(message as FileMessage)) {\n return isThumbnailMessage(message as FileMessage) ? UIKitMessageTypes.THUMBNAIL : UIKitMessageTypes.FILE;\n }\n return UIKitMessageTypes.UNKNOWN;\n};\nexport const getSendingMessageStatus = (): SendingMessageStatus => ({ ...SendingMessageStatus });\n\nconst reducer = (accumulator: Array<string>, currentValue: string | Array<string>): Array<any> => {\n if (Array.isArray(currentValue)) {\n return [...accumulator, ...currentValue];\n } else {\n accumulator.push(currentValue);\n return accumulator;\n }\n};\nexport const getClassName = (classNames: string | Array<string | Array<string>>): string => (\n Array.isArray(classNames)\n ? classNames.reduce(reducer, []).join(' ')\n : classNames\n);\nexport const isReactedBy = (userId: string, reaction: Reaction): boolean => (\n reaction.userIds.some((reactorUserId: string): boolean => reactorUserId === userId)\n);\ninterface StringSet {\n TOOLTIP__YOU: string;\n TOOLTIP__AND_YOU: string;\n TOOLTIP__UNKNOWN_USER: string;\n}\nexport const getEmojiTooltipString = (reaction: Reaction, userId: string, memberNicknamesMap: Map<string, string>, stringSet: StringSet): string => {\n let you = '';\n if (isReactedBy(userId, reaction)) {\n you = reaction.userIds.length === 1 ? stringSet.TOOLTIP__YOU : stringSet.TOOLTIP__AND_YOU;\n }\n return (`${reaction.userIds\n .filter((reactorUserId: string) => reactorUserId !== userId)\n .map((reactorUserId: string) => (memberNicknamesMap.get(reactorUserId) || stringSet.TOOLTIP__UNKNOWN_USER))\n .join(', ')}${you}`);\n};\n\n// TODO: Use the interface after language tranlsatation of Sendbird.js\ninterface UIKitStore {\n stores: {\n sdkStore: {\n sdk: SendBirdInstance,\n },\n userStore: {\n user: User,\n },\n },\n config: {\n useReaction: boolean,\n }\n}\nexport const getCurrentUserId = (store: UIKitStore): string => (store?.stores?.userStore?.user?.userId);\nexport const getUseReaction = (store: UIKitStore, channel: GroupChannel | OpenChannel): boolean => {\n if (!store?.config?.useReaction)\n return false;\n if (!store?.stores?.sdkStore?.sdk?.appInfo?.isUsingReaction)\n return false;\n if (channel?.isGroupChannel())\n return !((channel as GroupChannel).isBroadcast || (channel as GroupChannel).isSuper);\n return store?.config?.useReaction;\n};\n\nexport const isMessageSentByMe = (userId: string, message: UserMessage | FileMessage): boolean => (\n (userId && message?.sender?.userId) && userId === message.sender.userId\n);\n\nconst URL_REG = /[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;\nexport const isUrl = (text: string): boolean => URL_REG.test(text);\n\nexport const truncateString = (fullStr: string, strLen?: number): string => {\n if (!strLen) strLen = 40;\n if (fullStr === null || fullStr === undefined) return '';\n if (fullStr.length <= strLen) return fullStr;\n const separator = '...';\n const sepLen = separator.length;\n const charsToShow = strLen - sepLen;\n const frontChars = Math.ceil(charsToShow / 2);\n const backChars = Math.floor(charsToShow / 2);\n return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars);\n};\n\nexport const copyToClipboard = (text: string): boolean => {\n // @ts-ignore: Unreachable code error\n if (window.clipboardData && window.clipboardData.setData) {\n // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible.\n // @ts-ignore: Unreachable code error\n return window.clipboardData.setData('Text', text);\n }\n if (document.queryCommandSupported && document.queryCommandSupported('copy')) {\n const textarea = document.createElement('textarea');\n textarea.textContent = text;\n textarea.style.position = 'fixed'; // Prevent scrolling to bottom of page in Microsoft Edge.\n document.body.appendChild(textarea);\n textarea.select();\n try {\n return document.execCommand('copy'); // Security exception may be thrown by some browsers.\n } catch (ex) {\n return false;\n } finally {\n document.body.removeChild(textarea);\n }\n }\n return false;\n};\n\nexport const getEmojiListAll = (emojiContainer: EmojiContainer): Array<Emoji> => (\n emojiContainer.emojiCategories\n .map((emojiCategory: EmojiCategory) => emojiCategory.emojis)\n .reduce((prevArr: Array<Emoji>, currArr: Array<Emoji>) => prevArr.concat(currArr), [])\n);\nexport const getEmojiMapAll = (emojiContainer: EmojiContainer): Map<string, Emoji> => {\n const emojiMap = new Map();\n emojiContainer.emojiCategories.forEach((category: EmojiCategory) => category.emojis.forEach((emoji: Emoji): void => { emojiMap.set(emoji.key, emoji) }));\n return emojiMap;\n};\n\nexport const getUserName = (user: User): string => (user?.friendName || user?.nickname || user?.userId);\nexport const getSenderName = (message: UserMessage | FileMessage): string => (message.sender && getUserName(message.sender));\nexport const getMessageCreatedAt = (message: UserMessage | FileMessage): string => format(message.createdAt || 0, 'p');\n\nexport const hasSameMembers = <T>(a: T[], b: T[]): boolean => {\n if (a === b) {\n return true;\n }\n if (a == null || b == null) {\n return false;\n }\n if (a.length !== b.length) {\n return false;\n }\n\n const sortedA = [...a].sort();\n const sortedB = [...b].sort();\n\n for (let i = 0; i < sortedA.length; ++i) {\n if (sortedA[i] !== sortedB[i]) {\n return false;\n }\n }\n return true;\n}\nexport const isFriend = (user: User): boolean => !!(user.friendDiscoveryKey || user.friendName);\n\nexport const filterMessageListParams = (params: MessageListParams, message: UserMessage | FileMessage | AdminMessage): boolean => {\n if (params?.messageType && params.messageType !== message.messageType) {\n return false;\n }\n if (params?.customTypes?.length > 0 && !params.customTypes.includes(message.customType)) {\n return false;\n }\n if (params?.senderUserIds?.length > 0) {\n if (message?.isUserMessage() || message.isFileMessage()) {\n if (!params?.senderUserIds?.includes((message as UserMessage | FileMessage).sender.userId)) {\n return false;\n }\n } else {\n return false;\n }\n }\n return true;\n};\n\ninterface SDKChannelListParamsPrivateProps extends GroupChannelListQuery {\n _searchFilter: {\n search_query: string,\n search_fields: Array<'member_nickname' | 'channel_name'>,\n };\n _userIdsFilter: {\n userIds: Array<string>,\n includeMode: boolean,\n queryType: 'AND' | 'OR',\n };\n}\nexport const filterChannelListParams = (params: SDKChannelListParamsPrivateProps, channel: GroupChannel, currentUserId: string): boolean => {\n if (!params?.includeEmpty && channel?.lastMessage && channel.lastMessage === null) {\n return false;\n }\n if (params?._searchFilter?.search_query && params._searchFilter.search_fields?.length > 0) {\n const searchFilter = params._searchFilter;\n const searchQuery = searchFilter.search_query;\n const searchFields = searchFilter.search_fields;\n if (searchQuery && searchFields && searchFields.length > 0) {\n if (!searchFields.some((searchField) => {\n switch (searchField) {\n case 'channel_name': {\n return channel.name.toLowerCase().includes(searchQuery.toLowerCase());\n }\n case 'member_nickname': {\n return channel.members.some((member: Member) => member.nickname.toLowerCase().includes(searchQuery.toLowerCase()));\n }\n default: {\n return true;\n }\n }\n })) {\n return false;\n }\n }\n }\n if (params?._userIdsFilter?.userIds?.length > 0) {\n const userIdsFilter = params._userIdsFilter;\n const { includeMode, queryType } = userIdsFilter;\n const userIds: string[] = userIdsFilter.userIds;\n const memberIds = channel.members.map((member: Member) => member.userId);\n if (!includeMode) { // exact match\n if (!userIds.includes(currentUserId)) {\n userIds.push(currentUserId); // add the caller's userId if not added already.\n }\n if (channel.members.length > userIds.length) {\n return false; // userIds may contain one or more non-member(s).\n }\n if (!hasSameMembers(userIds, memberIds)) {\n return false;\n }\n } else if (userIds.length > 0) { // inclusive\n switch (queryType) {\n case 'AND':\n if (userIds.some((userId: string) => !memberIds.includes(userId))) {\n return false;\n }\n break;\n case 'OR':\n if (userIds.every((userId: string) => !memberIds.includes(userId))) {\n return false;\n }\n break;\n }\n }\n }\n if (params?.includeEmpty === false && channel?.lastMessage === null) {\n return false;\n }\n if (params?.includeFrozen === false && channel?.isFrozen === true) {\n return false;\n }\n if (params?.customTypesFilter?.length > 0 && !params.customTypesFilter.includes(channel?.customType)) {\n return false;\n }\n if (params?.customTypeStartsWithFilter && !new RegExp(`^${params.customTypeStartsWithFilter}`).test(channel?.customType)) {\n return false;\n }\n if (params?.channelNameContainsFilter && !channel?.name?.toLowerCase().includes(params.channelNameContainsFilter.toLowerCase())) {\n return false;\n }\n if (params?.nicknameContainsFilter) {\n const lowerCasedSubString = params.nicknameContainsFilter.toLowerCase();\n if (channel?.members?.every((member: Member) => !member.nickname.toLowerCase().includes(lowerCasedSubString))) {\n return false;\n }\n }\n if (params?.channelUrlsFilter?.length > 0 && !params.channelUrlsFilter.includes(channel?.url)) {\n return false;\n }\n if (params?.memberStateFilter) {\n switch (params.memberStateFilter) {\n case 'joined_only':\n if (channel?.myMemberState !== 'joined') {\n return false;\n }\n break;\n case 'invited_only':\n if (channel?.myMemberState !== 'invited') {\n return false;\n }\n break;\n case 'invited_by_friend':\n if (channel?.myMemberState !== 'invited' || !isFriend(channel.inviter)) {\n return false;\n }\n break;\n case 'invited_by_non_friend':\n if (channel?.myMemberState !== 'invited' || isFriend(channel.inviter)) {\n return false;\n }\n break;\n }\n }\n if (params?.hiddenChannelFilter) {\n switch (params.hiddenChannelFilter) {\n case 'unhidden_only':\n if (channel?.isHidden || channel?.hiddenState !== 'unhidden') {\n return false;\n }\n break;\n case 'hidden_only':\n if (!channel?.isHidden) {\n return false;\n }\n break;\n case 'hidden_allow_auto_unhide':\n if (!channel?.isHidden || channel?.hiddenState !== 'hidden_allow_auto_unhide') {\n return false;\n }\n break;\n case 'hidden_prevent_auto_unhide':\n if (!channel?.isHidden || channel?.hiddenState !== 'hidden_prevent_auto_unhide') {\n return false;\n }\n break;\n }\n }\n if (params?.unreadChannelFilter) {\n switch (params.unreadChannelFilter) {\n case 'unread_message':\n if (channel?.unreadMessageCount === 0) {\n return false;\n }\n break;\n }\n }\n if (params?.publicChannelFilter) {\n switch (params.publicChannelFilter) {\n case 'public':\n if (!channel?.isPublic) {\n return false;\n }\n break;\n case 'private':\n if (channel?.isPublic) {\n return false;\n }\n break;\n }\n }\n if (params?.superChannelFilter) {\n switch (params.superChannelFilter) {\n case 'super':\n if (!channel?.isSuper) {\n return false;\n }\n break;\n case 'nonsuper':\n if (channel?.isSuper) {\n return false;\n }\n break;\n }\n }\n return true;\n};\n\nconst binarySearch = (list: Array<number>, number: number): number => {// [100, 99, 98, 97, ...]\n const pivot = Math.floor(list.length / 2);\n if (list[pivot] === number) {\n return pivot;\n }\n const leftList = list.slice(0, pivot);\n const rightList = list.slice(pivot + 1, list.length);\n if (list[pivot] > number) {\n if (rightList.length === 0) {\n return pivot + 1;\n }\n return pivot + binarySearch(rightList, number);\n } else {\n if (leftList.length === 0) {\n return pivot;\n }\n return binarySearch(leftList, number);\n }\n};\n// This is required when channel is displayed on channel list by filter\nexport const getChannelsWithUpsertedChannel = (channels: Array<GroupChannel>, channel: GroupChannel): Array<GroupChannel> => {\n if (channels.some((ch: GroupChannel) => ch.url === channel.url)) {\n return channels.map((ch: GroupChannel) => (ch.url === channel.url ? channel : ch));\n }\n const targetIndex = binarySearch(channels.map((channel: GroupChannel) => channel?.lastMessage?.createdAt), channel?.lastMessage?.createdAt);\n return [...channels.slice(0, targetIndex + 1), channel, ...channels.slice(targetIndex + 1, channels.length)];\n};\n","import MessageStatusType from '../MessageStatus/type';\n\nexport const truncate = (fullStr, strLen) => {\n if (fullStr === null || fullStr === undefined) return '';\n if (fullStr.length <= strLen) return fullStr;\n const separator = '...';\n const sepLen = separator.length;\n const charsToShow = strLen - sepLen;\n const frontChars = Math.ceil(charsToShow / 2);\n const backChars = Math.floor(charsToShow / 2);\n return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars);\n};\n\nexport const getIsSentFromStatus = (status) => (\n status === MessageStatusType.SENT\n || status === MessageStatusType.DELIVERED\n || status === MessageStatusType.READ\n);\n\nexport const getIsSentFromSendingStatus = (message = {}) => {\n if (message.sendingStatus && typeof message.sendingStatus === 'string') {\n return message.sendingStatus === 'none' || message.sendingStatus === 'succeeded';\n }\n return false;\n};\n\nexport default {\n truncate,\n getIsSentFromStatus,\n getIsSentFromSendingStatus,\n};\n"],"names":["hasSameMembers","a","b","length","sortedA","__spreadArray","sort","sortedB","i","isFriend","user","friendDiscoveryKey","friendName","filterMessageListParams","params","message","messageType","customTypes","includes","customType","senderUserIds","isUserMessage","isFileMessage","sender","userId","filterChannelListParams","channel","currentUserId","includeEmpty","lastMessage","_searchFilter","search_query","search_fields","searchFilter","searchQuery_1","searchFields","some","searchField","name","toLowerCase","members","member","nickname","_userIdsFilter","userIds","userIdsFilter","includeMode","queryType","memberIds_1","map","push","every","includeFrozen","isFrozen","customTypesFilter","customTypeStartsWithFilter","RegExp","test","channelNameContainsFilter","nicknameContainsFilter","lowerCasedSubString_1","channelUrlsFilter","url","memberStateFilter","myMemberState","inviter","hiddenChannelFilter","isHidden","hiddenState","unreadChannelFilter","unreadMessageCount","publicChannelFilter","isPublic","superChannelFilter","isSuper","binarySearch","list","number","pivot","Math","floor","leftList","slice","rightList","getChannelsWithUpsertedChannel","channels","ch","targetIndex","createdAt","truncate","fullStr","strLen","undefined","separator","sepLen","charsToShow","frontChars","ceil","backChars","substr","getIsSentFromStatus","status","MessageStatusType","SENT","DELIVERED","READ","getIsSentFromSendingStatus","sendingStatus"],"mappings":"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"}