{"version":3,"sources":["webpack://open_chat_assets/./src/website/css/emoji-mart.css","webpack://open_chat_assets/./src/website/css/index.css","webpack://open_chat_assets/./src/website/analytics/ga/tagManagerBodyScript.html","webpack://open_chat_assets/./src/website/analytics/ga/tagManagerHeaderScript.html","webpack://open_chat_assets/./src/website/css/emoji-mart.css?7d4a","webpack://open_chat_assets/./src/website/css/index.css?a6da","webpack://open_chat_assets/./src/website/icons/createGroupChat.svg","webpack://open_chat_assets/./src/website/icons/dollar.svg","webpack://open_chat_assets/./src/website/icons/doubleTick.svg","webpack://open_chat_assets/./src/website/icons/groupChatIcon.svg","webpack://open_chat_assets/./src/website/icons/paperclip.svg","webpack://open_chat_assets/./src/website/icons/search.svg","webpack://open_chat_assets/./src/website/icons/smiley.svg","webpack://open_chat_assets/./src/website/icons/tick.svg","webpack://open_chat_assets/./src/website/icons/tick2.svg","webpack://open_chat_assets/./src/website/icons/unknownUserAvatar.svg","webpack://open_chat_assets/./src/website/actions/app/changeSidePanel.ts","webpack://open_chat_assets/./src/website/actions/app/gotoHome.ts","webpack://open_chat_assets/./src/website/actions/app/modalSpinner.ts","webpack://open_chat_assets/./src/website/actions/app/selectTheme.ts","webpack://open_chat_assets/./src/website/actions/app/switchViewMode.ts","webpack://open_chat_assets/./src/website/actions/chats/addParticipants.ts","webpack://open_chat_assets/./src/website/actions/chats/blockUser.ts","webpack://open_chat_assets/./src/website/actions/chats/createGroupChat.ts","webpack://open_chat_assets/./src/website/actions/chats/deselectMessage.ts","webpack://open_chat_assets/./src/website/actions/chats/getAllChats.ts","webpack://open_chat_assets/./src/website/actions/chats/getMessages.ts","webpack://open_chat_assets/./src/website/actions/chats/getMessagesById.ts","webpack://open_chat_assets/./src/website/actions/chats/getUpdatedChats.ts","webpack://open_chat_assets/./src/website/actions/chats/gotoChat.ts","webpack://open_chat_assets/./src/website/actions/chats/gotoUser.ts","webpack://open_chat_assets/./src/website/actions/chats/joinGroup.ts","webpack://open_chat_assets/./src/website/actions/chats/leaveGroup.ts","webpack://open_chat_assets/./src/website/actions/chats/markMessagesAsRead.ts","webpack://open_chat_assets/./src/website/actions/chats/markMessagesAsReadServerSync.ts","webpack://open_chat_assets/./src/website/actions/chats/receiveP2PMessage.ts","webpack://open_chat_assets/./src/website/actions/chats/removeParticipant.ts","webpack://open_chat_assets/./src/website/actions/chats/replyToMessage.ts","webpack://open_chat_assets/./src/website/actions/chats/sendMessage.ts","webpack://open_chat_assets/./src/website/actions/chats/toggleNotifications.ts","webpack://open_chat_assets/./src/website/actions/chats/userTyping.ts","webpack://open_chat_assets/./src/website/actions/signin/login.ts","webpack://open_chat_assets/./src/website/actions/signin/logout.ts","webpack://open_chat_assets/./src/website/actions/signin/notifySessionExpired.ts","webpack://open_chat_assets/./src/website/actions/users/getCurrentUser.ts","webpack://open_chat_assets/./src/website/actions/users/getUsers.ts","webpack://open_chat_assets/./src/website/actions/users/markRemoteUserOnline.ts","webpack://open_chat_assets/./src/website/actions/users/registerUser.ts","webpack://open_chat_assets/./src/website/actions/users/setProfileImage.ts","webpack://open_chat_assets/./src/website/actions/users/updateMinutesSinceLastOnline.ts","webpack://open_chat_assets/./src/website/analytics/analyticsMiddleware.ts","webpack://open_chat_assets/./src/website/analytics/eventTracker.ts","webpack://open_chat_assets/./src/website/backgroundTasks.ts","webpack://open_chat_assets/./src/website/components/App.tsx","webpack://open_chat_assets/./src/website/components/AppRoot.tsx","webpack://open_chat_assets/./src/website/components/Login.tsx","webpack://open_chat_assets/./src/website/components/NotificationBar.tsx","webpack://open_chat_assets/./src/website/components/RegisterUser.tsx","webpack://open_chat_assets/./src/website/components/ThemeProvider.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/ChatList.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/ChatListItem.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/ChatListItemBuilder.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/DefaultPanel.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/Header.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/JoinGroupChatPanel.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/LeftPanel.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/MessageSearchMatch.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/MyAvatar.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/NewDirectChatPanel.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/NewGroupChatPanel.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/SearchResults.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/ThemeSelector.tsx","webpack://open_chat_assets/./src/website/components/leftPanel/UserMenu.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/AttachFile.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/CyclesContent.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/DayChangeMarker.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/DirectChatMenu.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/DraftFileMessage.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/DraftMediaMessage.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/EmojiPicker.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/FileContent.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/Footer.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/GroupChatMenu.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/Header.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/LastOnline.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/MainPanel.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/MediaContent.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/Message.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/MessageReplyPanel.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/MessageTextInput.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/MessageTimeAndTicks.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/MessagesFromSingleDay.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/MessagesList.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/ReplyToMessagePanel.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/ScrollToBottomButton.tsx","webpack://open_chat_assets/./src/website/components/mainPanel/SendCycles.tsx","webpack://open_chat_assets/./src/website/components/modals/Alert.tsx","webpack://open_chat_assets/./src/website/components/rightPanel/AddParticipantsPanel.tsx","webpack://open_chat_assets/./src/website/components/rightPanel/Header.tsx","webpack://open_chat_assets/./src/website/components/rightPanel/ParticipantsPanel.tsx","webpack://open_chat_assets/./src/website/components/rightPanel/RightPanel.tsx","webpack://open_chat_assets/./src/website/components/shared/BackButton.tsx","webpack://open_chat_assets/./src/website/components/shared/CircularIcon.tsx","webpack://open_chat_assets/./src/website/components/shared/CloseButton.tsx","webpack://open_chat_assets/./src/website/components/shared/CreateGroupChatIcon.tsx","webpack://open_chat_assets/./src/website/components/shared/DefaultGroupChatIcon.tsx","webpack://open_chat_assets/./src/website/components/shared/Emoji.tsx","webpack://open_chat_assets/./src/website/components/shared/Image.tsx","webpack://open_chat_assets/./src/website/components/shared/NameInput.tsx","webpack://open_chat_assets/./src/website/components/shared/ParticipantsTyping.tsx","webpack://open_chat_assets/./src/website/components/shared/PopOverMenu.tsx","webpack://open_chat_assets/./src/website/components/shared/SearchBox.tsx","webpack://open_chat_assets/./src/website/components/shared/TextContent.tsx","webpack://open_chat_assets/./src/website/components/shared/ThemTyping.tsx","webpack://open_chat_assets/./src/website/components/shared/UserAvatar.tsx","webpack://open_chat_assets/./src/website/components/shared/UserListItem.tsx","webpack://open_chat_assets/./src/website/components/shared/Video.tsx","webpack://open_chat_assets/./src/website/constants.ts","webpack://open_chat_assets/./src/website/domain/ChatsUpdater.ts","webpack://open_chat_assets/./src/website/domain/CurrentUserTypingHandler.ts","webpack://open_chat_assets/./src/website/domain/ExponentialBackoffRecurringTaskRunner.ts","webpack://open_chat_assets/./src/website/domain/MarkAsReadHandler.ts","webpack://open_chat_assets/./src/website/domain/RecurringTaskRunner.ts","webpack://open_chat_assets/./src/website/domain/RemoteUserTypingHandler.ts","webpack://open_chat_assets/./src/website/domain/SelectedThemeCache.ts","webpack://open_chat_assets/./src/website/domain/SessionExpirationHandler.ts","webpack://open_chat_assets/./src/website/domain/UnreadMessageDetector.ts","webpack://open_chat_assets/./src/website/domain/UnreadMessagesHandler.ts","webpack://open_chat_assets/./src/website/domain/historyFunctions.ts","webpack://open_chat_assets/./src/website/domain/messageFunctions.ts","webpack://open_chat_assets/./src/website/domain/model/chats.ts","webpack://open_chat_assets/./src/website/domain/model/messages.ts","webpack://open_chat_assets/./src/website/domain/model/panels.ts","webpack://open_chat_assets/./src/website/domain/model/theme.ts","webpack://open_chat_assets/./src/website/domain/model/users.ts","webpack://open_chat_assets/./src/website/domain/model/viewMode.ts","webpack://open_chat_assets/./src/website/domain/stateFunctions.ts","webpack://open_chat_assets/./src/website/domain/webRtc/RtcConnection.ts","webpack://open_chat_assets/./src/website/domain/webRtc/RtcConnectionFactory.ts","webpack://open_chat_assets/./src/website/domain/webRtc/RtcConnectionsHandler.ts","webpack://open_chat_assets/./src/website/domain/webRtc/RtcConnectionsStore.ts","webpack://open_chat_assets/./src/website/domain/webRtc/RtcMessageReceiver.ts","webpack://open_chat_assets/./src/website/domain/webRtc/webRtcMiddleware.ts","webpack://open_chat_assets/./src/website/errors/errorMiddleware.ts","webpack://open_chat_assets/./src/website/errors/httpError.ts","webpack://open_chat_assets/./src/website/formatters/cycles.ts","webpack://open_chat_assets/./src/website/formatters/date.ts","webpack://open_chat_assets/./src/website/formatters/fileSize.ts","webpack://open_chat_assets/./src/website/index.tsx","webpack://open_chat_assets/./src/website/notifications.ts","webpack://open_chat_assets/./src/website/reducers/appReducer.ts","webpack://open_chat_assets/./src/website/reducers/chatsReducer.ts","webpack://open_chat_assets/./src/website/reducers/index.ts","webpack://open_chat_assets/./src/website/reducers/usersReducer.ts","webpack://open_chat_assets/./src/website/services/CanisterClientFactory.ts","webpack://open_chat_assets/./src/website/services/candidConverters/chat.ts","webpack://open_chat_assets/./src/website/services/candidConverters/localMessage.ts","webpack://open_chat_assets/./src/website/services/candidConverters/messageContent.ts","webpack://open_chat_assets/./src/website/services/candidConverters/myProfile.ts","webpack://open_chat_assets/./src/website/services/candidConverters/option.ts","webpack://open_chat_assets/./src/website/services/candidConverters/p2pConnectionDetails.ts","webpack://open_chat_assets/./src/website/services/candidConverters/rangeSet.ts","webpack://open_chat_assets/./src/website/services/candidConverters/replyContext.ts","webpack://open_chat_assets/./src/website/services/candidConverters/timestamp.ts","webpack://open_chat_assets/./src/website/services/candidConverters/userId.ts","webpack://open_chat_assets/./src/website/services/candidConverters/userSummary.ts","webpack://open_chat_assets/./src/website/services/chats/addParticipants.ts","webpack://open_chat_assets/./src/website/services/chats/blockUser.ts","webpack://open_chat_assets/./src/website/services/chats/createGroupChat.ts","webpack://open_chat_assets/./src/website/services/chats/getMessages.ts","webpack://open_chat_assets/./src/website/services/chats/getUpdates.ts","webpack://open_chat_assets/./src/website/services/chats/joinGroup.ts","webpack://open_chat_assets/./src/website/services/chats/leaveGroup.ts","webpack://open_chat_assets/./src/website/services/chats/markRead.ts","webpack://open_chat_assets/./src/website/services/chats/removeParticipant.ts","webpack://open_chat_assets/./src/website/services/chats/searchAllMessages.ts","webpack://open_chat_assets/./src/website/services/chats/sendDirectMessage.ts","webpack://open_chat_assets/./src/website/services/chats/sendMessage.ts","webpack://open_chat_assets/./src/website/services/chats/service.ts","webpack://open_chat_assets/./src/website/services/chats/toggleNotifications.ts","webpack://open_chat_assets/./src/website/services/data/CacheManager.ts","webpack://open_chat_assets/./src/website/services/data/CachingDataService.ts","webpack://open_chat_assets/./src/website/services/data/DataService.ts","webpack://open_chat_assets/./src/website/services/data/getChunk.ts","webpack://open_chat_assets/./src/website/services/data/putChunk.ts","webpack://open_chat_assets/./src/website/services/notifications/pushSubscription.ts","webpack://open_chat_assets/./src/website/services/notifications/service.ts","webpack://open_chat_assets/./src/website/services/notifications/subscriptionExists.ts","webpack://open_chat_assets/./src/website/services/p2p/addAnswers.ts","webpack://open_chat_assets/./src/website/services/p2p/addOffers.ts","webpack://open_chat_assets/./src/website/services/p2p/getConnectionDetails.ts","webpack://open_chat_assets/./src/website/services/p2p/removeConnectionDetails.ts","webpack://open_chat_assets/./src/website/services/p2p/service.ts","webpack://open_chat_assets/./src/website/services/userMgmt/getCurrentUser.ts","webpack://open_chat_assets/./src/website/services/userMgmt/getUserId.ts","webpack://open_chat_assets/./src/website/services/userMgmt/getUsers.ts","webpack://open_chat_assets/./src/website/services/userMgmt/markAsOnline.ts","webpack://open_chat_assets/./src/website/services/userMgmt/registerUser.ts","webpack://open_chat_assets/./src/website/services/userMgmt/searchUsers.ts","webpack://open_chat_assets/./src/website/services/userMgmt/service.ts","webpack://open_chat_assets/./src/website/services/userMgmt/setProfileImage.ts","webpack://open_chat_assets/./src/website/services/userMgmt/updateUsername.ts","webpack://open_chat_assets/./src/website/startup/index.ts","webpack://open_chat_assets/./src/website/store.ts","webpack://open_chat_assets/./src/website/theme.ts","webpack://open_chat_assets/./src/website/utils/Dimensions.ts","webpack://open_chat_assets/./src/website/utils/ImmutableDataCache.ts","webpack://open_chat_assets/./src/website/utils/Stopwatch.ts","webpack://open_chat_assets/./src/website/utils/authClient.ts","webpack://open_chat_assets/./src/website/utils/base64Functions.ts","webpack://open_chat_assets/./src/website/utils/blobFunctions.ts","webpack://open_chat_assets/./src/website/utils/cycleFunctions.ts","webpack://open_chat_assets/./src/website/utils/dateFunctions.ts","webpack://open_chat_assets/./src/website/utils/emojiFunctions.ts","webpack://open_chat_assets/./src/website/utils/setFunctions.ts","webpack://open_chat_assets/./src/website/utils/u64Functions.ts","webpack://open_chat_assets/./src/website/utils/urlFunctions.ts","webpack://open_chat_assets/./src/website/services/chats/candid/idl.js","webpack://open_chat_assets/./src/website/services/notifications/candid/idl.js","webpack://open_chat_assets/./src/website/services/p2p/candid/idl.js","webpack://open_chat_assets/./src/website/services/userMgmt/candid/idl.js","webpack://open_chat_assets/webpack/bootstrap","webpack://open_chat_assets/webpack/runtime/amd options","webpack://open_chat_assets/webpack/runtime/compat get default export","webpack://open_chat_assets/webpack/runtime/define property getters","webpack://open_chat_assets/webpack/runtime/global","webpack://open_chat_assets/webpack/runtime/harmony module decorator","webpack://open_chat_assets/webpack/runtime/hasOwnProperty shorthand","webpack://open_chat_assets/webpack/runtime/make namespace object","webpack://open_chat_assets/webpack/runtime/node module decorator","webpack://open_chat_assets/webpack/runtime/jsonp chunk loading","webpack://open_chat_assets/webpack/startup"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","options","React","CreateGroupChat","props","createElement","defaultProps","default","Dollar","DoubleTick","GroupChatIcon","Paperclip","Search","Smiley","Tick","Tick2","UnknownUserAvatar","Object","defineProperty","value","changeRightPanel","changeLeftPanel","RIGHT_PANEL_CHANGED","MIDDLE_PANEL_CHANGED","LEFT_PANEL_CHANGED","sidePanel","type","payload","GOTO_HOME","stopSpinning","startSpinning","STOP_SPINNING","START_SPINNING","THEME_SELECTED","theme","SWITCH_VIEW_MODE_REQUESTED","viewMode","dispatch","getState","selectedChatIndex","chatsState","isChatSelected","__createBinding","this","create","o","m","k","k2","undefined","enumerable","get","__setModuleDefault","v","__importStar","mod","__esModule","result","prototype","hasOwnProperty","call","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","done","then","apply","__importDefault","ADD_PARTICIPANTS_SUCCEEDED","service_1","constants_1","Stopwatch_1","modalSpinner_1","Alert_1","setFunctions","chat","userIds","kind","UNCONFIRMED_GROUP_CHAT","timer","startNew","response","addParticipants","chatId","usersAdded","exceptWith","blocked","text","title","length","countAdded","alertDialog","users","durationMs","getElapsedMs","blockUser","USER_UNBLOCKED","USER_BLOCKED","userId","unblock","event","CREATE_GROUP_CHAT_FAILED","CREATE_GROUP_CHAT_SUCCEEDED","CREATE_GROUP_CHAT_REQUESTED","chatFunctions","sendMessage_1","subject","chatHistoryVisibleToNewJoiners","generateChatId","requestEvent","createGroupChat","oldChat","getChat","chats","messagesToSend","messages","forEach","content","repliesTo","DESELECT_MESSAGE","GET_ALL_CHATS_FAILED","GET_ALL_CHATS_SUCCEEDED","GET_ALL_CHATS_REQUESTED","viewMode_1","historyFunctions_1","getUpdates","updatedSince","messageCountForTopChat","PAGE_SIZE","outcomeEvent","appState","chatIndex","ViewMode","Desktop","selectedChatId","extractChatIdFromLocation","_","index","tryGetChat","blockedUsers","latestUpdateTimestamp","ABOUT_US","httpError","GET_MESSAGES_FAILED","GET_MESSAGES_SUCCEEDED","GET_MESSAGES_REQUESTED","fromId","count","request","getMessages","GET_MESSAGES_BY_ID_FAILED","GET_MESSAGES_BY_ID_SUCCEEDED","GET_MESSAGES_BY_ID_REQUESTED","messageIds","getMessagesById","GET_UPDATED_CHATS_FAILED","GET_UPDATED_CHATS_SUCCEEDED","GET_UPDATED_CHATS_REQUESTED","gotoChatByIndex","gotoChatById","GOTO_CHAT","CurrentUserTypingHandler_1","MarkAsReadHandler_1","notifications","gotoChat","messageId","fromHistory","prevChat","isConfirmedChat","markTypingStopped","updateServer","missingMessages","_a","excessMessages","from","Math","max","pageSize","minLocalMessageId","console","log","loadMissingMessages","find","close","findChatIndex","gotoKnownUser","DIRECT_CHAT_CREATED","gotoChat_1","gotoUser","user","directChatIndex","findDirectChatIndex","newChat","newUnconfirmedDirectChat","usersState","userDictionary","Error","JOIN_GROUP_FAILED_ALREADY_IN_GROUP","JOIN_GROUP_FAILED","JOIN_GROUP_SUCCEEDED","JOIN_GROUP_REQUESTED","joinGroup_1","ChatsUpdater_1","state","alert","joinGroup","JoinGroupResult","Success","triggerUpdate","AlreadyInGroup","LEAVE_GROUP_FAILED","LEAVE_GROUP_SUCCEEDED","LEAVE_GROUP_REQUESTED","leaveGroup_1","leaveGroup","LeaveGroupResult","markMessagesAsReadByClientIdRemotely","markMessagesAsReadRemotely","markMessagesAsReadByClientIdLocally","markMessagesAsReadLocally","markAllMessagesAsReadLocally","MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY","MARK_MESSAGES_AS_READ_REMOTELY","MARK_MESSAGES_AS_READ_BY_CLIENT_ID","MARK_ALL_MESSAGES_AS_READ","MARK_MESSAGES_AS_READ","clientMessageIds","MARK_MESSAGES_AS_READ_SERVER_SYNC_FAILED","MARK_MESSAGES_AS_READ_SERVER_SYNC_SUCCEEDED","MARK_MESSAGES_AS_READ_SERVER_SYNC_REQUESTED","toId","markRead","unreadMessageIds","RECEIVE_P2P_MESSAGE","message","includes","sender","REMOVE_PARTICIPANT_FAILED","REMOVE_PARTICIPANT_SUCCEEDED","REMOVE_PARTICIPANT_REQUESTED","removeParticipant_1","removeParticipant","RemoveParticipantResponse","cancelReplyToMessage","selectReplyToMessage","selectReplyPrivatelyToMessage","REPLY_TO_MESSAGE_CANCELLED","REPLY_TO_MESSAGE_SELECTED","gotoUser_1","replyContext","privateChatId","SEND_MESSAGE_CONTENT_UPLOAD_FAILED","SEND_MESSAGE_FAILED","SEND_MESSAGE_SUCCEEDED","SEND_MESSAGE_REQUESTED","uuid_1","CachingDataService_1","sendMessageContent","isDirectChat","them","clientMessageId","v1","toString","caption","mimeType","width","height","size","data","chunkSize","CHUNK_SIZE_BYTES","blobUrl","thumbnailData","blobDeleted","name","convertContent","uploadContentTask","putData","DataSource","MediaMessage","FileMessage","me","UNCONFIRMED_DIRECT_CHAT","CONFIRMED_DIRECT_CHAT","sendDirectMessage","username","sendMessage","myUserId","date","toggleNotifications","NOTIFICATIONS_UNMUTED","NOTIFICATIONS_MUTED","mute","toggle_notifications","remoteUserStoppedTyping","remoteUserTyping","currentUserStoppedTyping","currentUserTyping","REMOTE_USER_STOPPED_TYPING","REMOTE_USER_TYPING","CURRENT_USER_STOPPED_TYPING","CURRENT_USER_TYPING","authClient_1","getCurrentUser_1","CanisterClientFactory_1","SessionExpirationHandler_1","SESSION_TIMEOUT_NANOS","BigInt","authClient","login","identityProvider","maxTimeToLive","onSuccess","identity","getIdentity","init","startSession","USER_LOGGED_OUT","logout","userLoggedOutEvent","success","unregister","sessionExpiryAcknowledged","SESSION_EXPIRY_ACKNOWLEDGED","SESSION_EXPIRED","sessionExpiredEvent","GET_CURRENT_USER_FAILED","GET_CURRENT_USER_SUCCEEDED","GET_CURRENT_USER_REQUESTED","getCurrentUser","myProfile","GET_USERS_FAILED","GET_USERS_SUCCEEDED","GET_USERS_REQUESTED","requestAction","getUsers","timestamp","MARK_REMOTE_USER_ONLINE","REGISTER_USER_LIMIT_REACHED","REGISTER_USER_FAILED","REGISTER_USER_FAILED_USERNAME_EXISTS","REGISTER_USER_FAILED_USER_EXISTS","REGISTER_USER_SUCCEEDED","REGISTER_USER_REQUESTED","registerUser","userLimit","SET_PROFILE_IMAGE_DATA_UPLOAD_FAILED","SET_PROFILE_IMAGE_FAILED","SET_PROFILE_IMAGE_SUCCEEDED","SET_PROFILE_IMAGE_REQUESTED","setProfileImage_1","blobFunctions_1","imageId","putDataTask","Avatar","dataToBlobUrl","setProfileImage","SetProfileImageResponse","UPDATE_MINUTES_SINCE_LAST_ONLINE","eventTracker_1","_store","parameters","dataLayer","window","assign","setupBackgroundTasks","react_1","react_redux_1","stateFunctions","RecurringTaskRunner_1","RtcConnectionsHandler_1","ExponentialBackoffRecurringTaskRunner_1","getAllChats_1","getMessagesById_1","getUsers_1","updateMinutesSinceLastOnline_1","_b","_c","useDispatch","useSelector","sessionExpired","selectedChat","getSelectedChat","selectedChatUsers","usersOnline","values","filter","u","minutesSinceLastOnline","map","selectedChatUsersOnline","intersect","useEffect","getUnreadChatCount","document","APP_TITLE","unknownUserIds","c","messagesToDownload","messagesDownloading","slice","runUpdateChatsTask","chatsSyncedUpTo","stop","markAsOnline","taskRunner","MARK_CURRENT_USER_AS_ONLINE_INTERVAL_MS","userIdsCount","keys","updateUsers","usersSyncedUpTo","finally","UPDATE_USERS_INTERVAL_MS","setupMissingConnections","join","getConnections","REFRESH_P2P_CONNECTIONS_MIN_INTERVAL_MS","REFRESH_P2P_CONNECTIONS_MAX_INTERVAL_MS","StartOptions","TriggerTaskAndReturn","scavengeCache","SCAVENGE_CACHE_INTERVAL_MS","Divider_1","Grid_1","makeStyles_1","LeftPanel_1","MainPanel_1","RightPanel_1","backgroundTasks_1","panels_1","NotificationBar_1","classes","useStyles","panel","panelState","gridHeight","setGridHeight","useState","className","container","onRender","render","wrap","grid","leftPanel","LeftPanelType","None","left","Mobile","rightPanel","RightPanelType","Fragment","item","direction","orientation","flexItem","buildLeftPanel","middlePanel","MiddlePanelType","main","buildMainPanel","right","buildRightPanel","overflow","backgroundColor","colors","flex","mainPanel","display","flexDirection","useTheme_1","useMediaQuery_1","StyledEngineProvider_1","Container_1","Backdrop_1","CircularProgress_1","react_modal_promise_1","identity_1","App_1","store_1","Login_1","ThemeProvider_1","usersReducer_1","RegisterUser_1","notifySessionExpired_1","switchViewMode_1","gotoHome_1","Provider","store","injectFirst","AppContainer","body","outerBackgroundColor","lineHeight","header","flexShrink","padding","input","a","color","linkColor","textColor","fontSize","fontWeight","margin","breakpoints","down","backdrop","zIndex","drawer","position","top","isAnonymous","getPrincipal","canisterClientFactoryRequiresInit","setCanisterClientFactoryRequiresInit","current","currentUser","userRegistrationStatus","currentViewMode","modalSpinner","targetViewMode","removePadding","component","containerClass","large","UserRegistrationStatus","Registered","Unknown","NotRegistered","onpopstate","setDocVh","vh","innerHeight","documentElement","style","setProperty","onresize","DelegationIdentity","maxWidth","open","Button_1","Paper_1","login_1","paper","loginRegister","textAlign","icon","button","buttonTextColor","buttonBackgroundColor","src","variant","onClick","CloseButton_1","memo","showBar","setShowBar","showBackdrop","setShowBackdrop","renderBar","status","Status","Prompt","Granted","trySubscribe","sx","topBar","permission","askForPermission","cancelButton","alignItems","background","textDecoration","Person_1","Typography_1","registerUser_1","NameInput_1","alignSelf","nameInput","marginTop","errorText","minHeight","errorContainer","justifyContent","setErrorText","onSubmit","registerUserAsync","outcome","placeholderText","minLength","maxLength","theme_1","theme_2","selectedTheme","useSystemTheme","SelectedTheme","SystemDefault","isSystemDarkModeQuery","matchMedia","shouldDarkModeBeActive","Dark","matches","darkMode","setDarkMode","setDarkModeBasedOnSystemTheme","isSystemDarkMode","addEventListener","removeEventListener","darkTheme","lightTheme","children","List_1","chatListItemBuilder","build","disablePadding","list","_theme","overflowX","overflowY","ListItem_1","ListItemIcon_1","colorManipulator_1","date_1","ParticipantsTyping_1","TextContent_1","ThemTyping_1","DefaultGroupChatIcon_1","UserAvatar_1","listItem","listItemHoverBackgroundColor","cursor","listItemSelectedBackgroundColor","chatSummary","paddingLeft","minWidth","chatName","visibility","latestMessage","alpha","whiteSpace","textOverflow","float","unreadCount","green","contrastText","borderRadius","verticalAlign","isGroup","isUserOnline","userOnline","userImageId","snippet","themTyping","participantsTyping","usernames","plainText","selected","divider","formatMessageDate","ChatListItem_1","messages_1","messageFunctions_1","CyclesContent_1","key","latestMessageText","i","formatCyclesText","amount","sentByMe","getContentAsText","displayDate","getUnreadMessageCount","ChatList_1","Header_1","SearchResults_1","SearchBox_1","MyAvatar_1","UserMenu_1","inputText","setInputText","myUsername","contentPanel","searchTerm","clearSearchTerm","avatar","leftIcon","rightIcon","onChange","primaryTextColor","marginLeft","changeSidePanel_1","CreateGroupChatIcon_1","closePanel","Chats","newChatIcon","DefaultPanel_1","JoinGroupChatPanel_1","NewDirectChatPanel_1","NewGroupChatPanel_1","JoinGroupChat","NewDirectChat","NewGroupChat","getUserSummary","messageSummary","messageSnippet","userImage","imageBlobUrl","shallowEqual","userExists","myAvatar","hidden","accept","files","target","file","reader","FileReader","onload","startsWith","byteLength","MAX_AVATAR_SIZE","Uint8Array","readAsArrayBuffer","users_1","UserListItem_1","emptyResults","setText","results","setResults","textBoxRef","useRef","useLayoutEffect","focus","closeButton","search_term","max_results","searchUsers","ref","fromUserSummary","handleSelectUser","Checkbox_1","FormControlLabel_1","createGroupChat_1","setChatHistoryVisibleToNewJoiners","chatHistoryVisibleCheckBox","control","label","checkBox","checked","textBoxClassName","textBox","Box_1","MessageSearchMatch_1","searchResults","groupTitle","messageMatches","setMessageMatches","chatMatches","getUser","toLowerCase","indexOf","searchChats","searchAllMessages","res","createGroup","items","groups","Dialog_1","DialogActions_1","DialogContent_1","DialogTitle_1","RadioGroup_1","Radio_1","selectTheme_1","currentTheme","setValue","dividers","parseInt","option","buttonColor","onClose","Light","MoreVert_1","PopOverMenu_1","ThemeSelector_1","logout_1","themeSelectorOpen","setThemeSelectorOpen","menuItems","action","menuIcon","placement","FileValidationError","IconButton_1","paperclip_svg_1","Dimensions_1","MAX_IMAGE_SIZE","MAX_VIDEO_SIZE","MAX_FILE_SIZE","onFileValidationError","FileTooBig","extract","img","Image","extractThumbnail","extractImageThumbnail","video","videoWidth","videoHeight","currentTime","extractVideoThumbnail","dimensions","onFileSelected","original","thumbnailDimensions","scaleToFit","canvas","getContext","drawImage","toDataURL","cycles_1","sentTo","formatCycles","cycles","theirUsername","marginRight","dateFunctions","dayChangeMarker","startOfToday","getStartOfToday","startOfYesterday","addDays","toDayOfWeekString","toLongDateString","formatDate","blockUser_1","markMessagesAsRead_1","toggleNotifications_1","muted","disable","any_unread","fileSize_1","fileName","fileSize","toUpperCase","backgroundImage","backgroundSize","Image_1","Video_1","isLandscape","media","marginBottom","maxHeight","emoji_mart_1","styleProps","showSearch","Picker","palette","mode","onSelect","emojiData","onEmojiSelected","native","autoFocus","showPreview","showSkinTones","emojiTooltip","emoji","emojiSize","perLine","footer","border","paddingBottom","paddingTop","opacity","mutedColor","downloading","link","href","role","anchor","node","HTMLAnchorElement","parentNode","findAnchor","getAttribute","getData","setAttribute","click","URL","revokeObjectURL","removeAttribute","messageSentByMe","messageSentByElse","Send_1","ClickAwayListener_1","stateFunctions_1","AttachFile_1","SendCycles_1","MessageTextInput_1","smiley_svg_1","dollar_svg_1","EmojiPicker_1","DraftMediaMessage_1","DraftFileMessage_1","ReplyToMessagePanel_1","messagePanelState","setMessagePanel","MessagePanelState","Closed","textBoxText","setTextBoxText","sendCyclesRef","draftMessageContentRef","scrollBottomOverride","changeMessagePanel","retainScrollBottom","SendFile","setTimeout","onFocusBack","scrollBottom","getScrollTopAndBottom","onSendMessage","draftMessage","SendCycles","getCycles","clearText","messagesDiv","getElementById","scrollTop","scrollHeight","clientHeight","messagePanel","EmojiPicker","insertEmoji","recipient","draft","onClickAway","onFocusAway","buttons","error","placeholder","onEnterPressed","markTyping","sendButton","hover","pointerEvents","iconColor","outline","Participants","confirm","BackButton_1","GroupChatMenu_1","LastOnline_1","DirectChatMenu_1","leftPanelState","subTitle","chatMenu","isOnline","userSummary","participants","onlineCount","p","sortedParticipants","sort","compareUsersOnlineFirst","concat","flexWrap","history","back","flexGrow","titles","subtitle","secondaryTextColor","isNaN","durationText","hoursSinceLastOnline","floor","daysSinceLastOnline","formatLastOnlineDate","MessagesList_1","Footer_1","ownedBlobUrl","ownsBlob","unmounted","loaded","forceUpdate","useReducer","x","contentElement","fetchMedia","MessageGroupPosition","ExpandMore_1","deselectMessage_1","MediaContent_1","MessageTimeAndTicks_1","replyToMessage_1","MessageReplyPanel_1","FileContent_1","selectEffect","mergeWithNext","groupPosition","Top","Middle","mergeWithPrevious","Bottom","isGroupChat","borderRadiusStr","contentBorderRadius","sentByElse","readByMe","unread","isMediaNoCaption","repliesToContent","confirmed","menu","participant","contentContainer","topPanel","repliesToChatId","isPrivateReply","repliesToMyMessage","repliesToUsername","repliesToMessageId","contentComponent","shadow","mediaContent","secondPanel","mediaNoCaption","messageTimeAndTicks","read","readByThem","isOnMedia","timeAndTicks","fileText","textComponent","textContainer","mediaUncaptioned","overflowWrap","darken","unreadMessageBrightness","borderBottomRightRadius","borderBottomLeftRadius","borderTopRightRadius","borderTopLeftRadius","bottom","highlightedContentBackgroundColor","Photo_1","Attachment_1","showPointer","borderLeftColor","lighten","borderLeftWidth","borderLeftStyle","wordWrap","by","cyclesIcon","chatSubject","getChatSubject","rightContent","inputContainer","userSelect","MessageTextInput","forwardRef","savedRangeRef","nativeEmoji","restoreSelection","execCommand","saveSelection","textContent","innerHTML","getSelection","getRangeAt","range","Range","selectNodeContents","collapse","selection","removeAllRanges","addRange","useImperativeHandle","onInput","trim","onPaste","preventDefault","clipboardData","onKeyDown","shiftKey","stopPropagation","onBlur","contentEditable","spellCheck","tick_svg_1","doubleTick_svg_1","MessageTimeAndTicks","sentByThem","onMedia","tick","toShortTimeString","DayChangeMarker_1","Message_1","dateFunctions_1","_d","_e","_f","_g","theirUserId","usersDictionary","messagesToGroup","prevMessageSender","lastMessageDate","senderUserId","groupWithPrevious","getTime","startOfDay","getStartOfDay","toDateString","senderDetails","unreadMessageDetector","isUnread","version","isUnreadByThem","repliesToUserId","groupWithNext","messageIdToSelect","dayContainer","getMessages_1","MessagesFromSingleDay_1","UnreadMessageDetector_1","UnreadMessagesHandler_1","ScrollToBottomButton_1","messageToSelect","messagesFromSameDay","areOnSameDay","addDay","messagesRef","onScroll","onScroll_downloadMoreMessages","hasUnreadMessages","minMessageIdOnServer","getMinMessageIdOnServer","unreadMessagesHandler","clientId","getClientMessageId","scrollToMessage","messagesList","parentElem","scrollToBottomButton","iconAlt","userMap","innerContainer","paddingRight","Zoom_1","Fab_1","ArrowDownward_1","buttonVisible","setButtonVisible","onScroll_toggleButtonVisibility","shouldShowButton","in","scrollTo","SyncAlt_1","TextField_1","cycleFunctions","box","cyclesInput","poundsInput","balanceContainer","setCycles","dollars","setDollars","balance","setBalance","fromT","parseFloat","accountBalance","round","toCurrency","onCyclesChanged","toT","fromCurrency","onDollarsChanged","DialogContentText_1","isOpen","onResolve","clipboard","Tooltip_1","addParticipants_1","u64","tooltipOpen","setTooltipOpen","tooltipTimeout","mainContent","clearTimeout","writeText","toHex","onCloseButtonClick","Header","rightElement","l","r","AddParticipants","fromMyProfile","AddParticipantsPanel_1","ParticipantsPanel_1","ArrowBack_1","avatarSize","sm","Avatar_1","svg","md","fill","Close_1","CloseButton","createGroupChat_svg_1","CircularIcon_1","groupChatIcon_svg_1","tick2_svg_1","NameInput","disabled","textBoxContainer","borderBottom","charsRemaining","submitButton","boxShadow","buttonSvg","remainingCharCount","handleSubmit","handleInputChange","MenuItem_1","MenuList_1","Popper_1","setOpen","anchorRef","buttonClassName","handleClose","buttonRef","anchorEl","popper","buildMenuItemElement","search_svg_1","subHeaderBackgroundColor","he_1","server_1","emojiFunctions_1","urlFunctions_1","Emoji_1","markup","encode","emojis","containsEmoji","renderToStaticMarkup","wrapURLsInAnchorTags","replace","markupText","dangerouslySetInnerHTML","__html","Badge_1","identicon_js_1","md5_1","unknownUserAvatar_svg_1","UserAvatar","userOnlineMarker","isLoading","blobsToRevoke","setSrc","buildIdenticonUrl","setInitialSrc","userOnlineMarkerRef","format","dot","getElementsByClassName","backgroundColorElem","elem","currentElem","getComputedStyle","split","parentElement","getFirstNonTransparentParent","setBoxShadowColor","latestBackgroundColor","observer","MutationObserver","observe","attributes","disconnect","root","badge","overlap","anchorOrigin","vertical","horizontal","UserListItem","p1","p2","defaultOnClick","element","closest","Video","videoRef","ro","ResizeObserver","entries","entry","parent","contentRect","controls","CONFIRMED_GROUP_CHAT","REFRESH_CHATS_MAX_INTERVAL_MS","REFRESH_CHATS_MIN_INTERVAL_MS","DEFAULT_UPDATED_DATE","PUBLIC_VAPID_KEY","Date","getUpdatedChats_1","chatsUpdater","WaitBeforeFirstRun","restart","AwaitFirstRun","userTyping_1","handler","lastUpdated","currentUserStoppedTypingTimeoutId","now","ExponentialBackoffRecurringTaskRunner","task","minIntervalMs","maxIntervalMs","intervalMultiplier","timeoutId","cancel","stopped","start","run","nextIntervalMs","runInLoop","reset","min","markMessagesAsReadServerSync_1","pending","Set","add","ordered","Array","ranges","RecurringTaskRunner","intervalMs","waitBeforeFirstRun","userStoppedTypingTimeoutIds","Map","buildTimeoutKey","existingTimeoutId","newTimeoutId","set","delete","KEY","cache","tryGet","localStorage","getItem","setItem","handleSessionExpiry","durationUntilSessionExpiresMs","getTimeUntilSessionExpiryMs","durationUntilLogoutMs","logoutAndReset","timeout","unreadClientMessageIds","has","markAsReadByClientIdPending","markAsReadPending","unreadByThem","markAsReadByThemPending","markAsReadByThemByClientIdPending","unreadByThemMessageIds","markAsReadByThemPendingSync","markAsReadByThemByClientIdPendingSync","unreadByAnyMessageIds","UnreadMessagesHandler","messageIdToAppearanceCountMap","pause","resume","runSingleIteration","clear","visibleUnreadMessages","getVisibleUnreadMessages","newMessageIdToAppearanceCountMap","messagesToMarkAsRead","messagesToMarkAsReadByClientId","prevCount","visibleUnreadMessageIds","unreadMessageElements","outerBox","getBoundingClientRect","messageIdAttr","onvisibilitychange","pushOrReplaceChat","replaceLatestWithHome","path","location","pathname","parts","fromHex","replaceState","hexId","mimeTypeLower","buildTextForMediaContent","freeMediaData","tryFindMessge","getMaxMessageId","getMinMessageId","markMessagesAsReadOnServer","restoreDraftMessage","saveDraftMessage","maintainScrollBottom","maintainScrollTop","maintainScroll","sortChatsAndReturnSelectedIndex","removeChat","tryFindChat","getChatByUserId","getConfirmedChat","extendMessagesRangeUpTo","extendMessagesRangeDownTo","queueMissingMessagesForDownload","addP2PMessage","addUnconfirmedMessage","addMessages","addMessage","confirmDirectChat","mergeUpdates","newUnconfirmedGroupChat","newConfirmedGroupChat","newConfirmedDirectChat","array","Uint32Array","crypto","getRandomValues","earliestConfirmedMessageId","latestConfirmedMessageId","maxLocalMessageId","minimumUnconfirmedMessageIndex","initialParticipants","currentChat","updatedChat","isSelectedChat","b","remove","messageIndex","getMessageIndex","unconfirmedMessage","removeMatchingUnconfirmedMessage","unionWith","toPrepend","splice","toAdd","findIndex","selectedIndex","isScrolledToBottom","scrollValues","textbox","blobUrlsToRevoke","containerDiv","messageDiv","targetScroll","offsetTop","indexOfMatch","usernameLower","u1","u2","chats_1","config","onMessage","onDisconnected","iceCandidates","dataChannel","offerId","answerId","createOffer","connection","createDataChannel","configureDataChannel","offer","setLocalDescription","waitUntilIceGatheringIsComplete","connectionString","sdp","JSON","stringify","ageSeconds","answerRemoteOffer","setRemoteDescription","addIceCandidate","parse","answer","createAnswer","addRemoteAnswer","isConnected","connectionState","send","iceGatheringState","binaryType","onmessage","RTCPeerConnection","onicecandidate","candidate","onconnectionstatechange","ondatachannel","channel","RtcConnection_1","RtcConnectionsStore_1","RtcMessageReceiver_1","factory","createConfig","iceServers","urls","handleMessage","createOfferPromises","exists","offers","all","addOffers","getConnectionDetails","connections","handleRemoteConnectionDetails","connectionDetails","handleRemoteAnswerPromises","cd","handleRemoteAnswer","createAnswerPromises","answers","addAnswers","rtcConnection","RtcConnectionFactory_1","rtcConnectionsStore","createNew","receiveP2PMessage_1","RemoteUserTypingHandler_1","markRemoteUserOnline_1","receiver","p2pMessageRaw","p2pMessage","code","toHttpError","statusLine","valueText","valueParts","toFixed","toLocaleDateString","weekday","toLocaleTimeString","hour","minute","hour12","dayOfMonth","getDate","month","n","getFullYear","unitTypes","bytes","ceil","unitType","showDecimal","react_dom_1","AppRoot_1","startup_1","setSoftDisabled","softDisabled","supported","base64","navigator","Unsupported","Denied","hardPermission","registration","registerServiceWorker","update","serviceWorker","pushSubscription","pushManager","getSubscription","subscriptionExists","subscription","json","toJSON","extract_p256dh_key","subscribeOptions","userVisibleOnly","applicationServerKey","toUint8Array","subscribe","subscribeUserToPush","permissionResult","Notification","requestPermission","_softDisabled","sw_path","register","permissions","query","getNotifications","notification","immer_1","SelectedThemeCache_1","leaveGroup_2","createGroupChat_2","initialState","Messages","LastAdminCannotLeave","historyFunctions","selectChatAndPushToHistory","maintainScrollOfSelectedChat","hasChanged","minLocalMessageIdRequired","unshift","historicalChatId","newChatIndex","unconfirmedGroupChat","_index","redux_1","chatsReducer_1","appReducer_1","rootReducer","combineReducers","lastOnline","getMinutesSince","agent_1","principal_1","idl_1","idl_2","idl_3","idl_4","CanisterClientFactory","agent","chatsId","Principal","fromText","p2pId","userMgmtId","notificationsId","_chatsActor","createActor","idlFactory","_p2pActor","_userMgmtActor","_notificationsActor","canisterClientFactory","canisterId","Actor","HttpAgent","groupChatFromCandid","directChatFromCandid","chatFromCandid","localMessage_1","rangeSet_1","timestamp_1","userId_1","fromCandid","toDate","display_date","last_updated","latest_messages","reverse","toArray","unread_by_me_message_id_ranges","unread_by_them_message_id_ranges","min_visible_message_id","unread_by_any_message_id_ranges","Direct","Group","messageContent_1","option_1","replyContextFromCandid","chat_id","user_id","message_id","client_message_id","replies_to","toCandid","Text","inner","Media","mime_type","blob_id","blob_size","chunk_size","thumbnail_data","blob_deleted","File","Cycles","account_balance","image_id","isArray","Offer","connection_string","ice_candidates","age_seconds","Answer","offer_id","rangeSet","Number","addSeconds","seconds_since_last_online","client","chatsClient","candidUserIds","add_participants","PartialSuccess","count_added","block_user","chat_1","canisterRequest","chat_history_visible_to_new_joiners","create_group_chat","SubjectTooShort","SubjectTooLong","TooManyParticipants","handleResponse","latestMessageId","latest_message_id","get_messages","ids","get_messages_by_id","httpError_1","updated_since","message_count_for_top_chat","get_updates","latestChat","blocked_users","join_group","UserLimitReached","ChatNotFound","NotGroupChat","leave_group","ParticipantNotFound","mark_read","unread_message_id_ranges","remove_participant","Unauthorized","CannotRemoveSelfFromChat","maxResults","search_all_messages","replyContext_1","senderName","sender_name","send_direct_message","chat_summary","candidRequest","send_message","sendDirectMessage_1","markRead_1","getUpdates_1","searchAllMessages_1","CacheManager","ImmutableDataCache_1","_caches","ImmutableDataCache","maxEntries","maxAgeSeconds","put","scavenge","CacheManager_1","DataService_1","service","_cache","_service","DataService","totalBytes","unchunked","async_1","getChunk_1","putChunk_1","chunks","getChunkIndexes","mapLimit","callback","offset","byteStart","byteEnd","forEachOfLimit","chunkIndex","get_chunk","put_chunk","notificationsClient","subscriptionJson","args","endpoint","auth","p256dh","push_subscription","pushSubscription_1","subscriptionExists_1","p256dh_key","subscription_exists","p2pClient","add_answers","add_offers","counterOffers","counter_offers","p2pConnectionDetails_1","get_connection_details","remove_connection_details","addAnswers_1","addOffers_1","getConnectionDetails_1","removeConnectionDetails_1","deleteAfterRetrieval","myProfile_1","userMgmtClient","get_current_user","get_user_id","userSummary_1","get_users","mark_as_online","register_user","search_users","updateUsername_1","markAsOnline_1","getUserId_1","searchUsers_1","set_profile_image","UserNotFound","UpdateUsernameResponse","update_username","SuccessNoChange","UsernameTaken","tagManagerHeaderScript_html_1","tagManagerBodyScript_html_1","headerScriptNode","createRange","createContextualFragment","head","appendChild","bodyScriptNode","insertGoogleTagManagerScripts","developmentOnly_1","redux_thunk_1","reducers_1","analyticsMiddleware_1","webRtcMiddleware_1","errorMiddleware_1","middleware","createStore","compose","composeWithDevTools","applyMiddleware","createMuiTheme_1","defaultColours","darkThemeColors","buildOptions","typography","fontFamily","h6","smallest","components","MuiButtonBase","disableRipple","MuiLink","MuiTypography","variantMapping","body1","body2","xs","lg","xl","Dimensions","_width","_height","maxDimensions","aspectRatio","maxAspectRatio","workbox_expiration_1","cacheName","_cacheName","_expirationManager","CacheExpiration","_maxObjectSize","maxObjectSizeBytes","openCache","match","updateTimestamp","arrayBuffer","Response","expireEntries","caches","Stopwatch","startTime","performance","auth_client_1","AuthClient","getDelegation","delegations","d","delegation","expiration","reduce","base64String","repeat","rawData","atob","outputArray","charCodeAt","blob","Blob","createObjectURL","MILLION","MILLION_BIGINT","exchangeRate","currency","rate","val","num","EPSILON","year","getMonth","day","days","copy","setDate","seconds","setSeconds","getSeconds","test","intersectWith","except","union","clone","padStart","hex","extractQueryStringAsObject","removeFragment","search","substring","decodeURI","new_window","url","IDL","ChatId","Nat","UserId","AddParticipantsResponse","Variant","Record","Nat32","Vec","Null","CreateGroupChatRequest","Bool","Timestamp","Nat64","FileContent","Opt","TextContent","MediaContent","CyclesContent","MessageContent","ReplyContext","Message","GroupChatSummary","CreateGroupChatResponse","Nat8","DeleteGroupResponse","GetChatsRequest","Nat16","DirectChatSummary","ChatSummary","GetChatsResponse","GetMessagesResult","GetMessagesResponse","GetMessagesByIdResponse","GetUpdatesRequest","GetUpdatesResult","GetUpdatesResponse","JoinGroupResponse","LeaveGroupResponse","MarkReadResult","MarkReadResponse","SearchMessagesMatch","SearchAllMessagesResult","SearchAllMessagesResponse","SendDirectMessageRequest","SendDirectMessageResult","SendDirectMessageResponse","SendMessageRequest","SendMessageResult","SendMessageResponse","Stats","Int64","Service","Func","NotificationsArgs","CanisterId","Subscription","BlobReference","MessageId","GroupId","EventIndex","DirectMessageReplyContext","MessageIndex","DirectMessage","DirectMessageNotification","GroupMessageReplyContext","GroupMessage","GroupMessageNotification","V1FileContent","V1TextContent","V1MediaContent","V1CyclesContent","V1MessageContent","TimestampMillis","V1ChatId","V1ReplyContext","V1Message","V1GroupMessageNotification","V1DirectMessageNotification","NotificationEnvelope","IndexedNotification","NotificationsSuccessResult","Tuple","NotificationsResponse","PushDirectMessageNotificationArgs","PushDirectMessageNotificationResponse","PushGroupMessageNotificationArgs","PushGroupMessageNotificationResponse","PushSubscriptionArgs","PushSubscriptionResponse","PushV1DirectMessageNotificationArgs","PushV1DirectMessageNotificationResponse","PushV1GroupMessageNotificationArgs","PushV1GroupMessageNotificationResponse","RemoveNotificationsArgs","RemoveNotificationsResponse","RemoveSubscriptionsArgs","RemoveSubscriptionsResponse","SubscriptionExistsArgs","SubscriptionExistsResponse","AddAnswerRequest","AddAnswersRequest","AddOfferRequest","AddOffersRequest","AddOffersResult","AddOffersResponse","ConnectionDetails","GetConnectionDetailsResult","GetConnectionDetailsResponse","RemoveSingleConnectionRequest","RemoveConnectionDetailsRequest","MyProfile","GetCurrentUserResponse","GetUserIdResponse","GetUsersRequest","UserSummary","GetUsersResponse","RegisterUserResponse","SearchUsersRequest","SearchUsersResponse","TransferCyclesRequest","TransferCyclesResponse","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","amdO","getter","definition","g","globalThis","Function","hmd","obj","prop","Symbol","toStringTag","nmd","paths","installedChunks","826","deferredModules","checkDeferredModules","webpackJsonpCallback","parentChunkLoadingFunction","chunkId","chunkIds","moreModules","runtime","executeModules","resolves","shift","chunkLoadingGlobal","self","checkDeferredModulesImpl","deferredModule","j","depId","s","bind","startup"],"mappings":"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","file":"index.js","sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".emoji-mart,\\n.emoji-mart * {\\n box-sizing: border-box;\\n line-height: 1.15;\\n}\\n\\n.emoji-mart {\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 16px;\\n display: inline-block;\\n color: #222427;\\n border: 1px solid #d9d9d9;\\n border-radius: 5px;\\n background: #fff;\\n}\\n\\n.emoji-mart .emoji-mart-emoji {\\n padding: 6px;\\n}\\n\\n.emoji-mart-bar {\\n border: 0 solid #d9d9d9;\\n}\\n.emoji-mart-bar:first-child {\\n border-bottom-width: 1px;\\n border-top-left-radius: 5px;\\n border-top-right-radius: 5px;\\n}\\n.emoji-mart-bar:last-child {\\n border-top-width: 1px;\\n border-bottom-left-radius: 5px;\\n border-bottom-right-radius: 5px;\\n}\\n\\n.emoji-mart-anchors {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n padding: 0 6px;\\n line-height: 0;\\n}\\n\\n.emoji-mart-anchor {\\n position: relative;\\n display: block;\\n flex: 1 1 auto;\\n color: #858585;\\n text-align: center;\\n padding: 12px 4px;\\n overflow: hidden;\\n transition: color .1s ease-out;\\n margin: 0;\\n box-shadow: none;\\n background: none;\\n border: none;\\n}\\n.emoji-mart-anchor:focus { outline: 0 }\\n.emoji-mart-anchor:hover,\\n.emoji-mart-anchor:focus,\\n.emoji-mart-anchor-selected {\\n color: #464646;\\n}\\n\\n.emoji-mart-anchor-selected .emoji-mart-anchor-bar {\\n bottom: 0;\\n}\\n\\n.emoji-mart-anchor-bar {\\n position: absolute;\\n bottom: -3px; left: 0;\\n width: 100%; height: 3px;\\n background-color: #464646;\\n}\\n\\n.emoji-mart-anchors i {\\n display: inline-block;\\n width: 100%;\\n max-width: 22px;\\n}\\n\\n.emoji-mart-anchors svg,\\n.emoji-mart-anchors img {\\n fill: currentColor;\\n height: 18px;\\n width: 18px;\\n}\\n\\n.emoji-mart-scroll {\\n overflow-y: scroll;\\n overflow-x: hidden;\\n height: 270px;\\n padding: 0 6px 6px 6px;\\n will-change: transform; /* avoids \\\"repaints on scroll\\\" in mobile Chrome */\\n}\\n\\n.emoji-mart-search {\\n margin-top: 6px;\\n padding: 0 6px;\\n position: relative;\\n}\\n\\n.emoji-mart-search input {\\n font-size: 16px;\\n display: block;\\n width: 100%;\\n padding: 5px 25px 6px 10px;\\n border-radius: 5px;\\n border: 1px solid #d9d9d9;\\n outline: 0;\\n}\\n\\n.emoji-mart-search input,\\n.emoji-mart-search input::-webkit-search-decoration,\\n.emoji-mart-search input::-webkit-search-cancel-button,\\n.emoji-mart-search input::-webkit-search-results-button,\\n.emoji-mart-search input::-webkit-search-results-decoration {\\n /* remove webkit/blink styles for \\n * via https://stackoverflow.com/a/9422689 */\\n -webkit-appearance: none;\\n}\\n\\n.emoji-mart-search-icon {\\n position: absolute;\\n top: 7px;\\n right: 11px;\\n z-index: 2;\\n padding: 2px 5px 1px;\\n border: none;\\n background: none;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji span {\\n z-index: 1;\\n position: relative;\\n text-align: center;\\n cursor: default;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji:hover:before {\\n z-index: 0;\\n content: \\\"\\\";\\n position: absolute;\\n top: 0; left: 0;\\n width: 100%; height: 100%;\\n background-color: #f4f4f4;\\n border-radius: 100%;\\n}\\n\\n.emoji-mart-category-label {\\n z-index: 2;\\n position: relative;\\n position: -webkit-sticky;\\n position: sticky;\\n top: 0;\\n}\\n\\n.emoji-mart-category-label span {\\n display: block;\\n width: 100%;\\n font-weight: 500;\\n padding: 5px 6px;\\n background-color: #fff;\\n background-color: rgba(255, 255, 255, .95);\\n}\\n\\n.emoji-mart-category-list {\\n margin: 0;\\n padding: 0;\\n}\\n\\n.emoji-mart-category-list li {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n display: inline-block;\\n}\\n\\n.emoji-mart-emoji {\\n position: relative;\\n display: inline-block;\\n font-size: 0;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: none;\\n box-shadow: none;\\n}\\n\\n.emoji-mart-emoji-native {\\n font-family: \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Segoe UI\\\", \\\"Apple Color Emoji\\\", \\\"Twemoji Mozilla\\\", \\\"Noto Color Emoji\\\", \\\"Android Emoji\\\";\\n}\\n\\n.emoji-mart-no-results {\\n font-size: 14px;\\n text-align: center;\\n padding-top: 70px;\\n color: #858585;\\n}\\n.emoji-mart-no-results-img {\\n display: block;\\n margin-left: auto;\\n margin-right: auto;\\n width: 50%;\\n}\\n.emoji-mart-no-results .emoji-mart-category-label {\\n display: none;\\n}\\n.emoji-mart-no-results .emoji-mart-no-results-label {\\n margin-top: .2em;\\n}\\n.emoji-mart-no-results .emoji-mart-emoji:hover:before {\\n content: none;\\n}\\n\\n.emoji-mart-preview {\\n position: relative;\\n height: 70px;\\n}\\n\\n.emoji-mart-preview-emoji,\\n.emoji-mart-preview-data,\\n.emoji-mart-preview-skins {\\n position: absolute;\\n top: 50%;\\n transform: translateY(-50%);\\n}\\n\\n.emoji-mart-preview-emoji {\\n left: 12px;\\n}\\n\\n.emoji-mart-preview-data {\\n left: 68px; right: 12px;\\n word-break: break-all;\\n}\\n\\n.emoji-mart-preview-skins {\\n right: 30px;\\n text-align: right;\\n}\\n\\n.emoji-mart-preview-skins.custom {\\n right: 10px;\\n text-align: right;\\n}\\n\\n.emoji-mart-preview-name {\\n font-size: 14px;\\n}\\n\\n.emoji-mart-preview-shortname {\\n font-size: 12px;\\n color: #888;\\n}\\n.emoji-mart-preview-shortname + .emoji-mart-preview-shortname,\\n.emoji-mart-preview-shortname + .emoji-mart-preview-emoticon,\\n.emoji-mart-preview-emoticon + .emoji-mart-preview-emoticon {\\n margin-left: .5em;\\n}\\n\\n.emoji-mart-preview-emoticon {\\n font-size: 11px;\\n color: #bbb;\\n}\\n\\n.emoji-mart-title span {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.emoji-mart-title .emoji-mart-emoji {\\n padding: 0;\\n}\\n\\n.emoji-mart-title-label {\\n color: #999A9C;\\n font-size: 26px;\\n font-weight: 300;\\n}\\n\\n.emoji-mart-skin-swatches {\\n font-size: 0;\\n padding: 2px 0;\\n border: 1px solid #d9d9d9;\\n border-radius: 12px;\\n background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.custom {\\n font-size: 0;\\n border: none;\\n background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch {\\n width: 16px;\\n padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch.selected:after {\\n opacity: .75;\\n}\\n\\n.emoji-mart-skin-swatch {\\n display: inline-block;\\n width: 0;\\n vertical-align: middle;\\n transition-property: width, padding;\\n transition-duration: .125s;\\n transition-timing-function: ease-out;\\n}\\n\\n.emoji-mart-skin-swatch:nth-child(1) { transition-delay: 0s }\\n.emoji-mart-skin-swatch:nth-child(2) { transition-delay: .03s }\\n.emoji-mart-skin-swatch:nth-child(3) { transition-delay: .06s }\\n.emoji-mart-skin-swatch:nth-child(4) { transition-delay: .09s }\\n.emoji-mart-skin-swatch:nth-child(5) { transition-delay: .12s }\\n.emoji-mart-skin-swatch:nth-child(6) { transition-delay: .15s }\\n\\n.emoji-mart-skin-swatch.selected {\\n position: relative;\\n width: 16px;\\n padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatch.selected:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 50%; left: 50%;\\n width: 4px; height: 4px;\\n margin: -2px 0 0 -2px;\\n background-color: #fff;\\n border-radius: 100%;\\n pointer-events: none;\\n opacity: 0;\\n transition: opacity .2s ease-out;\\n}\\n\\n.emoji-mart-skin-swatch.custom {\\n display: inline-block;\\n width: 0;\\n height: 38px;\\n overflow: hidden;\\n vertical-align: middle;\\n transition-property: width, height;\\n transition-duration: .125s;\\n transition-timing-function: ease-out;\\n cursor: default;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected {\\n position: relative;\\n width: 36px;\\n height: 38px;\\n padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected:after {\\n content: \\\"\\\";\\n width: 0;\\n height: 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom .emoji-mart-skin-swatch.custom:hover {\\n background-color: #f4f4f4;\\n border-radius: 10%;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom {\\n width: 36px;\\n height: 38px;\\n padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom.selected:after {\\n opacity: .75;\\n}\\n\\n.emoji-mart-skin-text.opened {\\n display: inline-block;\\n vertical-align: middle;\\n text-align: left;\\n color: #888;\\n font-size: 11px;\\n padding: 5px 2px;\\n width: 95px;\\n height: 40px;\\n border-radius: 10%;\\n background-color: #fff;\\n}\\n\\n.emoji-mart-skin {\\n display: inline-block;\\n width: 100%;\\n padding-top: 100%;\\n max-width: 12px;\\n border-radius: 100%;\\n}\\n\\n.emoji-mart-skin-tone-1 { background-color: #ffc93a }\\n.emoji-mart-skin-tone-2 { background-color: #fadcbc }\\n.emoji-mart-skin-tone-3 { background-color: #e0bb95 }\\n.emoji-mart-skin-tone-4 { background-color: #bf8f68 }\\n.emoji-mart-skin-tone-5 { background-color: #9b643d }\\n.emoji-mart-skin-tone-6 { background-color: #594539 }\\n\\n/* For screenreaders only, via https://stackoverflow.com/a/19758620 */\\n.emoji-mart-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n border: 0;\\n}\\n\\n/*\\n * Dark mode styles\\n */\\n\\n.emoji-mart-dark {\\n color: #fff;\\n border-color: #555453;\\n background-color: #222;\\n}\\n\\n.emoji-mart-dark .emoji-mart-bar {\\n border-color: #555453;\\n}\\n\\n.emoji-mart-dark .emoji-mart-search input {\\n color: #fff;\\n border-color: #555453;\\n background-color: #2f2f2f;\\n}\\n\\n.emoji-mart-dark .emoji-mart-search-icon svg {\\n fill: #fff;\\n}\\n\\n.emoji-mart-dark .emoji-mart-category .emoji-mart-emoji:hover:before {\\n background-color: #444;\\n}\\n\\n.emoji-mart-dark .emoji-mart-category-label span {\\n background-color: #222;\\n color: #fff;\\n}\\n\\n.emoji-mart-dark .emoji-mart-skin-swatches {\\n border-color: #555453;\\n background-color: #222;\\n}\\n\\n.emoji-mart-dark .emoji-mart-anchor:hover,\\n.emoji-mart-dark .emoji-mart-anchor:focus,\\n.emoji-mart-dark .emoji-mart-anchor-selected {\\n color: #bfbfbf;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/website/css/emoji-mart.css\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\".emoji-mart,\\n.emoji-mart * {\\n box-sizing: border-box;\\n line-height: 1.15;\\n}\\n\\n.emoji-mart {\\n font-family: -apple-system, BlinkMacSystemFont, \\\"Helvetica Neue\\\", sans-serif;\\n font-size: 16px;\\n display: inline-block;\\n color: #222427;\\n border: 1px solid #d9d9d9;\\n border-radius: 5px;\\n background: #fff;\\n}\\n\\n.emoji-mart .emoji-mart-emoji {\\n padding: 6px;\\n}\\n\\n.emoji-mart-bar {\\n border: 0 solid #d9d9d9;\\n}\\n.emoji-mart-bar:first-child {\\n border-bottom-width: 1px;\\n border-top-left-radius: 5px;\\n border-top-right-radius: 5px;\\n}\\n.emoji-mart-bar:last-child {\\n border-top-width: 1px;\\n border-bottom-left-radius: 5px;\\n border-bottom-right-radius: 5px;\\n}\\n\\n.emoji-mart-anchors {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n padding: 0 6px;\\n line-height: 0;\\n}\\n\\n.emoji-mart-anchor {\\n position: relative;\\n display: block;\\n flex: 1 1 auto;\\n color: #858585;\\n text-align: center;\\n padding: 12px 4px;\\n overflow: hidden;\\n transition: color .1s ease-out;\\n margin: 0;\\n box-shadow: none;\\n background: none;\\n border: none;\\n}\\n.emoji-mart-anchor:focus { outline: 0 }\\n.emoji-mart-anchor:hover,\\n.emoji-mart-anchor:focus,\\n.emoji-mart-anchor-selected {\\n color: #464646;\\n}\\n\\n.emoji-mart-anchor-selected .emoji-mart-anchor-bar {\\n bottom: 0;\\n}\\n\\n.emoji-mart-anchor-bar {\\n position: absolute;\\n bottom: -3px; left: 0;\\n width: 100%; height: 3px;\\n background-color: #464646;\\n}\\n\\n.emoji-mart-anchors i {\\n display: inline-block;\\n width: 100%;\\n max-width: 22px;\\n}\\n\\n.emoji-mart-anchors svg,\\n.emoji-mart-anchors img {\\n fill: currentColor;\\n height: 18px;\\n width: 18px;\\n}\\n\\n.emoji-mart-scroll {\\n overflow-y: scroll;\\n overflow-x: hidden;\\n height: 270px;\\n padding: 0 6px 6px 6px;\\n will-change: transform; /* avoids \\\"repaints on scroll\\\" in mobile Chrome */\\n}\\n\\n.emoji-mart-search {\\n margin-top: 6px;\\n padding: 0 6px;\\n position: relative;\\n}\\n\\n.emoji-mart-search input {\\n font-size: 16px;\\n display: block;\\n width: 100%;\\n padding: 5px 25px 6px 10px;\\n border-radius: 5px;\\n border: 1px solid #d9d9d9;\\n outline: 0;\\n}\\n\\n.emoji-mart-search input,\\n.emoji-mart-search input::-webkit-search-decoration,\\n.emoji-mart-search input::-webkit-search-cancel-button,\\n.emoji-mart-search input::-webkit-search-results-button,\\n.emoji-mart-search input::-webkit-search-results-decoration {\\n /* remove webkit/blink styles for \\n * via https://stackoverflow.com/a/9422689 */\\n -webkit-appearance: none;\\n}\\n\\n.emoji-mart-search-icon {\\n position: absolute;\\n top: 7px;\\n right: 11px;\\n z-index: 2;\\n padding: 2px 5px 1px;\\n border: none;\\n background: none;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji span {\\n z-index: 1;\\n position: relative;\\n text-align: center;\\n cursor: default;\\n}\\n\\n.emoji-mart-category .emoji-mart-emoji:hover:before {\\n z-index: 0;\\n content: \\\"\\\";\\n position: absolute;\\n top: 0; left: 0;\\n width: 100%; height: 100%;\\n background-color: #f4f4f4;\\n border-radius: 100%;\\n}\\n\\n.emoji-mart-category-label {\\n z-index: 2;\\n position: relative;\\n position: -webkit-sticky;\\n position: sticky;\\n top: 0;\\n}\\n\\n.emoji-mart-category-label span {\\n display: block;\\n width: 100%;\\n font-weight: 500;\\n padding: 5px 6px;\\n background-color: #fff;\\n background-color: rgba(255, 255, 255, .95);\\n}\\n\\n.emoji-mart-category-list {\\n margin: 0;\\n padding: 0;\\n}\\n\\n.emoji-mart-category-list li {\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n display: inline-block;\\n}\\n\\n.emoji-mart-emoji {\\n position: relative;\\n display: inline-block;\\n font-size: 0;\\n margin: 0;\\n padding: 0;\\n border: none;\\n background: none;\\n box-shadow: none;\\n}\\n\\n.emoji-mart-emoji-native {\\n font-family: \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Segoe UI\\\", \\\"Apple Color Emoji\\\", \\\"Twemoji Mozilla\\\", \\\"Noto Color Emoji\\\", \\\"Android Emoji\\\";\\n}\\n\\n.emoji-mart-no-results {\\n font-size: 14px;\\n text-align: center;\\n padding-top: 70px;\\n color: #858585;\\n}\\n.emoji-mart-no-results-img {\\n display: block;\\n margin-left: auto;\\n margin-right: auto;\\n width: 50%;\\n}\\n.emoji-mart-no-results .emoji-mart-category-label {\\n display: none;\\n}\\n.emoji-mart-no-results .emoji-mart-no-results-label {\\n margin-top: .2em;\\n}\\n.emoji-mart-no-results .emoji-mart-emoji:hover:before {\\n content: none;\\n}\\n\\n.emoji-mart-preview {\\n position: relative;\\n height: 70px;\\n}\\n\\n.emoji-mart-preview-emoji,\\n.emoji-mart-preview-data,\\n.emoji-mart-preview-skins {\\n position: absolute;\\n top: 50%;\\n transform: translateY(-50%);\\n}\\n\\n.emoji-mart-preview-emoji {\\n left: 12px;\\n}\\n\\n.emoji-mart-preview-data {\\n left: 68px; right: 12px;\\n word-break: break-all;\\n}\\n\\n.emoji-mart-preview-skins {\\n right: 30px;\\n text-align: right;\\n}\\n\\n.emoji-mart-preview-skins.custom {\\n right: 10px;\\n text-align: right;\\n}\\n\\n.emoji-mart-preview-name {\\n font-size: 14px;\\n}\\n\\n.emoji-mart-preview-shortname {\\n font-size: 12px;\\n color: #888;\\n}\\n.emoji-mart-preview-shortname + .emoji-mart-preview-shortname,\\n.emoji-mart-preview-shortname + .emoji-mart-preview-emoticon,\\n.emoji-mart-preview-emoticon + .emoji-mart-preview-emoticon {\\n margin-left: .5em;\\n}\\n\\n.emoji-mart-preview-emoticon {\\n font-size: 11px;\\n color: #bbb;\\n}\\n\\n.emoji-mart-title span {\\n display: inline-block;\\n vertical-align: middle;\\n}\\n\\n.emoji-mart-title .emoji-mart-emoji {\\n padding: 0;\\n}\\n\\n.emoji-mart-title-label {\\n color: #999A9C;\\n font-size: 26px;\\n font-weight: 300;\\n}\\n\\n.emoji-mart-skin-swatches {\\n font-size: 0;\\n padding: 2px 0;\\n border: 1px solid #d9d9d9;\\n border-radius: 12px;\\n background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.custom {\\n font-size: 0;\\n border: none;\\n background-color: #fff;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch {\\n width: 16px;\\n padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatches.opened .emoji-mart-skin-swatch.selected:after {\\n opacity: .75;\\n}\\n\\n.emoji-mart-skin-swatch {\\n display: inline-block;\\n width: 0;\\n vertical-align: middle;\\n transition-property: width, padding;\\n transition-duration: .125s;\\n transition-timing-function: ease-out;\\n}\\n\\n.emoji-mart-skin-swatch:nth-child(1) { transition-delay: 0s }\\n.emoji-mart-skin-swatch:nth-child(2) { transition-delay: .03s }\\n.emoji-mart-skin-swatch:nth-child(3) { transition-delay: .06s }\\n.emoji-mart-skin-swatch:nth-child(4) { transition-delay: .09s }\\n.emoji-mart-skin-swatch:nth-child(5) { transition-delay: .12s }\\n.emoji-mart-skin-swatch:nth-child(6) { transition-delay: .15s }\\n\\n.emoji-mart-skin-swatch.selected {\\n position: relative;\\n width: 16px;\\n padding: 0 2px;\\n}\\n\\n.emoji-mart-skin-swatch.selected:after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 50%; left: 50%;\\n width: 4px; height: 4px;\\n margin: -2px 0 0 -2px;\\n background-color: #fff;\\n border-radius: 100%;\\n pointer-events: none;\\n opacity: 0;\\n transition: opacity .2s ease-out;\\n}\\n\\n.emoji-mart-skin-swatch.custom {\\n display: inline-block;\\n width: 0;\\n height: 38px;\\n overflow: hidden;\\n vertical-align: middle;\\n transition-property: width, height;\\n transition-duration: .125s;\\n transition-timing-function: ease-out;\\n cursor: default;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected {\\n position: relative;\\n width: 36px;\\n height: 38px;\\n padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatch.custom.selected:after {\\n content: \\\"\\\";\\n width: 0;\\n height: 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom .emoji-mart-skin-swatch.custom:hover {\\n background-color: #f4f4f4;\\n border-radius: 10%;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom {\\n width: 36px;\\n height: 38px;\\n padding: 0 2px 0 0;\\n}\\n\\n.emoji-mart-skin-swatches.custom.opened .emoji-mart-skin-swatch.custom.selected:after {\\n opacity: .75;\\n}\\n\\n.emoji-mart-skin-text.opened {\\n display: inline-block;\\n vertical-align: middle;\\n text-align: left;\\n color: #888;\\n font-size: 11px;\\n padding: 5px 2px;\\n width: 95px;\\n height: 40px;\\n border-radius: 10%;\\n background-color: #fff;\\n}\\n\\n.emoji-mart-skin {\\n display: inline-block;\\n width: 100%;\\n padding-top: 100%;\\n max-width: 12px;\\n border-radius: 100%;\\n}\\n\\n.emoji-mart-skin-tone-1 { background-color: #ffc93a }\\n.emoji-mart-skin-tone-2 { background-color: #fadcbc }\\n.emoji-mart-skin-tone-3 { background-color: #e0bb95 }\\n.emoji-mart-skin-tone-4 { background-color: #bf8f68 }\\n.emoji-mart-skin-tone-5 { background-color: #9b643d }\\n.emoji-mart-skin-tone-6 { background-color: #594539 }\\n\\n/* For screenreaders only, via https://stackoverflow.com/a/19758620 */\\n.emoji-mart-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n border: 0;\\n}\\n\\n/*\\n * Dark mode styles\\n */\\n\\n.emoji-mart-dark {\\n color: #fff;\\n border-color: #555453;\\n background-color: #222;\\n}\\n\\n.emoji-mart-dark .emoji-mart-bar {\\n border-color: #555453;\\n}\\n\\n.emoji-mart-dark .emoji-mart-search input {\\n color: #fff;\\n border-color: #555453;\\n background-color: #2f2f2f;\\n}\\n\\n.emoji-mart-dark .emoji-mart-search-icon svg {\\n fill: #fff;\\n}\\n\\n.emoji-mart-dark .emoji-mart-category .emoji-mart-emoji:hover:before {\\n background-color: #444;\\n}\\n\\n.emoji-mart-dark .emoji-mart-category-label span {\\n background-color: #222;\\n color: #fff;\\n}\\n\\n.emoji-mart-dark .emoji-mart-skin-swatches {\\n border-color: #555453;\\n background-color: #222;\\n}\\n\\n.emoji-mart-dark .emoji-mart-anchor:hover,\\n.emoji-mart-dark .emoji-mart-anchor:focus,\\n.emoji-mart-dark .emoji-mart-anchor-selected {\\n color: #bfbfbf;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"*, ::after, ::before {\\n box-sizing: border-box;\\n}\\n\\nhtml {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -ms-text-size-adjust: 100%;\\n -ms-overflow-style: scrollbar;\\n -webkit-tap-highlight-color: transparent;\\n}\\n\\nhtml, body {\\n padding: 0;\\n margin: 0;\\n height: 100%;\\n}\\n\\nimg {\\n vertical-align: middle;\\n}\\n\\nbody {\\n font-family: -apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";\\n width: 100vw;\\n height: 100vh;\\n height: calc(var(--vh, 1vh) * 100);\\n}\\n\\nbutton, input, optgroup, select, textarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n}\\n\\nbutton, video {\\n padding: 0;\\n border: 0;\\n outline: none;\\n}\\n\\nvideo {\\n width: 100% !important;\\n height: auto !important;\\n}\\n\\nbutton {\\n cursor: pointer;\\n}\\n\\na {\\n text-decoration: none;\\n color: #111111;\\n}\\n\\n.text-link {\\n cursor: pointer;\\n}\\n\\na:hover, .text-link:hover {\\n text-decoration: underline\\n}\\n\\n.message.file.them .down-arrow {\\n background-color: #e9e9e9;\\n}\\n\\n.message.file.me .down-arrow {\\n background-color: #ea4091;\\n}\\n\\n.download-file > * {\\n flex: 0 0 auto;\\n}\\n\\n[contenteditable][placeholder]:empty:before {\\n content: attr(placeholder);\\n position: absolute;\\n color: #cccccc; \\n background-color: transparent;\\n cursor: text;\\n}\\n\\nspan.emoji {\\n display: inline-block;\\n}\\n\\n.message-input .emoji {\\n width: 18px; \\n height: 18px;\\n font-size: 18px; \\n}\\n\\n@media\\n not screen and (-webkit-min-device-pixel-ratio: 2),\\n not screen and ( min--moz-device-pixel-ratio: 2),\\n not screen and ( -o-min-device-pixel-ratio: 2/1),\\n not screen and ( min-device-pixel-ratio: 2),\\n not screen and ( min-resolution: 192dpi),\\n not screen and ( min-resolution: 2dppx) { \\n /* non-Retina-specific stuff here */\\n span.emoji {\\n margin-right: 3px;\\n }\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/website/css/index.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,sBAAsB;AAC1B;;AAEA;IACI,uBAAuB;IACvB,iBAAiB;IACjB,8BAA8B;IAC9B,0BAA0B;IAC1B,6BAA6B;IAC7B,wCAAwC;AAC5C;;AAEA;IACI,UAAU;IACV,SAAS;IACT,YAAY;AAChB;;AAEA;IACI,sBAAsB;AAC1B;;AAEA;IACI,wJAAwJ;IACxJ,YAAY;IACZ,aAAa;IACb,kCAAkC;AACtC;;AAEA;IACI,SAAS;IACT,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;AACxB;;AAEA;IACI,UAAU;IACV,SAAS;IACT,aAAa;AACjB;;AAEA;IACI,yBAAyB;IACzB,yBAAyB;AAC7B;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI,qBAAqB;IACrB,cAAc;AAClB;;AAEA;IACI,eAAe;AACnB;;AAEA;IACI;AACJ;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,0BAA0B;IAC1B,kBAAkB;IAClB,cAAc;IACd,6BAA6B;IAC7B,YAAY;AAChB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,eAAe;AACnB;;AAEA;;;;;;;IAOI,mCAAmC;IACnC;QACI,iBAAiB;IACrB;AACJ\",\"sourcesContent\":[\"*, ::after, ::before {\\n box-sizing: border-box;\\n}\\n\\nhtml {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -ms-text-size-adjust: 100%;\\n -ms-overflow-style: scrollbar;\\n -webkit-tap-highlight-color: transparent;\\n}\\n\\nhtml, body {\\n padding: 0;\\n margin: 0;\\n height: 100%;\\n}\\n\\nimg {\\n vertical-align: middle;\\n}\\n\\nbody {\\n font-family: -apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\";\\n width: 100vw;\\n height: 100vh;\\n height: calc(var(--vh, 1vh) * 100);\\n}\\n\\nbutton, input, optgroup, select, textarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n}\\n\\nbutton, video {\\n padding: 0;\\n border: 0;\\n outline: none;\\n}\\n\\nvideo {\\n width: 100% !important;\\n height: auto !important;\\n}\\n\\nbutton {\\n cursor: pointer;\\n}\\n\\na {\\n text-decoration: none;\\n color: #111111;\\n}\\n\\n.text-link {\\n cursor: pointer;\\n}\\n\\na:hover, .text-link:hover {\\n text-decoration: underline\\n}\\n\\n.message.file.them .down-arrow {\\n background-color: #e9e9e9;\\n}\\n\\n.message.file.me .down-arrow {\\n background-color: #ea4091;\\n}\\n\\n.download-file > * {\\n flex: 0 0 auto;\\n}\\n\\n[contenteditable][placeholder]:empty:before {\\n content: attr(placeholder);\\n position: absolute;\\n color: #cccccc; \\n background-color: transparent;\\n cursor: text;\\n}\\n\\nspan.emoji {\\n display: inline-block;\\n}\\n\\n.message-input .emoji {\\n width: 18px; \\n height: 18px;\\n font-size: 18px; \\n}\\n\\n@media\\n not screen and (-webkit-min-device-pixel-ratio: 2),\\n not screen and ( min--moz-device-pixel-ratio: 2),\\n not screen and ( -o-min-device-pixel-ratio: 2/1),\\n not screen and ( min-device-pixel-ratio: 2),\\n not screen and ( min-resolution: 192dpi),\\n not screen and ( min-resolution: 2dppx) { \\n /* non-Retina-specific stuff here */\\n span.emoji {\\n margin-right: 3px;\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Module\nvar code = \" \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" \";\n// Exports\nmodule.exports = code;","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!./emoji-mart.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!./index.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","var React = require('react');\n\nfunction CreateGroupChat (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M15.313 15.672c2.401 0 4.237-1.835 4.237-4.235S17.713 7.2 15.313 7.2s-4.235 1.836-4.235 4.237 1.834 4.235 4.235 4.235zm9.349-.64c1.571 0 2.773-1.201 2.773-2.772 0-1.571-1.202-2.773-2.773-2.773s-2.772 1.202-2.772 2.773c0 1.571 1.201 2.772 2.772 2.772zm-1.724 5.841a7.856 7.856 0 0 0-.889-1.107 8.074 8.074 0 0 0-1.825-1.413 9.05 9.05 0 0 0-.675-.346l-.021-.009c-1.107-.502-2.5-.851-4.232-.851-1.732 0-3.124.349-4.232.851l-.112.054a9.247 9.247 0 0 0-.705.374 8.137 8.137 0 0 0-1.705 1.341 7.991 7.991 0 0 0-.656.773 8.584 8.584 0 0 0-.233.334c-.063.095-.116.184-.164.263l-.012.02a4.495 4.495 0 0 0-.213.408v2.276h16.061v-2.276s-.07-.164-.225-.427a4.257 4.257 0 0 0-.162-.265zm1.724-4.357c-1.333 0-2.376.3-3.179.713a9.409 9.409 0 0 1 1.733 1.218c1.402 1.25 1.959 2.503 2.017 2.641l.021.049h4.954v-1.571s-1.294-3.05-5.546-3.05zM9.41 13.78H6.261v-3.152H4.344v3.152H1.2v1.918h3.144v3.145h1.917v-3.145H9.41V13.78z\"}));\n}\n\nCreateGroupChat.defaultProps = {\"viewBox\":\"-2 -1 36 32\",\"width\":\"36\",\"height\":\"32\"};\n\nmodule.exports = CreateGroupChat;\n\nCreateGroupChat.default = CreateGroupChat;\n","var React = require('react');\n\nfunction Dollar (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"d\":\"m 145,312 c -2,69 31,100 104,102 78,1 113,-34 109,-101 -6,-58 -62,-73 -106,-79 -48,-17 -99,-25 -99,-95 0,-48 32,-79 99,-78 60,0 97,25 96,84\",\"style\":{\"fill\":\"none\",\"stroke\":\"#9b9b9b\",\"strokeWidth\":\"40\"},\"key\":0}),React.createElement(\"path\",{\"d\":\"m 250,15 0,470\",\"style\":{\"stroke\":\"#9b9b9b\",\"strokeWidth\":\"30\"},\"key\":1})]);\n}\n\nDollar.defaultProps = {\"version\":\"1.1\",\"viewBox\":\"0 0 500 500\",\"width\":\"24\",\"height\":\"24\"};\n\nmodule.exports = Dollar;\n\nDollar.default = Dollar;\n","var React = require('react');\n\nfunction DoubleTick (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M15.01 3.316l-.478-.372a.365.365 0 0 0-.51.063L8.666 9.879a.32.32 0 0 1-.484.033l-.358-.325a.319.319 0 0 0-.484.032l-.378.483a.418.418 0 0 0 .036.541l1.32 1.266c.143.14.361.125.484-.033l6.272-8.048a.366.366 0 0 0-.064-.512zm-4.1 0l-.478-.372a.365.365 0 0 0-.51.063L4.566 9.879a.32.32 0 0 1-.484.033L1.891 7.769a.366.366 0 0 0-.515.006l-.423.433a.364.364 0 0 0 .006.514l3.258 3.185c.143.14.361.125.484-.033l6.272-8.048a.365.365 0 0 0-.063-.51z\"}));\n}\n\nDoubleTick.defaultProps = {\"viewBox\":\"0 0 16 16\"};\n\nmodule.exports = DoubleTick;\n\nDoubleTick.default = DoubleTick;\n","var React = require('react');\n\nfunction GroupChatIcon (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"className\":\"background\",\"d\":\"M105.946.25C164.318.25 211.64 47.596 211.64 106s-47.322 105.75-105.695 105.75C47.571 211.75.25 164.404.25 106S47.571.25 105.946.25z\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M61.543 100.988c8.073 0 14.246-6.174 14.246-14.246s-6.173-14.246-14.246-14.246-14.246 6.173-14.246 14.246 6.174 14.246 14.246 14.246zm8.159 17.541a48.192 48.192 0 0 1 8.545-6.062c-4.174-2.217-9.641-3.859-16.704-3.859-21.844 0-28.492 15.67-28.492 15.67v8.073h26.181l.105-.248c.303-.713 3.164-7.151 10.365-13.574zm80.755-9.921c-6.854 0-12.21 1.543-16.336 3.661a48.223 48.223 0 0 1 8.903 6.26c7.201 6.422 10.061 12.861 10.364 13.574l.105.248h25.456v-8.073c-.001 0-6.649-15.67-28.492-15.67zm0-7.62c8.073 0 14.246-6.174 14.246-14.246s-6.173-14.246-14.246-14.246-14.246 6.173-14.246 14.246 6.173 14.246 14.246 14.246zm-44.093 3.21a23.21 23.21 0 0 0 4.464-.428c.717-.14 1.419-.315 2.106-.521 1.03-.309 2.023-.69 2.976-1.138a21.099 21.099 0 0 0 3.574-2.133 20.872 20.872 0 0 0 5.515-6.091 21.283 21.283 0 0 0 2.121-4.823 22.16 22.16 0 0 0 .706-3.193c.16-1.097.242-2.224.242-3.377s-.083-2.281-.242-3.377a22.778 22.778 0 0 0-.706-3.193 21.283 21.283 0 0 0-3.272-6.55 20.848 20.848 0 0 0-4.364-4.364 21.099 21.099 0 0 0-3.574-2.133 21.488 21.488 0 0 0-2.976-1.138 22.33 22.33 0 0 0-2.106-.521 23.202 23.202 0 0 0-4.464-.428c-12.299 0-21.705 9.405-21.705 21.704 0 12.299 9.406 21.704 21.705 21.704zM145.629 131a36.739 36.739 0 0 0-1.2-1.718 39.804 39.804 0 0 0-3.367-3.967 41.481 41.481 0 0 0-3.442-3.179 42.078 42.078 0 0 0-5.931-4.083 43.725 43.725 0 0 0-3.476-1.776c-.036-.016-.069-.034-.104-.05-5.692-2.581-12.849-4.376-21.746-4.376-8.898 0-16.055 1.795-21.746 4.376-.196.089-.379.185-.572.276a43.316 43.316 0 0 0-3.62 1.917 42.32 42.32 0 0 0-5.318 3.716 41.501 41.501 0 0 0-3.443 3.179 40.632 40.632 0 0 0-3.366 3.967c-.452.61-.851 1.186-1.2 1.718-.324.493-.6.943-.841 1.351l-.061.101a27.96 27.96 0 0 0-.622 1.119c-.325.621-.475.975-.475.975v11.692h82.53v-11.692s-.36-.842-1.158-2.195a35.417 35.417 0 0 0-.842-1.351z\",\"key\":1})]);\n}\n\nGroupChatIcon.defaultProps = {\"viewBox\":\"0 0 212 212\",\"width\":\"212\",\"height\":\"212\"};\n\nmodule.exports = GroupChatIcon;\n\nGroupChatIcon.default = GroupChatIcon;\n","var React = require('react');\n\nfunction Paperclip (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M1.816 15.556v.002c0 1.502.584 2.912 1.646 3.972s2.472 1.647 3.974 1.647a5.58 5.58 0 0 0 3.972-1.645l9.547-9.548c.769-.768 1.147-1.767 1.058-2.817-.079-.968-.548-1.927-1.319-2.698-1.594-1.592-4.068-1.711-5.517-.262l-7.916 7.915c-.881.881-.792 2.25.214 3.261.959.958 2.423 1.053 3.263.215l5.511-5.512c.28-.28.267-.722.053-.936l-.244-.244c-.191-.191-.567-.349-.957.04l-5.506 5.506c-.18.18-.635.127-.976-.214-.098-.097-.576-.613-.213-.973l7.915-7.917c.818-.817 2.267-.699 3.23.262.5.501.802 1.1.849 1.685.051.573-.156 1.111-.589 1.543l-9.547 9.549a3.97 3.97 0 0 1-2.829 1.171 3.975 3.975 0 0 1-2.83-1.173 3.973 3.973 0 0 1-1.172-2.828c0-1.071.415-2.076 1.172-2.83l7.209-7.211c.157-.157.264-.579.028-.814L11.5 4.36a.572.572 0 0 0-.834.018l-7.205 7.207a5.577 5.577 0 0 0-1.645 3.971z\"}));\n}\n\nPaperclip.defaultProps = {\"viewBox\":\"0 0 24 24\",\"width\":\"24\",\"height\":\"24\"};\n\nmodule.exports = Paperclip;\n\nPaperclip.default = Paperclip;\n","var React = require('react');\n\nfunction Search (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M15.009 13.805h-.636l-.22-.219a5.184 5.184 0 0 0 1.256-3.386 5.207 5.207 0 1 0-5.207 5.208 5.183 5.183 0 0 0 3.385-1.255l.221.22v.635l4.004 3.999 1.194-1.195-3.997-4.007zm-4.808 0a3.605 3.605 0 1 1 0-7.21 3.605 3.605 0 0 1 0 7.21z\"}));\n}\n\nSearch.defaultProps = {\"viewBox\":\"0 0 24 24\",\"width\":\"24\",\"height\":\"24\"};\n\nmodule.exports = Search;\n\nSearch.default = Search;\n","var React = require('react');\n\nfunction Smiley (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M9.153 11.603c.795 0 1.439-.879 1.439-1.962s-.644-1.962-1.439-1.962-1.439.879-1.439 1.962.644 1.962 1.439 1.962zm-3.204 1.362c-.026-.307-.131 5.218 6.063 5.551 6.066-.25 6.066-5.551 6.066-5.551-6.078 1.416-12.129 0-12.129 0zm11.363 1.108s-.669 1.959-5.051 1.959c-3.505 0-5.388-1.164-5.607-1.959 0 0 5.912 1.055 10.658 0zM11.804 1.011C5.609 1.011.978 6.033.978 12.228s4.826 10.761 11.021 10.761S23.02 18.423 23.02 12.228c.001-6.195-5.021-11.217-11.216-11.217zM12 21.354c-5.273 0-9.381-3.886-9.381-9.159s3.942-9.548 9.215-9.548 9.548 4.275 9.548 9.548c-.001 5.272-4.109 9.159-9.382 9.159zm3.108-9.751c.795 0 1.439-.879 1.439-1.962s-.644-1.962-1.439-1.962-1.439.879-1.439 1.962.644 1.962 1.439 1.962z\"}));\n}\n\nSmiley.defaultProps = {\"viewBox\":\"0 0 24 24\",\"width\":\"24\",\"height\":\"24\"};\n\nmodule.exports = Smiley;\n\nSmiley.default = Smiley;\n","var React = require('react');\n\nfunction Tick (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M10.91 3.316l-.478-.372a.365.365 0 0 0-.51.063L4.566 9.879a.32.32 0 0 1-.484.033L1.891 7.769a.366.366 0 0 0-.515.006l-.423.433a.364.364 0 0 0 .006.514l3.258 3.185c.143.14.361.125.484-.033l6.272-8.048a.365.365 0 0 0-.063-.51z\"}));\n}\n\nTick.defaultProps = {\"viewBox\":\"0 0 16 16\"};\n\nmodule.exports = Tick;\n\nTick.default = Tick;\n","var React = require('react');\n\nfunction Tick2 (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M8 17.1l-5.2-5.2-1.7 1.7 6.9 7L22.9 5.7 21.2 4 8 17.1z\"}));\n}\n\nTick2.defaultProps = {\"viewBox\":\"0 0 24 24\",\"width\":\"24\",\"height\":\"24\"};\n\nmodule.exports = Tick2;\n\nTick2.default = Tick2;\n","var React = require('react');\n\nfunction UnknownUserAvatar (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"className\":\"background\",\"d\":\"M106.251.5C164.653.5 212 47.846 212 106.25S164.653 212 106.25 212C47.846 212 .5 164.654.5 106.25S47.846.5 106.251.5z\",\"key\":0}),React.createElement(\"path\",{\"fill\":\"currentColor\",\"d\":\"M173.561 171.615a62.767 62.767 0 0 0-2.065-2.955 67.7 67.7 0 0 0-2.608-3.299 70.112 70.112 0 0 0-3.184-3.527 71.097 71.097 0 0 0-5.924-5.47 72.458 72.458 0 0 0-10.204-7.026 75.2 75.2 0 0 0-5.98-3.055c-.062-.028-.118-.059-.18-.087-9.792-4.44-22.106-7.529-37.416-7.529s-27.624 3.089-37.416 7.529c-.338.153-.653.318-.985.474a75.37 75.37 0 0 0-6.229 3.298 72.589 72.589 0 0 0-9.15 6.395 71.243 71.243 0 0 0-5.924 5.47 70.064 70.064 0 0 0-3.184 3.527 67.142 67.142 0 0 0-2.609 3.299 63.292 63.292 0 0 0-2.065 2.955 56.33 56.33 0 0 0-1.447 2.324c-.033.056-.073.119-.104.174a47.92 47.92 0 0 0-1.07 1.926c-.559 1.068-.818 1.678-.818 1.678v.398c18.285 17.927 43.322 28.985 70.945 28.985 27.678 0 52.761-11.103 71.055-29.095v-.289s-.619-1.45-1.992-3.778a58.346 58.346 0 0 0-1.446-2.322zM106.002 125.5c2.645 0 5.212-.253 7.68-.737a38.272 38.272 0 0 0 3.624-.896 37.124 37.124 0 0 0 5.12-1.958 36.307 36.307 0 0 0 6.15-3.67 35.923 35.923 0 0 0 9.489-10.48 36.558 36.558 0 0 0 2.422-4.84 37.051 37.051 0 0 0 1.716-5.25c.299-1.208.542-2.443.725-3.701.275-1.887.417-3.827.417-5.811s-.142-3.925-.417-5.811a38.734 38.734 0 0 0-1.215-5.494 36.68 36.68 0 0 0-3.648-8.298 35.923 35.923 0 0 0-9.489-10.48 36.347 36.347 0 0 0-6.15-3.67 37.124 37.124 0 0 0-5.12-1.958 37.67 37.67 0 0 0-3.624-.896 39.875 39.875 0 0 0-7.68-.737c-21.162 0-37.345 16.183-37.345 37.345 0 21.159 16.183 37.342 37.345 37.342z\",\"key\":1})]);\n}\n\nUnknownUserAvatar.defaultProps = {\"viewBox\":\"0 0 212 212\",\"width\":\"212\",\"height\":\"212\"};\n\nmodule.exports = UnknownUserAvatar;\n\nUnknownUserAvatar.default = UnknownUserAvatar;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.changeRightPanel = exports.changeLeftPanel = exports.RIGHT_PANEL_CHANGED = exports.MIDDLE_PANEL_CHANGED = exports.LEFT_PANEL_CHANGED = void 0;\nexports.LEFT_PANEL_CHANGED = \"LEFT_PANEL_CHANGED\";\nexports.MIDDLE_PANEL_CHANGED = \"MIDDLE_PANEL_CHANGED\";\nexports.RIGHT_PANEL_CHANGED = \"RIGHT_PANEL_CHANGED\";\nfunction changeLeftPanel(sidePanel) {\n return {\n type: exports.LEFT_PANEL_CHANGED,\n payload: sidePanel\n };\n}\nexports.changeLeftPanel = changeLeftPanel;\nfunction changeRightPanel(sidePanel) {\n return {\n type: exports.RIGHT_PANEL_CHANGED,\n payload: sidePanel\n };\n}\nexports.changeRightPanel = changeRightPanel;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GOTO_HOME = void 0;\nexports.GOTO_HOME = \"GOTO_HOME\";\nfunction default_1() {\n return { type: exports.GOTO_HOME };\n}\nexports.default = default_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stopSpinning = exports.startSpinning = exports.STOP_SPINNING = exports.START_SPINNING = void 0;\nexports.START_SPINNING = \"START_SPINNING\";\nexports.STOP_SPINNING = \"STOP_SPINNING\";\nfunction startSpinning() {\n return {\n type: exports.START_SPINNING\n };\n}\nexports.startSpinning = startSpinning;\nfunction stopSpinning() {\n return {\n type: exports.STOP_SPINNING\n };\n}\nexports.stopSpinning = stopSpinning;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.THEME_SELECTED = void 0;\nexports.THEME_SELECTED = \"THEME_SELECTED\";\nfunction selectTheme(theme) {\n return {\n type: exports.THEME_SELECTED,\n payload: theme\n };\n}\nexports.default = selectTheme;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SWITCH_VIEW_MODE_REQUESTED = void 0;\nexports.SWITCH_VIEW_MODE_REQUESTED = \"SWITCH_VIEW_MODE_REQUESTED\";\nfunction default_1(viewMode) {\n return (dispatch, getState) => {\n const selectedChatIndex = getState().chatsState.selectedChatIndex;\n const event = {\n type: exports.SWITCH_VIEW_MODE_REQUESTED,\n payload: {\n viewMode,\n isChatSelected: selectedChatIndex != null\n }\n };\n dispatch(event);\n };\n}\nexports.default = default_1;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ADD_PARTICIPANTS_SUCCEEDED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst constants_1 = require(\"../../constants\");\nconst Stopwatch_1 = __importDefault(require(\"../../utils/Stopwatch\"));\nconst modalSpinner_1 = require(\"../app/modalSpinner\");\nconst Alert_1 = require(\"../../components/modals/Alert\");\nconst setFunctions = __importStar(require(\"../../utils/setFunctions\"));\nexports.ADD_PARTICIPANTS_SUCCEEDED = \"ADD_PARTICIPANTS_SUCCEEDED\";\nfunction default_1(chat, userIds) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n if (chat.kind === constants_1.UNCONFIRMED_GROUP_CHAT)\n return;\n dispatch(modalSpinner_1.startSpinning());\n const timer = Stopwatch_1.default.startNew();\n const response = yield service_1.default.addParticipants(chat.chatId, userIds);\n if (response.kind === \"success\" || response.kind === \"partialSuccess\") {\n let usersAdded = userIds;\n if (response.kind === \"partialSuccess\") {\n setFunctions.exceptWith(usersAdded, response.blocked);\n let text = \"You can't add users if you are blocking them or they are blocking you\";\n let title = \"User not added\";\n if (userIds.length > 1) {\n if (response.countAdded == 0) {\n title = \"No users added\";\n }\n else {\n title = `Only ${response.countAdded} users added`;\n }\n }\n Alert_1.alertDialog({ title, text });\n }\n if (response.countAdded > 0) {\n dispatch({\n type: exports.ADD_PARTICIPANTS_SUCCEEDED,\n payload: {\n chatId: chat.chatId,\n users: usersAdded,\n durationMs: timer.getElapsedMs()\n }\n });\n }\n }\n dispatch(modalSpinner_1.stopSpinning());\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.blockUser = exports.USER_UNBLOCKED = exports.USER_BLOCKED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst modalSpinner_1 = require(\"../app/modalSpinner\");\nexports.USER_BLOCKED = \"USER_BLOCKED\";\nexports.USER_UNBLOCKED = \"USER_UNBLOCKED\";\nfunction blockUser(userId, unblock) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n dispatch(modalSpinner_1.startSpinning());\n yield service_1.default.blockUser(userId, unblock);\n let event = {\n type: unblock ? exports.USER_UNBLOCKED : exports.USER_BLOCKED,\n payload: {\n userId\n }\n };\n dispatch(event);\n dispatch(modalSpinner_1.stopSpinning());\n });\n}\nexports.blockUser = blockUser;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CREATE_GROUP_CHAT_FAILED = exports.CREATE_GROUP_CHAT_SUCCEEDED = exports.CREATE_GROUP_CHAT_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst sendMessage_1 = __importDefault(require(\"./sendMessage\"));\nconst Stopwatch_1 = __importDefault(require(\"../../utils/Stopwatch\"));\nexports.CREATE_GROUP_CHAT_REQUESTED = \"CREATE_GROUP_CHAT_REQUESTED\";\nexports.CREATE_GROUP_CHAT_SUCCEEDED = \"CREATE_GROUP_CHAT_SUCCEEDED\";\nexports.CREATE_GROUP_CHAT_FAILED = \"CREATE_GROUP_CHAT_FAILED\";\nfunction default_1(subject, users, chatHistoryVisibleToNewJoiners) {\n return (dispatch, getState) => __awaiter(this, void 0, void 0, function* () {\n const timer = Stopwatch_1.default.startNew();\n const chatId = chatFunctions.generateChatId();\n const requestEvent = {\n type: exports.CREATE_GROUP_CHAT_REQUESTED,\n payload: {\n chatId,\n subject,\n users\n }\n };\n dispatch(requestEvent);\n const response = yield service_1.default.createGroupChat(chatId, subject, users, chatHistoryVisibleToNewJoiners);\n if (response.kind !== \"success\") {\n dispatch({\n type: exports.CREATE_GROUP_CHAT_FAILED,\n payload: {\n chatId,\n subject,\n users,\n response\n }\n });\n return;\n }\n // Messages may have been added on the UI before the chat was confirmed on the back end. These messages will\n // have been added to the 'chat.unconfirmedMessages' array. So we need to read the values out of this array,\n // then apply the state change to confirm the chat, then send those messages using the new chatId.\n const oldChat = chatFunctions.getChat(getState().chatsState.chats, chatId)[0];\n dispatch({\n type: exports.CREATE_GROUP_CHAT_SUCCEEDED,\n payload: {\n chatId,\n chat: response.result,\n durationMs: timer.getElapsedMs()\n }\n });\n const messagesToSend = oldChat.messages;\n if (messagesToSend.length) {\n const chat = chatFunctions.getChat(getState().chatsState.chats, chatId)[0];\n messagesToSend.forEach(m => dispatch(sendMessage_1.default(chat, m.content, m.repliesTo)));\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DESELECT_MESSAGE = void 0;\nexports.DESELECT_MESSAGE = \"DESELECT_MESSAGE\";\nfunction default_1(chatId) {\n return {\n type: exports.DESELECT_MESSAGE,\n payload: {\n chatId\n }\n };\n}\nexports.default = default_1;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GET_ALL_CHATS_FAILED = exports.GET_ALL_CHATS_SUCCEEDED = exports.GET_ALL_CHATS_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst constants_1 = require(\"../../constants\");\nconst viewMode_1 = require(\"../../domain/model/viewMode\");\nconst historyFunctions_1 = require(\"../../domain/historyFunctions\");\nconst Alert_1 = require(\"../../components/modals/Alert\");\nexports.GET_ALL_CHATS_REQUESTED = \"GET_ALL_CHATS_REQUESTED\";\nexports.GET_ALL_CHATS_SUCCEEDED = \"GET_ALL_CHATS_SUCCEEDED\";\nexports.GET_ALL_CHATS_FAILED = \"GET_ALL_CHATS_FAILED\";\nfunction default_1() {\n return (dispatch, getState) => __awaiter(this, void 0, void 0, function* () {\n const requestEvent = {\n type: exports.GET_ALL_CHATS_REQUESTED\n };\n dispatch(requestEvent);\n const response = yield service_1.default.getUpdates({\n updatedSince: null,\n messageCountForTopChat: constants_1.PAGE_SIZE\n });\n let outcomeEvent;\n if (response.kind === \"success\") {\n const viewMode = getState().appState.viewMode;\n const chats = response.chats;\n let chatIndex = (chats.length > 0 && viewMode === viewMode_1.ViewMode.Desktop) ? 0 : null;\n const selectedChatId = historyFunctions_1.extractChatIdFromLocation();\n if (selectedChatId != null) {\n const [_, index] = chatFunctions.tryGetChat(chats, selectedChatId);\n if (index >= 0) {\n chatIndex = index;\n }\n }\n outcomeEvent = {\n type: exports.GET_ALL_CHATS_SUCCEEDED,\n payload: {\n chats: response.chats,\n blockedUsers: response.blockedUsers,\n latestUpdateTimestamp: response.latestUpdateTimestamp,\n selectedChatIndex: chatIndex\n }\n };\n if (chats.length == 0) {\n Alert_1.alertDialog(constants_1.ABOUT_US);\n }\n }\n else {\n outcomeEvent = {\n type: exports.GET_ALL_CHATS_FAILED,\n httpError: response.kind === \"httpError\" ? response : undefined\n };\n }\n dispatch(outcomeEvent);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GET_MESSAGES_FAILED = exports.GET_MESSAGES_SUCCEEDED = exports.GET_MESSAGES_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nexports.GET_MESSAGES_REQUESTED = \"GET_MESSAGES_REQUESTED\";\nexports.GET_MESSAGES_SUCCEEDED = \"GET_MESSAGES_SUCCEEDED\";\nexports.GET_MESSAGES_FAILED = \"GET_MESSAGES_FAILED\";\nfunction default_1(chatId, fromId, count) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n const request = {\n chatId,\n fromId,\n count\n };\n const requestEvent = {\n type: exports.GET_MESSAGES_REQUESTED,\n payload: request\n };\n dispatch(requestEvent);\n const response = yield service_1.default.getMessages(chatId, fromId, count);\n let outcomeEvent;\n if (response.kind === \"success\") {\n outcomeEvent = {\n type: exports.GET_MESSAGES_SUCCEEDED,\n payload: {\n request: request,\n result: response.result\n }\n };\n }\n else {\n outcomeEvent = {\n type: exports.GET_MESSAGES_FAILED,\n payload: request\n };\n }\n dispatch(outcomeEvent);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GET_MESSAGES_BY_ID_FAILED = exports.GET_MESSAGES_BY_ID_SUCCEEDED = exports.GET_MESSAGES_BY_ID_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nexports.GET_MESSAGES_BY_ID_REQUESTED = \"GET_MESSAGES_BY_ID_REQUESTED\";\nexports.GET_MESSAGES_BY_ID_SUCCEEDED = \"GET_MESSAGES_BY_ID_SUCCEEDED\";\nexports.GET_MESSAGES_BY_ID_FAILED = \"GET_MESSAGES_BY_ID_FAILED\";\nfunction default_1(chatId, messageIds) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n const request = {\n chatId,\n messageIds\n };\n const requestEvent = {\n type: exports.GET_MESSAGES_BY_ID_REQUESTED,\n payload: request\n };\n dispatch(requestEvent);\n const response = yield service_1.default.getMessagesById(chatId, messageIds);\n let outcomeEvent;\n if (response.kind === \"success\") {\n outcomeEvent = {\n type: exports.GET_MESSAGES_BY_ID_SUCCEEDED,\n payload: {\n request: request,\n result: response.result\n }\n };\n }\n else {\n outcomeEvent = {\n type: exports.GET_MESSAGES_BY_ID_FAILED,\n payload: request\n };\n }\n dispatch(outcomeEvent);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GET_UPDATED_CHATS_FAILED = exports.GET_UPDATED_CHATS_SUCCEEDED = exports.GET_UPDATED_CHATS_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nexports.GET_UPDATED_CHATS_REQUESTED = \"GET_UPDATED_CHATS_REQUESTED\";\nexports.GET_UPDATED_CHATS_SUCCEEDED = \"GET_UPDATED_CHATS_SUCCEEDED\";\nexports.GET_UPDATED_CHATS_FAILED = \"GET_UPDATED_CHATS_FAILED\";\nfunction default_1(updatedSince) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n // This function is called every second and we do not currently listen for GET_UPDATED_CHATS_REQUESTED event so\n // in order to remove noise and aid debugging these events are not being dispatched for now.\n //\n // const requestEvent: GetUpdatedChatsRequestedEvent = {\n // type: GET_UPDATED_CHATS_REQUESTED\n // };\n //\n // dispatch(requestEvent);\n const response = yield service_1.default.getUpdates({\n updatedSince: updatedSince,\n messageCountForTopChat: null\n });\n let outcomeEvent;\n if (response.kind === \"success\") {\n outcomeEvent = {\n type: exports.GET_UPDATED_CHATS_SUCCEEDED,\n payload: {\n chats: response.chats,\n blockedUsers: response.blockedUsers,\n latestUpdateTimestamp: response.latestUpdateTimestamp\n }\n };\n }\n else {\n outcomeEvent = {\n type: exports.GET_UPDATED_CHATS_FAILED,\n httpError: response.kind === \"httpError\" ? response : undefined\n };\n }\n // This function is called every second and the only events that make any state changes are the\n // GET_UPDATED_CHATS_SUCCEEDED which have non-empty chats. So we can ignore the events with empty chats.\n if (outcomeEvent.type !== exports.GET_UPDATED_CHATS_SUCCEEDED || outcomeEvent.payload.chats.length) {\n dispatch(outcomeEvent);\n }\n return outcomeEvent;\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gotoChatByIndex = exports.gotoChatById = exports.GOTO_CHAT = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst CurrentUserTypingHandler_1 = __importDefault(require(\"../../domain/CurrentUserTypingHandler\"));\nconst MarkAsReadHandler_1 = __importDefault(require(\"../../domain/MarkAsReadHandler\"));\nconst notifications = __importStar(require(\"../../notifications\"));\nexports.GOTO_CHAT = \"GOTO_CHAT\";\nfunction gotoChatById(chatId, messageId, fromHistory) {\n return (dispatch, getState) => __awaiter(this, void 0, void 0, function* () {\n let chatsState = getState().chatsState;\n let chatIndex = chatFunctions.findChatIndex(chatsState.chats, chatId);\n if (chatIndex == -1) {\n chatIndex = 0;\n }\n return gotoChat(dispatch, chatsState, chatIndex, messageId, fromHistory);\n });\n}\nexports.gotoChatById = gotoChatById;\nfunction gotoChatByIndex(chatIndex, messageId) {\n return (dispatch, getState) => __awaiter(this, void 0, void 0, function* () {\n return gotoChat(dispatch, getState().chatsState, chatIndex, messageId, false);\n });\n}\nexports.gotoChatByIndex = gotoChatByIndex;\nfunction gotoChat(dispatch, chatsState, chatIndex, messageId, fromHistory) {\n return __awaiter(this, void 0, void 0, function* () {\n if (chatIndex === chatsState.selectedChatIndex && !messageId) {\n return null;\n }\n if (chatsState.selectedChatIndex != null && chatIndex !== chatsState.selectedChatIndex) {\n const prevChat = chatsState.chats[chatsState.selectedChatIndex];\n if (chatFunctions.isConfirmedChat(prevChat)) {\n CurrentUserTypingHandler_1.default.markTypingStopped(prevChat.chatId);\n MarkAsReadHandler_1.default.updateServer();\n }\n }\n let missingMessages = [];\n const chat = chatsState.chats[chatIndex];\n if (chat) {\n // Load missing messages if necessary\n if (messageId) {\n const messages = yield loadMissingMessages(chat, messageId);\n if (messages != null) {\n missingMessages = messages;\n // The message was missing - check that we now have it\n if (messages.find(m => m.id === messageId) == undefined) {\n messageId = undefined;\n }\n }\n }\n notifications.close(chat.chatId);\n }\n const event = {\n type: exports.GOTO_CHAT,\n payload: {\n chatIndex,\n messageId: messageId !== null && messageId !== void 0 ? messageId : null,\n missingMessages,\n fromHistory: fromHistory !== null && fromHistory !== void 0 ? fromHistory : false\n }\n };\n dispatch(event);\n return event;\n });\n}\nfunction loadMissingMessages(chat, messageId) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const excessMessages = 20;\n const from = Math.max(1, messageId - excessMessages);\n const to = (_a = chat.minLocalMessageId) !== null && _a !== void 0 ? _a : (messageId + excessMessages);\n let pageSize = to - from;\n if (pageSize <= 0) {\n return null;\n }\n // Load missing messages\n const result = yield service_1.default.getMessages(chat.chatId, from, pageSize);\n if (result.kind !== \"success\") {\n console.log(result);\n return [];\n }\n return result.result.messages;\n });\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.gotoKnownUser = exports.DIRECT_CHAT_CREATED = void 0;\nconst gotoChat_1 = require(\"./gotoChat\");\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nexports.DIRECT_CHAT_CREATED = \"DIRECT_CHAT_CREATED\";\nfunction default_1(user) {\n return (dispatch, getState) => {\n gotoUser(dispatch, getState, user);\n };\n}\nexports.default = default_1;\n// Only use this method if the user's details are already stored in the state\nfunction gotoKnownUser(userId) {\n return (dispatch, getState) => {\n const userDictionary = getState().usersState.userDictionary;\n const user = userDictionary[userId];\n if (!user) {\n throw new Error(\"User details not found in state - \" + userId);\n }\n gotoUser(dispatch, getState, user);\n };\n}\nexports.gotoKnownUser = gotoKnownUser;\nfunction gotoUser(dispatch, getState, user) {\n const chats = getState().chatsState.chats;\n const directChatIndex = chatFunctions.findDirectChatIndex(chats, user.userId);\n // If I already have a direct chat with this user then select it otherwise setup a new direct chat\n if (directChatIndex >= 0) {\n dispatch(gotoChat_1.gotoChatByIndex(directChatIndex));\n }\n else {\n const newChat = chatFunctions.newUnconfirmedDirectChat(user.userId, user.chatId);\n const directChatCreatedEvent = {\n type: exports.DIRECT_CHAT_CREATED,\n payload: {\n chat: newChat,\n user\n }\n };\n dispatch(directChatCreatedEvent);\n }\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JOIN_GROUP_FAILED_ALREADY_IN_GROUP = exports.JOIN_GROUP_FAILED = exports.JOIN_GROUP_SUCCEEDED = exports.JOIN_GROUP_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst joinGroup_1 = require(\"../../services/chats/joinGroup\");\nconst ChatsUpdater_1 = __importDefault(require(\"../../domain/ChatsUpdater\"));\nexports.JOIN_GROUP_REQUESTED = \"JOIN_GROUP_REQUESTED\";\nexports.JOIN_GROUP_SUCCEEDED = \"JOIN_GROUP_SUCCEEDED\";\nexports.JOIN_GROUP_FAILED = \"JOIN_GROUP_FAILED\";\nexports.JOIN_GROUP_FAILED_ALREADY_IN_GROUP = \"JOIN_GROUP_FAILED_ALREADY_IN_GROUP\";\nfunction default_1(chatId) {\n return (dispatch, getState) => __awaiter(this, void 0, void 0, function* () {\n const state = getState();\n if (chatFunctions.tryGetChat(state.chatsState.chats, chatId)[0]) {\n alert(\"You are already in this chat\");\n return;\n }\n const requestEvent = {\n type: exports.JOIN_GROUP_REQUESTED,\n payload: {\n chatId\n }\n };\n dispatch(requestEvent);\n const result = yield service_1.default.joinGroup(chatId);\n if (result === joinGroup_1.JoinGroupResult.Success) {\n dispatch({\n type: exports.JOIN_GROUP_SUCCEEDED,\n payload: {\n chatId\n }\n });\n yield ChatsUpdater_1.default.triggerUpdate();\n }\n else if (result === joinGroup_1.JoinGroupResult.AlreadyInGroup) {\n dispatch({\n type: exports.JOIN_GROUP_FAILED_ALREADY_IN_GROUP,\n payload: {\n chatId,\n result\n }\n });\n }\n else {\n dispatch({\n type: exports.JOIN_GROUP_FAILED,\n payload: {\n chatId,\n result\n }\n });\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LEAVE_GROUP_FAILED = exports.LEAVE_GROUP_SUCCEEDED = exports.LEAVE_GROUP_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst leaveGroup_1 = require(\"../../services/chats/leaveGroup\");\nconst modalSpinner_1 = require(\"../app/modalSpinner\");\nexports.LEAVE_GROUP_REQUESTED = \"LEAVE_GROUP_REQUESTED\";\nexports.LEAVE_GROUP_SUCCEEDED = \"LEAVE_GROUP_SUCCEEDED\";\nexports.LEAVE_GROUP_FAILED = \"LEAVE_GROUP_FAILED\";\nfunction default_1(chatId) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n dispatch(modalSpinner_1.startSpinning());\n const requestEvent = {\n type: exports.LEAVE_GROUP_REQUESTED,\n payload: {\n chatId\n }\n };\n dispatch(requestEvent);\n const result = yield service_1.default.leaveGroup(chatId);\n if (result === leaveGroup_1.LeaveGroupResult.Success) {\n dispatch({\n type: exports.LEAVE_GROUP_SUCCEEDED,\n payload: {\n chatId\n }\n });\n }\n else {\n dispatch({\n type: exports.LEAVE_GROUP_FAILED,\n payload: {\n chatId,\n result\n }\n });\n }\n dispatch(modalSpinner_1.stopSpinning());\n });\n}\nexports.default = default_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.markMessagesAsReadByClientIdRemotely = exports.markMessagesAsReadRemotely = exports.markMessagesAsReadByClientIdLocally = exports.markMessagesAsReadLocally = exports.markAllMessagesAsReadLocally = exports.MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY = exports.MARK_MESSAGES_AS_READ_REMOTELY = exports.MARK_MESSAGES_AS_READ_BY_CLIENT_ID = exports.MARK_ALL_MESSAGES_AS_READ = exports.MARK_MESSAGES_AS_READ = void 0;\nexports.MARK_MESSAGES_AS_READ = \"MARK_MESSAGES_AS_READ\";\nexports.MARK_ALL_MESSAGES_AS_READ = \"MARK_ALL_MESSAGES_AS_READ\";\nexports.MARK_MESSAGES_AS_READ_BY_CLIENT_ID = \"MARK_MESSAGES_AS_READ_BY_CLIENT_ID\";\nexports.MARK_MESSAGES_AS_READ_REMOTELY = \"MARK_MESSAGES_AS_READ_REMOTELY\";\nexports.MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY = \"MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY\";\nfunction markAllMessagesAsReadLocally(chatId) {\n return {\n type: exports.MARK_ALL_MESSAGES_AS_READ,\n payload: {\n chatId\n }\n };\n}\nexports.markAllMessagesAsReadLocally = markAllMessagesAsReadLocally;\nfunction markMessagesAsReadLocally(chatId, messageIds) {\n return {\n type: exports.MARK_MESSAGES_AS_READ,\n payload: {\n chatId,\n messageIds\n }\n };\n}\nexports.markMessagesAsReadLocally = markMessagesAsReadLocally;\nfunction markMessagesAsReadByClientIdLocally(chatId, clientMessageIds) {\n return {\n type: exports.MARK_MESSAGES_AS_READ_BY_CLIENT_ID,\n payload: {\n chatId,\n clientMessageIds\n }\n };\n}\nexports.markMessagesAsReadByClientIdLocally = markMessagesAsReadByClientIdLocally;\nfunction markMessagesAsReadRemotely(userId, messageIds) {\n return {\n type: exports.MARK_MESSAGES_AS_READ_REMOTELY,\n payload: {\n userId,\n messageIds\n }\n };\n}\nexports.markMessagesAsReadRemotely = markMessagesAsReadRemotely;\nfunction markMessagesAsReadByClientIdRemotely(userId, clientMessageIds) {\n return {\n type: exports.MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY,\n payload: {\n userId,\n clientMessageIds\n }\n };\n}\nexports.markMessagesAsReadByClientIdRemotely = markMessagesAsReadByClientIdRemotely;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MARK_MESSAGES_AS_READ_SERVER_SYNC_FAILED = exports.MARK_MESSAGES_AS_READ_SERVER_SYNC_SUCCEEDED = exports.MARK_MESSAGES_AS_READ_SERVER_SYNC_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nexports.MARK_MESSAGES_AS_READ_SERVER_SYNC_REQUESTED = \"MARK_MESSAGES_AS_READ_SERVER_SYNC_REQUESTED\";\nexports.MARK_MESSAGES_AS_READ_SERVER_SYNC_SUCCEEDED = \"MARK_MESSAGES_AS_READ_SERVER_SYNC_SUCCEEDED\";\nexports.MARK_MESSAGES_AS_READ_SERVER_SYNC_FAILED = \"MARK_MESSAGES_AS_READ_SERVER_SYNC_FAILED\";\nfunction default_1(chatId, fromId, toId) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n const request = {\n chatId,\n fromId,\n toId\n };\n const requestEvent = {\n type: exports.MARK_MESSAGES_AS_READ_SERVER_SYNC_REQUESTED,\n payload: request\n };\n dispatch(requestEvent);\n const response = yield service_1.default.markRead(chatId, fromId, toId);\n let outcomeEvent;\n if (response.kind === \"success\") {\n outcomeEvent = {\n type: exports.MARK_MESSAGES_AS_READ_SERVER_SYNC_SUCCEEDED,\n payload: {\n request: request,\n unreadMessageIds: response.result.unreadMessageIds\n }\n };\n }\n else {\n outcomeEvent = {\n type: exports.MARK_MESSAGES_AS_READ_SERVER_SYNC_FAILED,\n payload: request\n };\n }\n dispatch(outcomeEvent);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RECEIVE_P2P_MESSAGE = void 0;\nexports.RECEIVE_P2P_MESSAGE = \"RECEIVE_P2P_MESSAGE\";\nfunction default_1(chatId, message) {\n return (dispatch, getState) => {\n // If the sender is blocked then ignore this message\n const blockedUsers = getState().chatsState.blockedUsers;\n if (blockedUsers.includes(message.sender)) {\n return null;\n }\n const event = {\n type: exports.RECEIVE_P2P_MESSAGE,\n payload: {\n chatId,\n message\n }\n };\n dispatch(event);\n return event;\n };\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.REMOVE_PARTICIPANT_FAILED = exports.REMOVE_PARTICIPANT_SUCCEEDED = exports.REMOVE_PARTICIPANT_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst removeParticipant_1 = require(\"../../services/chats/removeParticipant\");\nconst Stopwatch_1 = __importDefault(require(\"../../utils/Stopwatch\"));\nexports.REMOVE_PARTICIPANT_REQUESTED = \"REMOVE_PARTICIPANT_REQUESTED\";\nexports.REMOVE_PARTICIPANT_SUCCEEDED = \"REMOVE_PARTICIPANT_SUCCEEDED\";\nexports.REMOVE_PARTICIPANT_FAILED = \"REMOVE_PARTICIPANT_FAILED\";\nfunction default_1(chatId, userId) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n const timer = Stopwatch_1.default.startNew();\n const requestEvent = {\n type: exports.REMOVE_PARTICIPANT_REQUESTED,\n payload: {\n chatId,\n userId\n }\n };\n dispatch(requestEvent);\n const response = yield service_1.default.removeParticipant(chatId, userId);\n if (response === removeParticipant_1.RemoveParticipantResponse.Success) {\n dispatch({\n type: exports.REMOVE_PARTICIPANT_SUCCEEDED,\n payload: {\n chatId,\n userId,\n durationMs: timer.getElapsedMs()\n }\n });\n }\n else {\n dispatch({\n type: exports.REMOVE_PARTICIPANT_FAILED,\n payload: {\n chatId,\n userId,\n durationMs: timer.getElapsedMs()\n }\n });\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cancelReplyToMessage = exports.selectReplyToMessage = exports.selectReplyPrivatelyToMessage = exports.REPLY_TO_MESSAGE_CANCELLED = exports.REPLY_TO_MESSAGE_SELECTED = void 0;\nconst gotoUser_1 = __importDefault(require(\"./gotoUser\"));\nexports.REPLY_TO_MESSAGE_SELECTED = \"REPLY_TO_MESSAGE_SELECTED\";\nexports.REPLY_TO_MESSAGE_CANCELLED = \"REPLY_TO_MESSAGE_CANCELLED\";\nfunction selectReplyPrivatelyToMessage(replyContext, user) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n yield dispatch(gotoUser_1.default(user));\n const event = {\n type: exports.REPLY_TO_MESSAGE_SELECTED,\n payload: { replyContext, privateChatId: user.chatId }\n };\n dispatch(event);\n return event;\n });\n}\nexports.selectReplyPrivatelyToMessage = selectReplyPrivatelyToMessage;\nfunction selectReplyToMessage(replyContext) {\n return {\n type: exports.REPLY_TO_MESSAGE_SELECTED,\n payload: { replyContext }\n };\n}\nexports.selectReplyToMessage = selectReplyToMessage;\nfunction cancelReplyToMessage(chatId) {\n return {\n type: exports.REPLY_TO_MESSAGE_CANCELLED,\n payload: { chatId }\n };\n}\nexports.cancelReplyToMessage = cancelReplyToMessage;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SEND_MESSAGE_CONTENT_UPLOAD_FAILED = exports.SEND_MESSAGE_FAILED = exports.SEND_MESSAGE_SUCCEEDED = exports.SEND_MESSAGE_REQUESTED = void 0;\nconst uuid_1 = require(\"uuid\");\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst CachingDataService_1 = __importStar(require(\"../../services/data/CachingDataService\"));\nconst constants_1 = require(\"../../constants\");\nconst Stopwatch_1 = __importDefault(require(\"../../utils/Stopwatch\"));\nconst Alert_1 = require(\"../../components/modals/Alert\");\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nexports.SEND_MESSAGE_REQUESTED = \"SEND_MESSAGE_REQUESTED\";\nexports.SEND_MESSAGE_SUCCEEDED = \"SEND_MESSAGE_SUCCEEDED\";\nexports.SEND_MESSAGE_FAILED = \"SEND_MESSAGE_FAILED\";\nexports.SEND_MESSAGE_CONTENT_UPLOAD_FAILED = \"SEND_MESSAGE_CONTENT_UPLOAD_FAILED\";\nfunction default_1(chat, sendMessageContent, repliesTo) {\n return (dispatch, getState) => __awaiter(this, void 0, void 0, function* () {\n // Don't send a direct message if you block the recipient\n if (chatFunctions.isDirectChat(chat)) {\n const blockedUsers = getState().chatsState.blockedUsers;\n if (blockedUsers.includes(chat.them)) {\n Alert_1.alertDialog({\n title: \"Message not sent\",\n text: \"You have blocked this user - you must unblock them before sending a message\"\n });\n return;\n }\n }\n const timer = Stopwatch_1.default.startNew();\n const clientMessageId = uuid_1.v1().toString();\n // If the \"send message content\" is media the message itself will contain\n // meta info about the media and the data will be uploaded separately in parallel\n const content = convertContent(sendMessageContent);\n // Start uploading the media data\n let uploadContentTask = null;\n if (\"id\" in content && \"data\" in sendMessageContent) {\n uploadContentTask = CachingDataService_1.default.putData(sendMessageContent.kind === \"media\" ? CachingDataService_1.DataSource.MediaMessage : CachingDataService_1.DataSource.FileMessage, content.id, sendMessageContent.data);\n }\n // Dispatch the message requested event - this will put the message in the chat\n const request = {\n chat,\n clientMessageId,\n content,\n repliesTo\n };\n const requestEvent = {\n type: exports.SEND_MESSAGE_REQUESTED,\n payload: request\n };\n dispatch(requestEvent);\n // We can't send messages to a new group until the group has been confirmed at which point we will receive the chatId.\n // So we only signal the 'requestEvent', the reducer will then add the message to the 'unconfirmedMessages' array for\n // the chat and those messages will be sent once the chat is confirmed.\n if (chat.kind === constants_1.UNCONFIRMED_GROUP_CHAT) {\n return;\n }\n // Wait for the media data to finish uploading\n if (uploadContentTask && !(yield uploadContentTask)) {\n dispatch({ type: exports.SEND_MESSAGE_CONTENT_UPLOAD_FAILED });\n return;\n }\n const me = getState().usersState.me;\n // Send the message to the IC\n const response = chat.kind === constants_1.UNCONFIRMED_DIRECT_CHAT || (chat.kind === constants_1.CONFIRMED_DIRECT_CHAT && sendMessageContent.kind === \"cycles\")\n ? yield service_1.default.sendDirectMessage(chat.them, me.username, clientMessageId, content, repliesTo)\n : yield service_1.default.sendMessage(chat.chatId, me.username, clientMessageId, content, repliesTo);\n if (response.kind !== \"success\") {\n // Dispatch a failed event\n dispatch({\n type: exports.SEND_MESSAGE_FAILED,\n payload: {\n chatId: chat.chatId,\n clientMessageId\n },\n httpError: response.kind === \"httpError\" ? response : undefined\n });\n if (response.kind !== \"httpError\") {\n let text;\n switch (response.kind) {\n case \"userNotFound\":\n text = \"User not found\";\n break;\n case \"recipientNotFound\":\n text = \"Recipient not found\";\n break;\n case \"chatNotFound\":\n text = \"Chat not found\";\n break;\n case \"balanceExceeded\":\n text = \"Balance exceeded\";\n break;\n case \"senderBlocked\":\n text = \"You are blocked from sending messages to this user\";\n break;\n case \"recipientBlocked\":\n text = \"You have blocked this user - you must unblock them before sending a message\";\n break;\n }\n Alert_1.alertDialog({\n title: \"Message not sent\",\n text\n });\n }\n return;\n }\n // Dispatch a succeeded event\n {\n const myUserId = me.userId;\n const message = {\n kind: \"local\",\n id: response.result.messageId,\n clientMessageId,\n date: response.result.date,\n sender: myUserId,\n content,\n repliesTo\n };\n const chat = response.result.chat;\n chat.messages.push(message);\n dispatch({\n type: exports.SEND_MESSAGE_SUCCEEDED,\n payload: {\n request,\n chat,\n durationMs: timer.getElapsedMs()\n }\n });\n }\n });\n}\nexports.default = default_1;\nfunction convertContent(sendMessageContent) {\n switch (sendMessageContent.kind) {\n case \"media\":\n return {\n kind: sendMessageContent.kind,\n caption: sendMessageContent.caption,\n mimeType: sendMessageContent.mimeType,\n width: sendMessageContent.width,\n height: sendMessageContent.height,\n id: uuid_1.v1().toString(),\n size: sendMessageContent.data.length,\n chunkSize: constants_1.CHUNK_SIZE_BYTES,\n blobUrl: sendMessageContent.blobUrl,\n thumbnailData: sendMessageContent.thumbnailData,\n blobDeleted: false\n };\n case \"file\":\n return {\n kind: sendMessageContent.kind,\n caption: sendMessageContent.caption,\n name: sendMessageContent.name,\n mimeType: sendMessageContent.mimeType,\n id: uuid_1.v1().toString(),\n size: sendMessageContent.data.length,\n chunkSize: constants_1.CHUNK_SIZE_BYTES,\n blobDeleted: false\n };\n case \"text\":\n case \"cycles\":\n return sendMessageContent;\n default:\n throw Error(\"Unrecognised content type\");\n }\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toggleNotifications = exports.NOTIFICATIONS_UNMUTED = exports.NOTIFICATIONS_MUTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nexports.NOTIFICATIONS_MUTED = \"NOTIFICATIONS_MUTED\";\nexports.NOTIFICATIONS_UNMUTED = \"NOTIFICATIONS_UNMUTED\";\nfunction toggleNotifications(chatId, mute) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n let event = {\n type: mute ? exports.NOTIFICATIONS_MUTED : exports.NOTIFICATIONS_UNMUTED,\n payload: {\n chatId\n }\n };\n dispatch(event);\n yield service_1.default.toggle_notifications(chatId, mute);\n });\n}\nexports.toggleNotifications = toggleNotifications;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.remoteUserStoppedTyping = exports.remoteUserTyping = exports.currentUserStoppedTyping = exports.currentUserTyping = exports.REMOTE_USER_STOPPED_TYPING = exports.REMOTE_USER_TYPING = exports.CURRENT_USER_STOPPED_TYPING = exports.CURRENT_USER_TYPING = void 0;\nexports.CURRENT_USER_TYPING = \"CURRENT_USER_TYPING\";\nexports.CURRENT_USER_STOPPED_TYPING = \"CURRENT_USER_STOPPED_TYPING\";\nexports.REMOTE_USER_TYPING = \"REMOTE_USER_TYPING\";\nexports.REMOTE_USER_STOPPED_TYPING = \"REMOTE_USER_STOPPED_TYPING\";\nfunction currentUserTyping(chatId) {\n return {\n type: exports.CURRENT_USER_TYPING,\n payload: chatId\n };\n}\nexports.currentUserTyping = currentUserTyping;\nfunction currentUserStoppedTyping(chatId) {\n return {\n type: exports.CURRENT_USER_STOPPED_TYPING,\n payload: chatId\n };\n}\nexports.currentUserStoppedTyping = currentUserStoppedTyping;\nfunction remoteUserTyping(chatId, userId) {\n return {\n type: exports.REMOTE_USER_TYPING,\n payload: {\n chatId,\n userId\n }\n };\n}\nexports.remoteUserTyping = remoteUserTyping;\nfunction remoteUserStoppedTyping(chatId, userId) {\n return {\n type: exports.REMOTE_USER_STOPPED_TYPING,\n payload: {\n chatId,\n userId\n }\n };\n}\nexports.remoteUserStoppedTyping = remoteUserStoppedTyping;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst authClient_1 = __importDefault(require(\"../../utils/authClient\"));\nconst getCurrentUser_1 = __importDefault(require(\"../users/getCurrentUser\"));\nconst CanisterClientFactory_1 = __importDefault(require(\"../../services/CanisterClientFactory\"));\nconst SessionExpirationHandler_1 = __importDefault(require(\"../../domain/SessionExpirationHandler\"));\nconst SESSION_TIMEOUT_NANOS = BigInt(30 * 24 * 60 * 60 * 1000 * 1000 * 1000); // 30 days\nfunction login() {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n let authClient = authClient_1.default();\n yield authClient.login({\n identityProvider: process.env.IDP_URL,\n maxTimeToLive: SESSION_TIMEOUT_NANOS,\n onSuccess: () => __awaiter(this, void 0, void 0, function* () {\n const identity = authClient.getIdentity();\n yield CanisterClientFactory_1.default.init(identity);\n dispatch(getCurrentUser_1.default());\n SessionExpirationHandler_1.default.startSession();\n })\n });\n });\n}\nexports.default = login;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.USER_LOGGED_OUT = void 0;\nconst authClient_1 = __importDefault(require(\"../../utils/authClient\"));\nconst notifications = __importStar(require(\"../../notifications\"));\nexports.USER_LOGGED_OUT = \"USER_LOGGED_OUT\";\nfunction logout() {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n yield authClient_1.default().logout();\n const userLoggedOutEvent = {\n type: exports.USER_LOGGED_OUT\n };\n dispatch(userLoggedOutEvent);\n let success = yield notifications.unregister();\n console.log(`unregister service worker: ${success}`);\n });\n}\nexports.default = logout;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sessionExpiryAcknowledged = exports.SESSION_EXPIRY_ACKNOWLEDGED = exports.SESSION_EXPIRED = void 0;\nconst authClient_1 = __importDefault(require(\"../../utils/authClient\"));\nexports.SESSION_EXPIRED = \"SESSION_EXPIRED\";\nexports.SESSION_EXPIRY_ACKNOWLEDGED = \"SESSION_EXPIRY_ACKNOWLEDGED\";\nfunction notifySessionExpired() {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n yield authClient_1.default().logout();\n const sessionExpiredEvent = {\n type: exports.SESSION_EXPIRED\n };\n dispatch(sessionExpiredEvent);\n });\n}\nexports.default = notifySessionExpired;\nfunction sessionExpiryAcknowledged() {\n return {\n type: exports.SESSION_EXPIRY_ACKNOWLEDGED\n };\n}\nexports.sessionExpiryAcknowledged = sessionExpiryAcknowledged;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GET_CURRENT_USER_FAILED = exports.GET_CURRENT_USER_SUCCEEDED = exports.GET_CURRENT_USER_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/userMgmt/service\"));\nexports.GET_CURRENT_USER_REQUESTED = \"GET_CURRENT_USER_REQUESTED\";\nexports.GET_CURRENT_USER_SUCCEEDED = \"GET_CURRENT_USER_SUCCEEDED\";\nexports.GET_CURRENT_USER_FAILED = \"GET_CURRENT_USER_FAILED\";\nfunction default_1() {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n const requestEvent = {\n type: exports.GET_CURRENT_USER_REQUESTED\n };\n dispatch(requestEvent);\n const result = yield service_1.default.getCurrentUser();\n let outcomeEvent;\n if (result.kind === \"success\") {\n outcomeEvent = {\n type: exports.GET_CURRENT_USER_SUCCEEDED,\n payload: result.myProfile\n };\n }\n else {\n outcomeEvent = {\n type: exports.GET_CURRENT_USER_FAILED,\n httpError: result.kind === \"httpError\" ? result : undefined\n };\n }\n dispatch(outcomeEvent);\n return outcomeEvent;\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GET_USERS_FAILED = exports.GET_USERS_SUCCEEDED = exports.GET_USERS_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/userMgmt/service\"));\nexports.GET_USERS_REQUESTED = \"GET_USERS_REQUESTED\";\nexports.GET_USERS_SUCCEEDED = \"GET_USERS_SUCCEEDED\";\nexports.GET_USERS_FAILED = \"GET_USERS_FAILED\";\nfunction default_1(users, updatedSince = null) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n const request = {\n users,\n updatedSince\n };\n const requestAction = {\n type: exports.GET_USERS_REQUESTED,\n payload: request\n };\n dispatch(requestAction);\n const result = yield service_1.default.getUsers(request);\n let outcomeEvent;\n if (result.kind === \"success\") {\n outcomeEvent = {\n type: exports.GET_USERS_SUCCEEDED,\n payload: {\n request,\n result: {\n users: result.users,\n timestamp: result.timestamp\n }\n }\n };\n }\n else {\n outcomeEvent = {\n type: exports.GET_USERS_FAILED,\n payload: request,\n httpError: result.kind === \"httpError\" ? result : undefined\n };\n }\n dispatch(outcomeEvent);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MARK_REMOTE_USER_ONLINE = void 0;\nexports.MARK_REMOTE_USER_ONLINE = \"MARK_REMOTE_USER_ONLINE\";\nfunction default_1(userId) {\n return {\n type: exports.MARK_REMOTE_USER_ONLINE,\n payload: userId\n };\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.REGISTER_USER_LIMIT_REACHED = exports.REGISTER_USER_FAILED = exports.REGISTER_USER_FAILED_USERNAME_EXISTS = exports.REGISTER_USER_FAILED_USER_EXISTS = exports.REGISTER_USER_SUCCEEDED = exports.REGISTER_USER_REQUESTED = void 0;\nconst service_1 = __importDefault(require(\"../../services/userMgmt/service\"));\nconst modalSpinner_1 = require(\"../app/modalSpinner\");\nexports.REGISTER_USER_REQUESTED = \"REGISTER_USER_REQUESTED\";\nexports.REGISTER_USER_SUCCEEDED = \"REGISTER_USER_SUCCEEDED\";\nexports.REGISTER_USER_FAILED_USER_EXISTS = \"REGISTER_USER_FAILED_USER_EXISTS\";\nexports.REGISTER_USER_FAILED_USERNAME_EXISTS = \"REGISTER_USER_FAILED_USERNAME_EXISTS\";\nexports.REGISTER_USER_FAILED = \"REGISTER_USER_FAILED\";\nexports.REGISTER_USER_LIMIT_REACHED = \"REGISTER_USER_LIMIT_REACHED\";\nfunction default_1(username) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n dispatch(modalSpinner_1.startSpinning());\n const requestEvent = {\n type: exports.REGISTER_USER_REQUESTED,\n payload: username\n };\n dispatch(requestEvent);\n const result = yield service_1.default.registerUser(username);\n let outcomeEvent;\n switch (result.kind) {\n case \"success\":\n outcomeEvent = {\n type: exports.REGISTER_USER_SUCCEEDED,\n payload: result.myProfile\n };\n break;\n case \"userExists\":\n outcomeEvent = {\n type: exports.REGISTER_USER_FAILED_USER_EXISTS\n };\n break;\n case \"usernameTaken\":\n outcomeEvent = {\n type: exports.REGISTER_USER_FAILED_USERNAME_EXISTS,\n payload: username\n };\n break;\n case \"userLimitReached\":\n outcomeEvent = {\n type: exports.REGISTER_USER_LIMIT_REACHED,\n payload: result.userLimit\n };\n break;\n case \"httpError\":\n outcomeEvent = {\n type: exports.REGISTER_USER_FAILED,\n httpError: result\n };\n break;\n }\n dispatch(outcomeEvent);\n dispatch(modalSpinner_1.stopSpinning());\n return outcomeEvent;\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SET_PROFILE_IMAGE_DATA_UPLOAD_FAILED = exports.SET_PROFILE_IMAGE_FAILED = exports.SET_PROFILE_IMAGE_SUCCEEDED = exports.SET_PROFILE_IMAGE_REQUESTED = void 0;\nconst uuid_1 = require(\"uuid\");\nconst CachingDataService_1 = __importStar(require(\"../../services/data/CachingDataService\"));\nconst service_1 = __importDefault(require(\"../../services/userMgmt/service\"));\nconst setProfileImage_1 = require(\"../../services/userMgmt/setProfileImage\");\nconst blobFunctions_1 = require(\"../../utils/blobFunctions\");\nexports.SET_PROFILE_IMAGE_REQUESTED = \"SET_PROFILE_IMAGE_REQUESTED\";\nexports.SET_PROFILE_IMAGE_SUCCEEDED = \"SET_PROFILE_IMAGE_SUCCEEDED\";\nexports.SET_PROFILE_IMAGE_FAILED = \"SET_PROFILE_IMAGE_FAILED\";\nexports.SET_PROFILE_IMAGE_DATA_UPLOAD_FAILED = \"SET_PROFILE_IMAGE_DATA_UPLOAD_FAILED\";\nfunction default_1(userId, data) {\n return (dispatch) => __awaiter(this, void 0, void 0, function* () {\n const imageId = uuid_1.v1().toString();\n // Start uploading the image data\n let putDataTask = CachingDataService_1.default.putData(CachingDataService_1.DataSource.Avatar, imageId, data, true);\n const blobUrl = blobFunctions_1.dataToBlobUrl(data, null);\n // Dispatch the set profile image requested event - this will set the imageBlobUrl on \"my profile\" which will render the avatar image\n const requestEvent = {\n type: exports.SET_PROFILE_IMAGE_REQUESTED,\n payload: {\n userId,\n imageId,\n blobUrl\n }\n };\n dispatch(requestEvent);\n // Wait for the media data to finish uploading\n const succeeded = yield putDataTask;\n if (!succeeded) {\n const outcomeEvent = {\n type: exports.SET_PROFILE_IMAGE_DATA_UPLOAD_FAILED,\n payload: {\n userId,\n imageId,\n }\n };\n dispatch(outcomeEvent);\n return;\n }\n // Set the imageId against the user profile on the IC\n const response = yield service_1.default.setProfileImage(imageId);\n let outcomeEvent;\n if (response === setProfileImage_1.SetProfileImageResponse.Success) {\n outcomeEvent = {\n type: exports.SET_PROFILE_IMAGE_SUCCEEDED,\n payload: {\n userId,\n imageId,\n blobUrl\n }\n };\n }\n else {\n outcomeEvent = {\n type: exports.SET_PROFILE_IMAGE_FAILED,\n payload: {\n userId,\n imageId,\n }\n };\n }\n dispatch(outcomeEvent);\n return outcomeEvent;\n });\n}\nexports.default = default_1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UPDATE_MINUTES_SINCE_LAST_ONLINE = void 0;\nexports.UPDATE_MINUTES_SINCE_LAST_ONLINE = \"UPDATE_MINUTES_SINCE_LAST_ONLINE\";\nfunction default_1() {\n return {\n type: exports.UPDATE_MINUTES_SINCE_LAST_ONLINE\n };\n}\nexports.default = default_1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst eventTracker_1 = __importDefault(require(\"./eventTracker\"));\nconst analyticsMiddleware = _store => next => event => {\n eventTracker_1.default(event.type, event.payload);\n return next(event);\n};\nexports.default = analyticsMiddleware;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction trackEvent(name, parameters) {\n const dataLayer = window.dataLayer;\n if (dataLayer) {\n const event = Object.assign(Object.assign({}, parameters), { event: name });\n dataLayer.push(event);\n }\n}\nexports.default = trackEvent;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setupBackgroundTasks = void 0;\nconst react_1 = require(\"react\");\nconst react_redux_1 = require(\"react-redux\");\nconst service_1 = __importDefault(require(\"./services/userMgmt/service\"));\nconst chatFunctions = __importStar(require(\"./domain/model/chats\"));\nconst setFunctions = __importStar(require(\"./utils/setFunctions\"));\nconst stateFunctions = __importStar(require(\"./domain/stateFunctions\"));\nconst RecurringTaskRunner_1 = __importDefault(require(\"./domain/RecurringTaskRunner\"));\nconst RtcConnectionsHandler_1 = __importDefault(require(\"./domain/webRtc/RtcConnectionsHandler\"));\nconst ExponentialBackoffRecurringTaskRunner_1 = __importStar(require(\"./domain/ExponentialBackoffRecurringTaskRunner\"));\nconst ChatsUpdater_1 = __importDefault(require(\"./domain/ChatsUpdater\"));\nconst getAllChats_1 = __importDefault(require(\"./actions/chats/getAllChats\"));\nconst getMessagesById_1 = __importDefault(require(\"./actions/chats/getMessagesById\"));\nconst getUsers_1 = __importDefault(require(\"./actions/users/getUsers\"));\nconst updateMinutesSinceLastOnline_1 = __importDefault(require(\"./actions/users/updateMinutesSinceLastOnline\"));\nconst CachingDataService_1 = __importDefault(require(\"./services/data/CachingDataService\"));\nconst constants_1 = require(\"./constants\");\nfunction setupBackgroundTasks() {\n var _a, _b, _c;\n const dispatch = react_redux_1.useDispatch();\n const chatsState = react_redux_1.useSelector((state) => state.chatsState);\n const usersState = react_redux_1.useSelector((state) => state.usersState);\n const sessionExpired = react_redux_1.useSelector((state) => state.appState.sessionExpired);\n const selectedChat = stateFunctions.getSelectedChat(chatsState);\n const selectedChatUsers = selectedChat ? chatFunctions.getUsers(selectedChat) : [];\n const usersOnline = Object.values(usersState.userDictionary)\n .filter(u => u.minutesSinceLastOnline < 2)\n .map(u => u.userId);\n const selectedChatUsersOnline = setFunctions.intersect(selectedChatUsers, usersOnline);\n react_1.useEffect(() => {\n const count = sessionExpired ? 0 : chatFunctions.getUnreadChatCount(chatsState.chats);\n document.title = (count > 0 ? `(${count}) ` : \"\") + constants_1.APP_TITLE;\n }, [chatsState.chats, sessionExpired]);\n // Each time 'usersState.me' changes and is not null, get the full list of chats\n react_1.useEffect(() => {\n var _a;\n if (((_a = usersState.me) === null || _a === void 0 ? void 0 : _a.userId) && !sessionExpired) {\n dispatch(getAllChats_1.default());\n }\n }, [(_a = usersState.me) === null || _a === void 0 ? void 0 : _a.userId, sessionExpired]);\n // As new userIds are seen, fetch their usernames\n react_1.useEffect(() => {\n if (usersState.unknownUserIds.length && !sessionExpired) {\n dispatch(getUsers_1.default(usersState.unknownUserIds));\n }\n }, [usersState.unknownUserIds, sessionExpired]);\n // Whenever a chat has messages to download, call off to get those messages\n react_1.useEffect(() => {\n if (!sessionExpired) {\n chatsState.chats.forEach(c => {\n if (chatFunctions.isConfirmedChat(c) && c.messagesToDownload.length && !c.messagesDownloading.length) {\n dispatch(getMessagesById_1.default(c.chatId, c.messagesToDownload.slice(0, constants_1.PAGE_SIZE)));\n }\n });\n }\n }, [chatsState.chats, sessionExpired]);\n // Check for new messages at regular intervals\n react_1.useEffect(() => {\n if (chatsState.runUpdateChatsTask && !sessionExpired) {\n ChatsUpdater_1.default.startNew(chatsState.chatsSyncedUpTo);\n return () => ChatsUpdater_1.default.stop();\n }\n }, [chatsState.runUpdateChatsTask, chatsState.chatsSyncedUpTo, sessionExpired]);\n // Mark current user as online at regular intervals\n react_1.useEffect(() => {\n var _a;\n if (((_a = usersState.me) === null || _a === void 0 ? void 0 : _a.userId) && !sessionExpired) {\n const markAsOnline = () => service_1.default.markAsOnline();\n const taskRunner = RecurringTaskRunner_1.default.startNew(markAsOnline, constants_1.MARK_CURRENT_USER_AS_ONLINE_INTERVAL_MS, false);\n return () => taskRunner.stop();\n }\n }, [(_b = usersState.me) === null || _b === void 0 ? void 0 : _b.userId, sessionExpired]);\n // Update user details at regular intervals\n const userIdsCount = usersState.userDictionary ? Object.keys(usersState.userDictionary).length : 0;\n react_1.useEffect(() => {\n if (usersState.userDictionary && !sessionExpired) {\n const updateUsers = () => {\n const updateUsersTask = dispatch(getUsers_1.default(Object.keys(usersState.userDictionary), usersState.usersSyncedUpTo));\n return updateUsersTask.finally(() => dispatch(updateMinutesSinceLastOnline_1.default()));\n };\n const taskRunner = RecurringTaskRunner_1.default.startNew(updateUsers, constants_1.UPDATE_USERS_INTERVAL_MS, true);\n return () => taskRunner.stop();\n }\n }, [userIdsCount, usersState.usersSyncedUpTo, sessionExpired]);\n // Each time the users in the selected chat change, attempt to make p2p connections to each user\n react_1.useEffect(() => {\n if (selectedChat && selectedChatUsersOnline.length && !sessionExpired) {\n RtcConnectionsHandler_1.default.setupMissingConnections(selectedChatUsersOnline);\n }\n }, [selectedChatUsersOnline.join(), sessionExpired]);\n // Poll for new p2p connection details at regular intervals, this could be responses to our connection offers or new\n // offers from other users trying to establish a p2p connection with us\n react_1.useEffect(() => {\n var _a;\n if (((_a = usersState.me) === null || _a === void 0 ? void 0 : _a.userId) && !sessionExpired) {\n const taskRunner = ExponentialBackoffRecurringTaskRunner_1.default.startNew(() => __awaiter(this, void 0, void 0, function* () {\n const newConnectionCount = yield RtcConnectionsHandler_1.default.getConnections();\n return newConnectionCount > 0;\n }), constants_1.REFRESH_P2P_CONNECTIONS_MIN_INTERVAL_MS, constants_1.REFRESH_P2P_CONNECTIONS_MAX_INTERVAL_MS, 1.2, ExponentialBackoffRecurringTaskRunner_1.StartOptions.TriggerTaskAndReturn);\n return () => taskRunner.stop();\n }\n }, [(_c = usersState.me) === null || _c === void 0 ? void 0 : _c.userId, sessionExpired]);\n react_1.useEffect(() => {\n const scavengeCache = () => __awaiter(this, void 0, void 0, function* () {\n yield CachingDataService_1.default.scavengeCache();\n //console.log(await navigator.storage.estimate());\n });\n const taskRunner = RecurringTaskRunner_1.default.startNew(scavengeCache, constants_1.SCAVENGE_CACHE_INTERVAL_MS, true);\n return () => taskRunner.stop();\n }, []);\n}\nexports.setupBackgroundTasks = setupBackgroundTasks;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Divider_1 = __importDefault(require(\"@material-ui/core/Divider\"));\nconst Grid_1 = __importDefault(require(\"@material-ui/core/Grid\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst LeftPanel_1 = __importDefault(require(\"./leftPanel/LeftPanel\"));\nconst MainPanel_1 = __importDefault(require(\"./mainPanel/MainPanel\"));\nconst RightPanel_1 = __importDefault(require(\"./rightPanel/RightPanel\"));\nconst backgroundTasks_1 = require(\"../backgroundTasks\");\nconst panels_1 = require(\"../domain/model/panels\");\nconst viewMode_1 = require(\"../domain/model/viewMode\");\nconst NotificationBar_1 = __importDefault(require(\"./NotificationBar\"));\nexports.default = App;\nconst useStyles = makeStyles_1.default((theme) => ({\n grid: {\n overflow: \"hidden\",\n backgroundColor: theme.colors.sidePanel.backgroundColor,\n flex: \"1 0 auto\",\n },\n left: {\n height: \"100%\",\n width: \"40%\",\n \"&.rightPanelActive\": {\n width: \"30%\"\n },\n \"&.mobile\": {\n width: \"100%\"\n }\n },\n main: {\n height: \"100%\",\n backgroundColor: theme.colors.mainPanel.backgroundColor,\n width: \"60%\",\n \"&.rightPanelActive\": {\n width: \"40%\"\n },\n \"&.mobile\": {\n width: \"100%\"\n }\n },\n right: {\n height: \"100%\",\n width: \"30%\",\n \"&.mobile\": {\n width: \"100%\"\n }\n },\n container: {\n height: \"100%\",\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n}));\nfunction App() {\n const classes = useStyles();\n const panel = react_redux_1.useSelector((state) => state.appState.panelState);\n const viewMode = react_redux_1.useSelector((state) => state.appState.viewMode);\n const [gridHeight, setGridHeight] = react_1.useState(\"100%\");\n backgroundTasks_1.setupBackgroundTasks();\n function buildLeftPanel() {\n if (panel.leftPanel === panels_1.LeftPanelType.None) {\n return null;\n }\n let className = classes.left;\n if (viewMode === viewMode_1.ViewMode.Mobile) {\n className += \" mobile\";\n }\n else if (panel.rightPanel !== panels_1.RightPanelType.None) {\n className += \" rightPanelActive\";\n }\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Grid_1.default, { item: true, container: true, direction: \"column\", wrap: \"nowrap\", className: className },\n react_1.default.createElement(LeftPanel_1.default, { type: panel.leftPanel })),\n react_1.default.createElement(Divider_1.default, { orientation: \"vertical\", flexItem: true })));\n }\n function buildMainPanel() {\n if (panel.middlePanel === panels_1.MiddlePanelType.None) {\n return null;\n }\n let className = \"main-panel \" + classes.main;\n if (viewMode === viewMode_1.ViewMode.Mobile) {\n className += \" mobile\";\n }\n else if (panel.rightPanel !== panels_1.RightPanelType.None) {\n className += \" rightPanelActive\";\n }\n return (react_1.default.createElement(Grid_1.default, { item: true, container: true, direction: \"column\", className: className },\n react_1.default.createElement(MainPanel_1.default, null)));\n }\n function buildRightPanel() {\n if (panel.rightPanel === panels_1.RightPanelType.None) {\n return null;\n }\n let className = classes.right;\n if (viewMode === viewMode_1.ViewMode.Mobile) {\n className += \" mobile\";\n }\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Divider_1.default, { orientation: \"vertical\", flexItem: true }),\n react_1.default.createElement(Grid_1.default, { item: true, container: true, direction: \"column\", wrap: \"nowrap\", className: className },\n react_1.default.createElement(RightPanel_1.default, { type: panel.rightPanel }))));\n }\n function onNotificationBarRender(render) {\n return render\n ? setGridHeight(\"calc(100% - 32px)\")\n : setGridHeight(\"100%\");\n }\n return (react_1.default.createElement(\"div\", { className: classes.container },\n react_1.default.createElement(NotificationBar_1.default, { onRender: onNotificationBarRender }),\n react_1.default.createElement(Grid_1.default, { container: true, wrap: \"nowrap\", className: classes.grid, height: gridHeight },\n buildLeftPanel(),\n buildMainPanel(),\n buildRightPanel())));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst useTheme_1 = __importDefault(require(\"@material-ui/core/styles/useTheme\"));\nconst useMediaQuery_1 = __importDefault(require(\"@material-ui/core/useMediaQuery\"));\nconst StyledEngineProvider_1 = __importDefault(require(\"@material-ui/styled-engine/StyledEngineProvider\"));\nconst Container_1 = __importDefault(require(\"@material-ui/core/Container\"));\nconst Backdrop_1 = __importDefault(require(\"@material-ui/core/Backdrop\"));\nconst CircularProgress_1 = __importDefault(require(\"@material-ui/core/CircularProgress\"));\nconst react_modal_promise_1 = __importDefault(require(\"react-modal-promise\"));\nconst identity_1 = require(\"@dfinity/identity\");\nconst App_1 = __importDefault(require(\"./App\"));\nconst store_1 = __importDefault(require(\"../store\"));\nconst CanisterClientFactory_1 = __importDefault(require(\"../services/CanisterClientFactory\"));\nconst Login_1 = __importDefault(require(\"./Login\"));\nconst ThemeProvider_1 = __importDefault(require(\"./ThemeProvider\"));\nconst usersReducer_1 = require(\"../reducers/usersReducer\");\nconst RegisterUser_1 = __importDefault(require(\"./RegisterUser\"));\nconst getCurrentUser_1 = __importDefault(require(\"../actions/users/getCurrentUser\"));\nconst authClient_1 = __importDefault(require(\"../utils/authClient\"));\nconst notifySessionExpired_1 = require(\"../actions/signin/notifySessionExpired\");\nconst SessionExpirationHandler_1 = __importDefault(require(\"../domain/SessionExpirationHandler\"));\nconst switchViewMode_1 = __importDefault(require(\"../actions/app/switchViewMode\"));\nconst viewMode_1 = require(\"../domain/model/viewMode\");\nconst gotoChat_1 = require(\"../actions/chats/gotoChat\");\nconst gotoHome_1 = __importDefault(require(\"../actions/app/gotoHome\"));\nconst Alert_1 = require(\"./modals/Alert\");\nexports.default = AppRoot;\nconst useStyles = makeStyles_1.default((theme) => ({\n \"@global\": {\n body: {\n backgroundColor: theme.colors.outerBackgroundColor,\n lineHeight: 1.5\n },\n header: {\n backgroundColor: theme.colors.header.backgroundColor,\n height: 52,\n flexShrink: 0,\n padding: \"0 15px\"\n },\n input: {\n backgroundColor: \"transparent\"\n },\n a: {\n color: theme.colors.linkColor\n },\n \"body, input\": {\n color: theme.colors.textColor\n },\n \"h1\": {\n fontSize: \"6rem\",\n fontWeight: 300,\n margin: 0,\n [theme.breakpoints.down('sm')]: {\n fontSize: \"3rem\"\n }\n }\n },\n backdrop: {\n zIndex: theme.zIndex.drawer + 1,\n color: '#fff',\n },\n container: {\n padding: 24,\n height: \"100%\",\n \"&.no-padding\": {\n padding: 0\n },\n [theme.breakpoints.down('sm')]: {\n position: \"fixed\",\n top: 0\n }\n }\n}));\nfunction AppRoot() {\n return (react_1.default.createElement(react_redux_1.Provider, { store: store_1.default },\n react_1.default.createElement(StyledEngineProvider_1.default, { injectFirst: true },\n react_1.default.createElement(ThemeProvider_1.default, null,\n react_1.default.createElement(AppContainer, null)))));\n}\nfunction AppContainer() {\n const dispatch = react_redux_1.useDispatch();\n const identity = authClient_1.default().getIdentity();\n const isAnonymous = identity.getPrincipal().isAnonymous();\n const [canisterClientFactoryRequiresInit, setCanisterClientFactoryRequiresInit] = react_1.useState(!isAnonymous && CanisterClientFactory_1.default.current == null);\n const sessionExpired = react_redux_1.useSelector((state) => state.appState.sessionExpired);\n const currentUser = react_redux_1.useSelector((state) => state.usersState.me);\n const userRegistrationStatus = react_redux_1.useSelector((state) => state.usersState.userRegistrationStatus);\n const currentViewMode = react_redux_1.useSelector((state) => state.appState.viewMode);\n const modalSpinner = react_redux_1.useSelector((state) => state.appState.modalSpinner);\n const classes = useStyles();\n const theme = useTheme_1.default();\n const targetViewMode = useMediaQuery_1.default(theme.breakpoints.down(\"sm\")) ? viewMode_1.ViewMode.Mobile : viewMode_1.ViewMode.Desktop;\n const removePadding = useMediaQuery_1.default(theme.breakpoints.down(\"lg\"));\n let containerClass = classes.container;\n let component;\n let large = false;\n if (canisterClientFactoryRequiresInit) {\n component = react_1.default.createElement(\"div\", null);\n }\n else if (isAnonymous || (sessionExpired && userRegistrationStatus !== usersReducer_1.UserRegistrationStatus.Registered)) {\n component = react_1.default.createElement(Login_1.default, null);\n }\n else {\n switch (userRegistrationStatus) {\n case usersReducer_1.UserRegistrationStatus.Unknown:\n dispatch(getCurrentUser_1.default());\n component = null;\n break;\n case usersReducer_1.UserRegistrationStatus.NotRegistered:\n component = react_1.default.createElement(RegisterUser_1.default, null);\n break;\n case usersReducer_1.UserRegistrationStatus.Registered:\n large = true;\n component = react_1.default.createElement(App_1.default, null);\n break;\n }\n }\n if (removePadding && large) {\n containerClass += \" no-padding\";\n }\n react_1.useEffect(() => {\n if (sessionExpired) {\n (() => __awaiter(this, void 0, void 0, function* () {\n yield Alert_1.alertDialog({\n title: \"Session Expired\",\n text: \"Your session has expired - please login again\",\n });\n dispatch(notifySessionExpired_1.sessionExpiryAcknowledged());\n }))();\n }\n }, [sessionExpired]);\n react_1.useEffect(() => {\n if (currentViewMode !== targetViewMode) {\n dispatch(switchViewMode_1.default(targetViewMode));\n }\n }, [targetViewMode, currentViewMode]);\n react_1.useEffect(() => {\n if (canisterClientFactoryRequiresInit) {\n CanisterClientFactory_1.default.init(identity).then(_ => setCanisterClientFactoryRequiresInit(false));\n }\n }, []);\n react_1.useEffect(() => {\n window.onpopstate = function (event) {\n var _a;\n if ((_a = event.state) === null || _a === void 0 ? void 0 : _a.chatId) {\n dispatch(gotoChat_1.gotoChatById(event.state.chatId, undefined, true));\n }\n else {\n dispatch(gotoHome_1.default());\n }\n };\n return () => {\n window.onpopstate = () => null;\n };\n }, []);\n react_1.useEffect(() => {\n // https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n function setDocVh() {\n // First we get the viewport height and we multiple it by 1% to get a value for a vh unit\n let vh = window.innerHeight * 0.01;\n // Then we set the value in the --vh custom property to the root of the document\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n }\n window.onresize = () => setDocVh();\n setDocVh();\n }, []);\n react_1.useEffect(() => {\n if (currentUser && !isAnonymous && identity instanceof identity_1.DelegationIdentity) {\n SessionExpirationHandler_1.default.startSession();\n }\n }, [currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId]);\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Container_1.default, { maxWidth: large ? \"lg\" : \"md\", className: containerClass },\n component,\n react_1.default.createElement(react_modal_promise_1.default, null)),\n react_1.default.createElement(Backdrop_1.default, { className: classes.backdrop, open: modalSpinner },\n react_1.default.createElement(CircularProgress_1.default, { color: \"inherit\" }))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst Button_1 = __importDefault(require(\"@material-ui/core/Button\"));\nconst Paper_1 = __importDefault(require(\"@material-ui/core/Paper\"));\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst login_1 = __importDefault(require(\"../actions/signin/login\"));\nconst useStyles = makeStyles_1.default((theme) => ({\n paper: {\n color: theme.colors.loginRegister.textColor,\n backgroundColor: theme.colors.loginRegister.backgroundColor,\n textAlign: \"center\",\n padding: 20\n },\n icon: {\n width: 80,\n height: 80\n },\n button: {\n color: theme.colors.loginRegister.buttonTextColor,\n backgroundColor: theme.colors.loginRegister.buttonBackgroundColor,\n \"&:hover\": {\n backgroundColor: theme.colors.loginRegister.buttonBackgroundColor,\n }\n }\n}));\nfunction Login() {\n const classes = useStyles();\n const dispatch = react_redux_1.useDispatch();\n return (react_1.default.createElement(Paper_1.default, { className: classes.paper },\n react_1.default.createElement(\"img\", { src: \"oc-logo2.svg\", className: classes.icon }),\n react_1.default.createElement(\"h1\", null, \"OpenChat\"),\n react_1.default.createElement(\"p\", null, \"Welcome to OpenChat!\"),\n react_1.default.createElement(\"p\", null, \"Before continuing you must sign-in to the Internet Computer.\"),\n react_1.default.createElement(Button_1.default, { size: \"large\", variant: \"contained\", className: classes.button, onClick: _ => dispatch(login_1.default()) }, \"Sign-in\")));\n}\nexports.default = Login;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst CloseButton_1 = __importDefault(require(\"./shared/CloseButton\"));\nconst notifications = __importStar(require(\"../notifications\"));\nconst Backdrop_1 = __importDefault(require(\"@material-ui/core/Backdrop\"));\nconst viewMode_1 = require(\"../domain/model/viewMode\");\nexports.default = react_1.default.memo(NotificationBar);\nconst useStyles = makeStyles_1.default((theme) => ({\n topBar: {\n display: \"flex\",\n height: 32,\n padding: 4,\n textAlign: \"center\",\n alignItems: \"center\",\n backgroundColor: \"#dea941\",\n color: \"white\",\n \"& button\": {\n background: \"none!important\",\n textDecoration: \"underline\",\n backgroundColor: \"inherit\",\n color: \"inherit\",\n }\n },\n message: {\n flex: \"1 0 auto\",\n [theme.breakpoints.down('sm')]: {\n fontSize: \"14px\"\n },\n },\n cancelButton: {\n width: 0,\n height: 0,\n },\n}));\nfunction NotificationBar(props) {\n const classes = useStyles();\n const myUserId = react_redux_1.useSelector((state) => { var _a; return (_a = state.usersState.me) === null || _a === void 0 ? void 0 : _a.userId; });\n const [showBar, setShowBar] = react_1.useState(false);\n const [showBackdrop, setShowBackdrop] = react_1.useState(false);\n const viewMode = react_redux_1.useSelector((state) => state.appState.viewMode);\n react_1.useEffect(() => {\n (() => __awaiter(this, void 0, void 0, function* () {\n let status = yield notifications.status();\n if (status === notifications.Status.Prompt) {\n renderBar(true);\n }\n else if (status === notifications.Status.Granted) {\n notifications.trySubscribe(myUserId);\n }\n }))();\n }, []);\n function renderBar(render) {\n setShowBar(render);\n props.onRender(render);\n }\n function onEnable() {\n return __awaiter(this, void 0, void 0, function* () {\n setShowBackdrop(true);\n try {\n let permission = yield notifications.askForPermission();\n renderBar(false);\n if (permission === \"granted\") {\n notifications.trySubscribe(myUserId);\n }\n }\n finally {\n setShowBackdrop(false);\n }\n });\n }\n const message = viewMode === viewMode_1.ViewMode.Mobile ? \"Give permission to \" : \"OpenChat needs your permission to \";\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Backdrop_1.default, { open: showBackdrop, sx: { color: '#fff', zIndex: (theme) => theme.zIndex.drawer + 1 } }),\n showBar ?\n react_1.default.createElement(\"div\", { className: classes.topBar },\n react_1.default.createElement(\"div\", { className: classes.message },\n message,\n react_1.default.createElement(\"button\", { onClick: onEnable }, \"enable notifications\")),\n react_1.default.createElement(CloseButton_1.default, { onClick: () => setShowBar(false), className: classes.cancelButton })) : null));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_redux_1 = require(\"react-redux\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst Paper_1 = __importDefault(require(\"@material-ui/core/Paper\"));\nconst react_1 = __importDefault(require(\"react\"));\nconst Person_1 = __importDefault(require(\"@material-ui/icons/Person\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst registerUser_1 = __importStar(require(\"../actions/users/registerUser\"));\nconst NameInput_1 = __importDefault(require(\"./shared/NameInput\"));\nconst useStyles = makeStyles_1.default((theme) => ({\n paper: {\n color: theme.colors.loginRegister.textColor,\n backgroundColor: theme.colors.loginRegister.backgroundColor,\n textAlign: \"center\",\n padding: 20\n },\n icon: {\n width: 80,\n height: 80,\n alignSelf: \"center\"\n },\n button: {\n color: theme.colors.loginRegister.buttonTextColor,\n backgroundColor: theme.colors.loginRegister.buttonBackgroundColor,\n \"&:hover\": {\n backgroundColor: theme.colors.loginRegister.buttonBackgroundColor\n }\n },\n nameInput: {\n margin: \"auto\",\n maxWidth: 400,\n marginTop: 30\n },\n errorText: {\n minHeight: 20,\n maxWidth: 400,\n marginTop: 20,\n color: \"red\",\n alignSelf: \"center\"\n },\n errorContainer: {\n display: \"flex\",\n justifyContent: \"center\"\n }\n}));\nfunction RegisterUser() {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n const [errorText, setErrorText] = react_1.default.useState(\"\");\n function handleSubmit(text) {\n if (text && text.length > 2) {\n setErrorText(\"\");\n const registerUserAsync = () => dispatch(registerUser_1.default(text));\n registerUserAsync().then((outcome) => {\n switch (outcome.type) {\n case registerUser_1.REGISTER_USER_SUCCEEDED:\n setErrorText(\"\");\n break;\n case registerUser_1.REGISTER_USER_FAILED_USER_EXISTS:\n setErrorText(\"You already have a name\");\n break;\n case registerUser_1.REGISTER_USER_FAILED_USERNAME_EXISTS:\n setErrorText(\"A user already exists with this username - please try another username\");\n break;\n case registerUser_1.REGISTER_USER_LIMIT_REACHED:\n setErrorText(`The number of users of this demo version of OpenChat has been limited to ${outcome.payload} and this limit has been reached. Check back soon for the full release!`);\n break;\n }\n });\n }\n }\n return (react_1.default.createElement(Paper_1.default, { className: classes.paper },\n react_1.default.createElement(Person_1.default, { className: classes.icon }),\n react_1.default.createElement(\"h1\", null, \"Register user\"),\n react_1.default.createElement(NameInput_1.default, { onSubmit: handleSubmit, placeholderText: \"Enter username\", minLength: 3, maxLength: 25, className: classes.nameInput }),\n react_1.default.createElement(\"div\", { className: classes.errorContainer },\n react_1.default.createElement(Typography_1.default, { component: \"div\", variant: \"body1\", className: classes.errorText }, errorText))));\n}\nexports.default = RegisterUser;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst ThemeProvider_1 = __importDefault(require(\"@material-ui/core/styles/ThemeProvider\"));\nconst theme_1 = require(\"../theme\");\nconst theme_2 = require(\"../domain/model/theme\");\nfunction ThemeProvider(props) {\n const selectedTheme = react_redux_1.useSelector((state) => state.appState.selectedTheme);\n const useSystemTheme = selectedTheme === theme_2.SelectedTheme.SystemDefault;\n const isSystemDarkModeQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const shouldDarkModeBeActive = isDarkModeSelected();\n const [darkMode, setDarkMode] = react_1.useState(shouldDarkModeBeActive);\n if (darkMode !== shouldDarkModeBeActive) {\n setDarkMode(shouldDarkModeBeActive);\n }\n function isDarkModeSelected() {\n return selectedTheme === theme_2.SelectedTheme.Dark ||\n (selectedTheme === theme_2.SelectedTheme.SystemDefault && isSystemDarkModeQuery.matches);\n }\n function setDarkModeBasedOnSystemTheme() {\n const isSystemDarkMode = isSystemDarkModeQuery.matches;\n setDarkMode(isSystemDarkMode);\n }\n react_1.useEffect(() => {\n if (useSystemTheme) {\n isSystemDarkModeQuery.addEventListener(\"change\", setDarkModeBasedOnSystemTheme);\n return () => isSystemDarkModeQuery.removeEventListener(\"change\", setDarkModeBasedOnSystemTheme);\n }\n }, [useSystemTheme]);\n return (react_1.default.createElement(ThemeProvider_1.default, { theme: darkMode ? theme_1.darkTheme : theme_1.lightTheme }, props.children));\n}\nexports.default = ThemeProvider;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst List_1 = __importDefault(require(\"@material-ui/core/List\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst chatListItemBuilder = __importStar(require(\"./ChatListItemBuilder\"));\nexports.default = react_1.default.memo(ChatList);\nconst useStyles = makeStyles_1.default((_theme) => ({\n list: {\n overflowX: \"hidden\",\n overflowY: \"auto\"\n }\n}));\nfunction ChatList() {\n var _a;\n const chatsState = react_redux_1.useSelector((state) => state.chatsState);\n const userDictionary = react_redux_1.useSelector((state) => state.usersState.userDictionary);\n const me = (_a = react_redux_1.useSelector((state) => { var _a; return (_a = state.usersState.me) === null || _a === void 0 ? void 0 : _a.userId; })) !== null && _a !== void 0 ? _a : \"\";\n const classes = useStyles();\n const selectedChatIndex = chatsState.selectedChatIndex;\n const chats = chatsState.chats.map((c, index) => {\n return chatListItemBuilder.build(c, userDictionary, index, selectedChatIndex, me);\n });\n return (react_1.default.createElement(List_1.default, { disablePadding: true, className: classes.list }, chats));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst ListItem_1 = __importDefault(require(\"@material-ui/core/ListItem\"));\nconst ListItemIcon_1 = __importDefault(require(\"@material-ui/core/ListItemIcon\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst gotoChat_1 = require(\"../../actions/chats/gotoChat\");\nconst date_1 = require(\"../../formatters/date\");\nconst ParticipantsTyping_1 = __importDefault(require(\"../shared/ParticipantsTyping\"));\nconst TextContent_1 = __importDefault(require(\"../shared/TextContent\"));\nconst ThemTyping_1 = __importDefault(require(\"../shared/ThemTyping\"));\nconst DefaultGroupChatIcon_1 = __importDefault(require(\"../shared/DefaultGroupChatIcon\"));\nconst UserAvatar_1 = __importDefault(require(\"../shared/UserAvatar\"));\nconst useStyles = makeStyles_1.default((theme) => ({\n listItem: {\n backgroundColor: theme.colors.sidePanel.backgroundColor,\n \"&:hover\": {\n backgroundColor: theme.colors.sidePanel.listItemHoverBackgroundColor,\n cursor: \"pointer\"\n },\n \"&.Mui-selected\": {\n backgroundColor: theme.colors.sidePanel.listItemSelectedBackgroundColor\n }\n },\n chatSummary: {\n paddingLeft: 10,\n width: \"100%\",\n minWidth: 0\n },\n chatName: {\n visibility: props => props.name.length ? \"visible\" : \"hidden\"\n },\n latestMessage: {\n color: colorManipulator_1.alpha(theme.colors.textColor, 0.6),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n date: {\n color: colorManipulator_1.alpha(theme.colors.textColor, 0.6),\n float: \"right\"\n },\n unreadCount: {\n fontSize: \"0.75rem\",\n float: \"right\",\n backgroundColor: theme.colors.green.main,\n color: theme.colors.green.contrastText,\n lineHeight: \"20px\",\n borderRadius: 10,\n textAlign: \"center\",\n verticalAlign: \"middle\",\n minWidth: 20,\n padding: \"0 4px\"\n }\n}));\nexports.default = react_1.default.memo(ChatListItem);\nfunction ChatListItem(props) {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles(props);\n const icon = props.isGroup\n ? react_1.default.createElement(DefaultGroupChatIcon_1.default, { size: \"md\" })\n : react_1.default.createElement(UserAvatar_1.default, { isUserOnline: props.userOnline, userId: props.userId, imageId: props.userImageId, size: \"md\" });\n let snippet;\n if (props.themTyping) {\n snippet = react_1.default.createElement(ThemTyping_1.default, { variant: \"body2\" });\n }\n else if (props.participantsTyping.length) {\n snippet = react_1.default.createElement(ParticipantsTyping_1.default, { usernames: props.participantsTyping });\n }\n else {\n snippet = react_1.default.createElement(TextContent_1.default, { text: props.latestMessage, plainText: true, variant: \"body2\" });\n }\n return (react_1.default.createElement(ListItem_1.default, { selected: props.selected, onClick: () => dispatch(gotoChat_1.gotoChatByIndex(props.index)), className: classes.listItem, divider: true },\n react_1.default.createElement(ListItemIcon_1.default, null, icon),\n react_1.default.createElement(\"div\", { className: classes.chatSummary },\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(Typography_1.default, { variant: \"caption\", className: classes.date }, props.date ? date_1.formatMessageDate(props.date) : null),\n react_1.default.createElement(Typography_1.default, { variant: \"body1\", className: classes.chatName }, props.name.length ? props.name : \"Loading\")),\n react_1.default.createElement(\"div\", null,\n props.unreadCount > 0 ? react_1.default.createElement(\"div\", { className: classes.unreadCount }, props.unreadCount) : null,\n react_1.default.createElement(\"div\", { className: classes.latestMessage }, snippet)))));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.build = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst ChatListItem_1 = __importDefault(require(\"./ChatListItem\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst stateFunctions = __importStar(require(\"../../domain/stateFunctions\"));\nconst messages_1 = require(\"../../domain/model/messages\");\nconst messageFunctions_1 = require(\"../../domain/messageFunctions\");\nconst CyclesContent_1 = require(\"../mainPanel/CyclesContent\");\nfunction build(chat, userDictionary, index, selectedChatIndex, me) {\n var _a, _b;\n let name;\n let key;\n let isGroup;\n let userId = null;\n let userImageId = null;\n let themTyping = false;\n let userOnline = false;\n let participantsTyping = [];\n if (chatFunctions.isDirectChat(chat)) {\n const user = userDictionary.hasOwnProperty(chat.them) ? userDictionary[chat.them] : null;\n name = (_a = user === null || user === void 0 ? void 0 : user.username) !== null && _a !== void 0 ? _a : \"\";\n key = \"D-\" + chat.them.toString();\n isGroup = false;\n themTyping = chatFunctions.isConfirmedChat(chat) && chat.themTyping;\n userOnline = (userDictionary.hasOwnProperty(chat.them) ? userDictionary[chat.them].minutesSinceLastOnline < 2 : false);\n userId = chat.them;\n userImageId = (_b = user === null || user === void 0 ? void 0 : user.imageId) !== null && _b !== void 0 ? _b : null;\n }\n else {\n name = chat.subject;\n isGroup = true;\n if (chatFunctions.isConfirmedChat(chat)) {\n key = \"G-\" + chat.chatId.toString();\n participantsTyping = stateFunctions.getUsers(chat.participantsTyping, userDictionary).map(u => u.username);\n }\n else {\n key = \"NG-\" + chat.subject;\n }\n }\n let latestMessageText = \"\";\n for (let i = chat.messages.length - 1; i >= 0; i--) {\n const message = chat.messages[i];\n if (\"content\" in message) {\n if (message.content.kind === \"cycles\") {\n latestMessageText = CyclesContent_1.formatCyclesText(message.content.amount, messages_1.sentByMe(message, me), name);\n }\n else {\n latestMessageText = messageFunctions_1.getContentAsText(message.content);\n }\n break;\n }\n }\n return (react_1.default.createElement(ChatListItem_1.default, { key: key, name: name, date: \"displayDate\" in chat ? chat.displayDate : undefined, index: index, selected: index === selectedChatIndex, latestMessage: latestMessageText, isGroup: isGroup, userId: userId, userImageId: userImageId, unreadCount: chatFunctions.getUnreadMessageCount(chat), themTyping: themTyping, userOnline: userOnline, participantsTyping: participantsTyping }));\n}\nexports.build = build;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst ChatList_1 = __importDefault(require(\"./ChatList\"));\nconst Header_1 = __importDefault(require(\"./Header\"));\nconst SearchResults_1 = __importDefault(require(\"./SearchResults\"));\nconst SearchBox_1 = __importDefault(require(\"../shared/SearchBox\"));\nconst MyAvatar_1 = __importDefault(require(\"./MyAvatar\"));\nconst UserMenu_1 = __importDefault(require(\"./UserMenu\"));\nconst PLACEHOLDER_TEXT = \"Search chats and messages\";\nexports.default = react_1.default.memo(DefaultPanel);\nfunction DefaultPanel() {\n const [inputText, setInputText] = react_1.useState(\"\");\n const myUsername = react_redux_1.useSelector((state) => { var _a; return (_a = state.usersState.me) === null || _a === void 0 ? void 0 : _a.username; });\n const contentPanel = inputText.length\n ? react_1.default.createElement(SearchResults_1.default, { searchTerm: inputText, clearSearchTerm: () => setInputText(\"\") })\n : react_1.default.createElement(ChatList_1.default, null);\n const avatar = react_1.default.createElement(MyAvatar_1.default, { size: \"sm\" });\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Header_1.default, { leftIcon: avatar, title: myUsername, rightIcon: react_1.default.createElement(UserMenu_1.default, null) }),\n react_1.default.createElement(SearchBox_1.default, { text: inputText, onChange: setInputText, placeholderText: PLACEHOLDER_TEXT }),\n contentPanel));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst Grid_1 = __importDefault(require(\"@material-ui/core/Grid\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nexports.default = react_1.default.memo(Header);\nconst useStyles = makeStyles_1.default((theme) => ({\n title: {\n color: theme.colors.header.primaryTextColor,\n marginLeft: 24,\n whiteSpace: \"nowrap\"\n }\n}));\nfunction Header(props) {\n const classes = useStyles();\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Grid_1.default, { component: \"header\", container: true, justifyContent: \"space-between\", alignItems: \"center\" },\n react_1.default.createElement(Grid_1.default, { item: true },\n react_1.default.createElement(Grid_1.default, { container: true, alignItems: \"center\" },\n react_1.default.createElement(Grid_1.default, { item: true }, props.leftIcon),\n react_1.default.createElement(Grid_1.default, { item: true, className: classes.title },\n react_1.default.createElement(Typography_1.default, { variant: \"h6\" }, props.title)))),\n react_1.default.createElement(Grid_1.default, { item: true }, props.rightIcon))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst Header_1 = __importDefault(require(\"./Header\"));\nconst CloseButton_1 = __importDefault(require(\"../shared/CloseButton\"));\nconst CreateGroupChatIcon_1 = __importDefault(require(\"../shared/CreateGroupChatIcon\"));\nconst NameInput_1 = __importDefault(require(\"../shared/NameInput\"));\nconst joinGroup_1 = __importDefault(require(\"../../actions/chats/joinGroup\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nconst PLACEHOLDER_TEXT = \"Invite Code\";\nexports.default = react_1.default.memo(JoinGroupChatPanel);\nconst useStyles = makeStyles_1.default((theme) => ({\n nameInput: {\n marginTop: 60,\n marginLeft: 30\n },\n cancelButton: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6)\n }\n}));\nfunction JoinGroupChatPanel() {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n function closePanel() {\n dispatch(changeSidePanel_1.changeLeftPanel(panels_1.LeftPanelType.Chats));\n }\n function handleSubmit(text) {\n closePanel();\n const chatId = BigInt(\"0x\" + text);\n dispatch(joinGroup_1.default(chatId));\n }\n const newChatIcon = react_1.default.createElement(CreateGroupChatIcon_1.default, { size: \"sm\" });\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Header_1.default, { leftIcon: newChatIcon, title: \"Join a group\", rightIcon: react_1.default.createElement(CloseButton_1.default, { onClick: closePanel, className: classes.cancelButton }) }),\n react_1.default.createElement(NameInput_1.default, { onSubmit: handleSubmit, placeholderText: PLACEHOLDER_TEXT, minLength: 32, maxLength: 32, className: classes.nameInput })));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst DefaultPanel_1 = __importDefault(require(\"./DefaultPanel\"));\nconst JoinGroupChatPanel_1 = __importDefault(require(\"./JoinGroupChatPanel\"));\nconst NewDirectChatPanel_1 = __importDefault(require(\"./NewDirectChatPanel\"));\nconst NewGroupChatPanel_1 = __importDefault(require(\"./NewGroupChatPanel\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nexports.default = LeftPanel;\nfunction LeftPanel(props) {\n switch (props.type) {\n case panels_1.LeftPanelType.None:\n return null;\n case panels_1.LeftPanelType.Chats:\n return react_1.default.createElement(DefaultPanel_1.default, null);\n case panels_1.LeftPanelType.JoinGroupChat:\n return react_1.default.createElement(JoinGroupChatPanel_1.default, null);\n case panels_1.LeftPanelType.NewDirectChat:\n return react_1.default.createElement(NewDirectChatPanel_1.default, null);\n case panels_1.LeftPanelType.NewGroupChat:\n return react_1.default.createElement(NewGroupChatPanel_1.default, null);\n }\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst ListItem_1 = __importDefault(require(\"@material-ui/core/ListItem\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst stateFunctions = __importStar(require(\"../../domain/stateFunctions\"));\nconst gotoChat_1 = require(\"../../actions/chats/gotoChat\");\nconst date_1 = require(\"../../formatters/date\");\nconst TextContent_1 = __importDefault(require(\"../shared/TextContent\"));\nconst messageFunctions_1 = require(\"../../domain/messageFunctions\");\nexports.default = react_1.default.memo(MessageSearchMatch);\nconst useStyles = makeStyles_1.default((theme) => ({\n listItem: {\n \"&:hover\": {\n backgroundColor: theme.colors.sidePanel.listItemHoverBackgroundColor,\n cursor: \"pointer\"\n }\n },\n messageSummary: {\n width: \"100%\"\n },\n messageSnippet: {\n color: colorManipulator_1.alpha(theme.colors.textColor, 0.6),\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n maxWidth: 450\n },\n date: {\n color: colorManipulator_1.alpha(theme.colors.textColor, 0.6),\n float: \"right\"\n }\n}));\nfunction MessageSearchMatch(props) {\n var _a, _b;\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n const [chat, index] = react_redux_1.useSelector((state) => chatFunctions.getChat(state.chatsState.chats, props.chatId));\n const userDictionary = react_redux_1.useSelector((state) => state.usersState.userDictionary);\n let chatName;\n if (chatFunctions.isDirectChat(chat)) {\n chatName = (_b = (_a = stateFunctions.getUserSummary(chat.them, userDictionary)) === null || _a === void 0 ? void 0 : _a.username) !== null && _b !== void 0 ? _b : \"\";\n }\n else {\n chatName = chat.subject;\n }\n return (react_1.default.createElement(ListItem_1.default, { onClick: () => dispatch(gotoChat_1.gotoChatByIndex(index, props.message.id)), className: classes.listItem, divider: true },\n react_1.default.createElement(\"div\", { className: classes.messageSummary },\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(Typography_1.default, { variant: \"caption\", className: classes.date }, date_1.formatMessageDate(props.message.date)),\n react_1.default.createElement(Typography_1.default, { variant: \"body1\" }, chatName)),\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"div\", { className: classes.messageSnippet },\n react_1.default.createElement(TextContent_1.default, { text: messageFunctions_1.getContentAsText(props.message.content), variant: \"body2\", plainText: true }))))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst UserAvatar_1 = __importDefault(require(\"../shared/UserAvatar\"));\nconst setProfileImage_1 = __importDefault(require(\"../../actions/users/setProfileImage\"));\nconst Alert_1 = require(\"../../components/modals/Alert\");\nconst constants_1 = require(\"../../constants\");\nexports.default = react_1.default.memo(MyAvatar);\nconst useStyles = makeStyles_1.default((theme) => ({\n myAvatar: {\n cursor: \"pointer\"\n }\n}));\nfunction MyAvatar(props) {\n var _a, _b, _c;\n const dispatch = react_redux_1.useDispatch();\n const userImage = react_redux_1.useSelector((state) => {\n const me = state.usersState.me;\n return me ? {\n userId: me.userId,\n imageId: me.imageId,\n blobUrl: me.imageBlobUrl\n } : null;\n }, react_redux_1.shallowEqual);\n const userExists = userImage !== null;\n const classes = useStyles();\n function onAvatarFileSelected(event) {\n if (!userImage) {\n return;\n }\n let files = event.target.files;\n if (!files || !files[0]) {\n return;\n }\n const file = files[0];\n const reader = new FileReader();\n reader.onload = function (e) {\n const mimeType = file.type;\n const data = e.target.result;\n if (!mimeType.startsWith(\"image/\")) {\n Alert_1.alertDialog({\n title: \"Invalid avatar image\",\n text: \"You must choose an image\"\n });\n return;\n }\n if (data.byteLength > constants_1.MAX_AVATAR_SIZE) {\n Alert_1.alertDialog({\n title: \"Invalid avatar image\",\n text: \"Your image file must be less than 256 Kb in size\"\n });\n return;\n }\n dispatch(setProfileImage_1.default(userImage.userId, new Uint8Array(data)));\n };\n reader.readAsArrayBuffer(file);\n }\n return (react_1.default.createElement(\"label\", { className: classes.myAvatar },\n react_1.default.createElement(UserAvatar_1.default, { isUserOnline: true, userId: (_a = userImage === null || userImage === void 0 ? void 0 : userImage.userId) !== null && _a !== void 0 ? _a : null, imageId: (_b = userImage === null || userImage === void 0 ? void 0 : userImage.imageId) !== null && _b !== void 0 ? _b : null, blobUrl: (_c = userImage === null || userImage === void 0 ? void 0 : userImage.blobUrl) !== null && _c !== void 0 ? _c : null, size: props.size }),\n userExists ? react_1.default.createElement(\"input\", { hidden: true, type: \"file\", accept: \".jpg, .jpeg, .png, .gif\", onChange: onAvatarFileSelected }) : null));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst List_1 = __importDefault(require(\"@material-ui/core/List\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst service_1 = __importDefault(require(\"../../services/userMgmt/service\"));\nconst users_1 = require(\"../../domain/model/users\");\nconst gotoUser_1 = __importDefault(require(\"../../actions/chats/gotoUser\"));\nconst SearchBox_1 = __importDefault(require(\"../shared/SearchBox\"));\nconst UserListItem_1 = __importDefault(require(\"../shared/UserListItem\"));\nconst Header_1 = __importDefault(require(\"./Header\"));\nconst CloseButton_1 = __importDefault(require(\"../shared/CloseButton\"));\nconst CreateGroupChatIcon_1 = __importDefault(require(\"../shared/CreateGroupChatIcon\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nconst PLACEHOLDER_TEXT = \"Type a username\";\nexports.default = react_1.default.memo(NewDirectChatPanel);\nconst useStyles = makeStyles_1.default((theme) => ({\n closeButton: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6)\n }\n}));\nfunction NewDirectChatPanel() {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n const emptyResults = [];\n const [text, setText] = react_1.useState(\"\");\n const [results, setResults] = react_1.useState(emptyResults);\n const clearInput = () => setText(\"\");\n const textBoxRef = react_1.useRef(null);\n function handleInputChange(text) {\n setText(text);\n if (text.length > 0) {\n const request = {\n search_term: text,\n max_results: 20\n };\n service_1.default.searchUsers(request).then(response => {\n setResults(response.users);\n });\n }\n else {\n setResults(emptyResults);\n }\n }\n function closePanel() {\n clearInput();\n dispatch(changeSidePanel_1.changeLeftPanel(panels_1.LeftPanelType.Chats));\n }\n function handleSelectUser(user) {\n closePanel();\n dispatch(gotoUser_1.default(user));\n }\n react_1.useLayoutEffect(() => {\n var _a;\n (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n }, []);\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Header_1.default, { leftIcon: react_1.default.createElement(CreateGroupChatIcon_1.default, { size: \"sm\" }), title: \"Start a new chat\", rightIcon: react_1.default.createElement(CloseButton_1.default, { onClick: closePanel, className: classes.closeButton }) }),\n react_1.default.createElement(SearchBox_1.default, { text: text, onChange: handleInputChange, placeholderText: PLACEHOLDER_TEXT, ref: textBoxRef }),\n react_1.default.createElement(List_1.default, { disablePadding: true }, results.map(user => react_1.default.createElement(UserListItem_1.default, { key: user.userId, user: users_1.fromUserSummary(user), handleSelectUser: () => handleSelectUser(user) })))));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Checkbox_1 = __importDefault(require(\"@material-ui/core/Checkbox\"));\nconst FormControlLabel_1 = __importDefault(require(\"@material-ui/core/FormControlLabel\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst createGroupChat_1 = __importDefault(require(\"../../actions/chats/createGroupChat\"));\nconst Header_1 = __importDefault(require(\"./Header\"));\nconst CloseButton_1 = __importDefault(require(\"../shared/CloseButton\"));\nconst CreateGroupChatIcon_1 = __importDefault(require(\"../shared/CreateGroupChatIcon\"));\nconst NameInput_1 = __importDefault(require(\"../shared/NameInput\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nconst PLACEHOLDER_TEXT = \"Group Name\";\nexports.default = react_1.default.memo(NewGroupChatPanel);\nconst useStyles = makeStyles_1.default((theme) => ({\n nameInput: {\n marginTop: 60\n },\n textBox: {\n marginLeft: 30\n },\n checkBox: {\n margin: \"20px auto 0\"\n },\n cancelButton: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6)\n }\n}));\nfunction NewGroupChatPanel() {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n const [chatHistoryVisibleToNewJoiners, setChatHistoryVisibleToNewJoiners] = react_1.useState(false);\n function closePanel() {\n dispatch(changeSidePanel_1.changeLeftPanel(panels_1.LeftPanelType.Chats));\n }\n function handleSubmit(text) {\n closePanel();\n dispatch(createGroupChat_1.default(text, [], chatHistoryVisibleToNewJoiners));\n }\n const newChatIcon = react_1.default.createElement(CreateGroupChatIcon_1.default, { size: \"sm\" });\n const chatHistoryVisibleCheckBox = react_1.default.createElement(FormControlLabel_1.default, { control: react_1.default.createElement(Checkbox_1.default, { color: \"default\" }), label: \"Chat history visible to new joiners\", className: classes.checkBox, checked: chatHistoryVisibleToNewJoiners, onChange: (_, checked) => setChatHistoryVisibleToNewJoiners(checked) });\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Header_1.default, { leftIcon: newChatIcon, title: \"Create a new group\", rightIcon: react_1.default.createElement(CloseButton_1.default, { onClick: closePanel, className: classes.cancelButton }) }),\n react_1.default.createElement(NameInput_1.default, { onSubmit: handleSubmit, placeholderText: PLACEHOLDER_TEXT, minLength: 2, maxLength: 25, children: [chatHistoryVisibleCheckBox], className: classes.nameInput, textBoxClassName: classes.textBox })));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Box_1 = __importDefault(require(\"@material-ui/core/Box\"));\nconst Divider_1 = __importDefault(require(\"@material-ui/core/Divider\"));\nconst Grid_1 = __importDefault(require(\"@material-ui/core/Grid\"));\nconst List_1 = __importDefault(require(\"@material-ui/core/List\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst stateFunctions = __importStar(require(\"../../domain/stateFunctions\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst chatListItemBuilder = __importStar(require(\"./ChatListItemBuilder\"));\nconst MessageSearchMatch_1 = __importDefault(require(\"./MessageSearchMatch\"));\nconst service_1 = __importDefault(require(\"../../services/chats/service\"));\nconst useStyles = makeStyles_1.default((theme) => ({\n searchResults: {\n overflow: \"auto\"\n },\n groupTitle: {\n padding: \"4px 16px\"\n }\n}));\nexports.default = react_1.default.memo(SearchResults);\nfunction SearchResults(props) {\n var _a;\n const chats = react_redux_1.useSelector((state) => state.chatsState.chats);\n const me = (_a = react_redux_1.useSelector((state) => { var _a; return (_a = state.usersState.me) === null || _a === void 0 ? void 0 : _a.userId; })) !== null && _a !== void 0 ? _a : \"\";\n const userDictionary = react_redux_1.useSelector((state) => state.usersState.userDictionary);\n const [messageMatches, setMessageMatches] = react_1.useState([]);\n const getUser = (userId) => stateFunctions.getUserSummary(userId, userDictionary);\n const chatMatches = searchChats(chats, props.searchTerm, getUser);\n react_1.useEffect(() => {\n // search messages\n service_1.default\n .searchAllMessages(props.searchTerm, 20)\n .then((res) => {\n if (res.kind === \"success\") {\n const matches = res.result.matches;\n setMessageMatches(matches);\n }\n });\n }, [props.searchTerm]);\n const classes = useStyles();\n function createGroup(title, items) {\n return (react_1.default.createElement(Grid_1.default, { item: true },\n react_1.default.createElement(Box_1.default, { className: classes.groupTitle }, title),\n react_1.default.createElement(Divider_1.default, null),\n react_1.default.createElement(List_1.default, { disablePadding: true }, items)));\n }\n const groups = [];\n if (chatMatches.length) {\n groups.push(createGroup(\"Chats\", chatMatches.map(([chat, index]) => chatListItemBuilder.build(chat, userDictionary, index, null, me))));\n }\n if (messageMatches.length) {\n groups.push(createGroup(\"Messages\", messageMatches.map(m => react_1.default.createElement(MessageSearchMatch_1.default, { key: `${m.chatId}_${m.message.id}`, chatId: m.chatId, message: m.message, searchTerm: props.searchTerm }))));\n }\n return (react_1.default.createElement(Grid_1.default, { container: true, direction: \"column\", wrap: \"nowrap\", className: classes.searchResults }, groups));\n}\nfunction searchChats(chats, searchTerm, getUser) {\n searchTerm = searchTerm.toLowerCase();\n const matches = [];\n for (let index = 0; index < chats.length; index++) {\n const chat = chats[index];\n if (chatFunctions.isDirectChat(chat)) {\n const user = getUser(chat.them);\n if (user && user.username.toLowerCase().indexOf(searchTerm) >= 0) {\n matches.push([chat, index]);\n }\n }\n else if (chat.subject.toLowerCase().indexOf(searchTerm) >= 0) {\n matches.push([chat, index]);\n }\n }\n return matches;\n}\nfunction searchUsers(users, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n return users.filter(u => u.username.toLowerCase().indexOf(searchTerm) >= 0);\n}\nfunction getUsersWithoutDirectChats(users, chats) {\n const usersWithDirectChats = new Set();\n for (const chat of chats.filter(chatFunctions.isDirectChat)) {\n usersWithDirectChats.add(chat.them);\n }\n return users.filter(u => !usersWithDirectChats.has(u.userId));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Dialog_1 = __importDefault(require(\"@material-ui/core/Dialog\"));\nconst DialogActions_1 = __importDefault(require(\"@material-ui/core/DialogActions\"));\nconst DialogContent_1 = __importDefault(require(\"@material-ui/core/DialogContent\"));\nconst DialogTitle_1 = __importDefault(require(\"@material-ui/core/DialogTitle\"));\nconst RadioGroup_1 = __importDefault(require(\"@material-ui/core/RadioGroup\"));\nconst FormControlLabel_1 = __importDefault(require(\"@material-ui/core/FormControlLabel\"));\nconst Button_1 = __importDefault(require(\"@material-ui/core/Button\"));\nconst Radio_1 = __importDefault(require(\"@material-ui/core/Radio\"));\nconst useTheme_1 = __importDefault(require(\"@material-ui/core/styles/useTheme\"));\nconst selectTheme_1 = __importDefault(require(\"../../actions/app/selectTheme\"));\nconst theme_1 = require(\"../../domain/model/theme\");\nexports.default = ThemeSelector;\nconst options = [\n {\n name: \"System default\",\n value: theme_1.SelectedTheme.SystemDefault\n }, {\n name: \"Light\",\n value: theme_1.SelectedTheme.Light\n }, {\n name: \"Dark\",\n value: theme_1.SelectedTheme.Dark\n }\n];\nfunction ThemeSelector(props) {\n const dispatch = react_redux_1.useDispatch();\n const currentTheme = react_redux_1.useSelector((state) => state.appState.selectedTheme);\n const [value, setValue] = react_1.useState(currentTheme);\n const theme = useTheme_1.default();\n function handleChange(event) {\n const selectedTheme = parseInt(event.target.value);\n setValue(selectedTheme);\n }\n function handleOk() {\n dispatch(selectTheme_1.default(value));\n props.onClose();\n }\n return (react_1.default.createElement(Dialog_1.default, { open: true },\n react_1.default.createElement(DialogTitle_1.default, null, \"Select theme\"),\n react_1.default.createElement(DialogContent_1.default, { dividers: true },\n react_1.default.createElement(RadioGroup_1.default, { name: \"theme\", value: value, onChange: handleChange }, options.map((option) => (react_1.default.createElement(FormControlLabel_1.default, { key: option.value, value: option.value, control: react_1.default.createElement(Radio_1.default, null), label: option.name, color: theme.colors.buttonColor }))))),\n react_1.default.createElement(DialogActions_1.default, null,\n react_1.default.createElement(Button_1.default, { onClick: props.onClose }, \"Cancel\"),\n react_1.default.createElement(Button_1.default, { onClick: handleOk }, \"Ok\"))));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst MoreVert_1 = __importDefault(require(\"@material-ui/icons/MoreVert\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst PopOverMenu_1 = __importDefault(require(\"../shared/PopOverMenu\"));\nconst ThemeSelector_1 = __importDefault(require(\"./ThemeSelector\"));\nconst logout_1 = __importDefault(require(\"../../actions/signin/logout\"));\nconst Alert_1 = require(\"../../components/modals/Alert\");\nconst panels_1 = require(\"../../domain/model/panels\");\nconst constants_1 = require(\"../../constants\");\nexports.default = react_1.default.memo(UserMenu);\nconst useStyles = makeStyles_1.default((theme) => ({\n menuIcon: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6)\n }\n}));\nfunction UserMenu() {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n const [themeSelectorOpen, setThemeSelectorOpen] = react_1.useState(false);\n const menuItems = [];\n menuItems.push({ text: \"New chat\", action: () => dispatch(changeSidePanel_1.changeLeftPanel(panels_1.LeftPanelType.NewDirectChat)) });\n menuItems.push({ text: \"New group\", action: () => dispatch(changeSidePanel_1.changeLeftPanel(panels_1.LeftPanelType.NewGroupChat)) });\n menuItems.push({ text: \"Join group\", action: () => dispatch(changeSidePanel_1.changeLeftPanel(panels_1.LeftPanelType.JoinGroupChat)) });\n menuItems.push({ text: \"Theme\", action: () => setThemeSelectorOpen(true) });\n menuItems.push({ text: \"Internet Identity\", action: () => window.open(process.env.IDP_URL, \"_blank\") });\n menuItems.push({ text: \"TEST MODE\", action: () => Alert_1.alertDialog(constants_1.ABOUT_US) });\n menuItems.push({ text: \"Logout\", action: () => dispatch(logout_1.default()) });\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(PopOverMenu_1.default, { icon: react_1.default.createElement(MoreVert_1.default, { className: classes.menuIcon }), placement: \"bottom-start\", menuItems: menuItems }),\n themeSelectorOpen\n ? react_1.default.createElement(ThemeSelector_1.default, { onClose: () => setThemeSelectorOpen(false) })\n : null));\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileValidationError = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst IconButton_1 = __importDefault(require(\"@material-ui/core/IconButton\"));\nconst paperclip_svg_1 = __importDefault(require(\"../../icons/paperclip.svg\"));\nconst blobFunctions_1 = require(\"../../utils/blobFunctions\");\nconst Dimensions_1 = __importDefault(require(\"../../utils/Dimensions\"));\nconst constants_1 = require(\"../../constants\");\nvar FileValidationError;\n(function (FileValidationError) {\n FileValidationError[FileValidationError[\"FileTooBig\"] = 0] = \"FileTooBig\";\n})(FileValidationError = exports.FileValidationError || (exports.FileValidationError = {}));\nexports.default = react_1.default.memo(AttachFile);\nfunction AttachFile(props) {\n return (react_1.default.createElement(IconButton_1.default, { component: \"label\", className: props.className },\n react_1.default.createElement(paperclip_svg_1.default, null),\n react_1.default.createElement(\"input\", { hidden: true, type: \"file\", onChange: onMediaSelected })));\n function onMediaSelected(event) {\n let files = event.target.files;\n if (!files || !files[0]) {\n return;\n }\n const file = files[0];\n const reader = new FileReader();\n reader.onload = function (e) {\n return __awaiter(this, void 0, void 0, function* () {\n const mimeType = file.type;\n const data = e.target.result;\n let content;\n if ((mimeType.startsWith(\"image/\") && data.byteLength > constants_1.MAX_IMAGE_SIZE) ||\n (mimeType.startsWith(\"video/\") && data.byteLength > constants_1.MAX_VIDEO_SIZE) ||\n (data.byteLength > constants_1.MAX_FILE_SIZE)) {\n props.onFileValidationError(FileValidationError.FileTooBig, mimeType);\n return;\n }\n if (mimeType.startsWith(\"video/\") || mimeType.startsWith(\"image/\")) {\n const blobUrl = blobFunctions_1.dataToBlobUrl(data, mimeType);\n const extract = mimeType.startsWith(\"image/\")\n ? yield extractImageThumbnail(blobUrl)\n : yield extractVideoThumbnail(blobUrl);\n content = {\n kind: \"media\",\n caption: null,\n mimeType: mimeType,\n width: extract.dimensions.width,\n height: extract.dimensions.height,\n data: new Uint8Array(e.target.result),\n blobUrl,\n thumbnailData: extract.thumbnailData\n };\n }\n else {\n content = {\n kind: \"file\",\n caption: null,\n name: file.name,\n mimeType: mimeType,\n data: new Uint8Array(e.target.result)\n };\n }\n props.onFileSelected(content);\n });\n };\n reader.readAsArrayBuffer(file);\n }\n function extractImageThumbnail(blobUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, _) => {\n const img = new Image;\n img.onload = function () {\n const extract = extractThumbnail(img, new Dimensions_1.default(img.width, img.height));\n resolve(extract);\n };\n img.src = blobUrl;\n });\n });\n }\n function extractVideoThumbnail(blobUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, _) => {\n const video = document.createElement(\"video\");\n video.addEventListener(\"loadedmetadata\", function () {\n video.addEventListener(\"seeked\", function () {\n const extract = extractThumbnail(video, new Dimensions_1.default(this.videoWidth, this.videoHeight));\n resolve(extract);\n });\n video.currentTime = 1;\n });\n video.src = blobUrl;\n });\n });\n }\n function extractThumbnail(original, dimensions) {\n const thumbnailDimensions = dimensions.scaleToFit(new Dimensions_1.default(25, 25));\n const canvas = document.createElement(\"canvas\");\n canvas.width = thumbnailDimensions.width;\n canvas.height = thumbnailDimensions.height;\n const context = canvas.getContext(\"2d\");\n context.drawImage(original, 0, 0, canvas.width, canvas.height);\n return {\n dimensions: dimensions,\n thumbnailData: canvas.toDataURL()\n };\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatCyclesText = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst cycles_1 = require(\"../../formatters/cycles\");\nexports.default = react_1.default.memo(CyclesContent);\nfunction formatCyclesText(amount, sentTo, them) {\n return cycles_1.formatCycles(amount) + (sentTo ? \" sent to \" : \" received from \") + (them !== null && them !== void 0 ? them : \"unknown\");\n}\nexports.formatCyclesText = formatCyclesText;\nconst useStyles = makeStyles_1.default((theme) => ({\n cycles: {\n padding: \"0 12px\",\n display: \"flex\",\n alignItems: \"center\"\n },\n icon: {\n fontSize: 50,\n marginRight: 12\n }\n}));\nfunction CyclesContent(props) {\n const classes = useStyles(props);\n return (react_1.default.createElement(\"div\", { className: classes.cycles },\n react_1.default.createElement(Typography_1.default, { className: classes.icon }, \"\\uD83C\\uDF89\"),\n react_1.default.createElement(Typography_1.default, { variant: \"body1\" }, formatCyclesText(props.content.amount, props.sentByMe, props.theirUsername))));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst date_1 = require(\"../../formatters/date\");\nconst dateFunctions = __importStar(require(\"../../utils/dateFunctions\"));\nconst useStyles = makeStyles_1.default((theme) => ({\n dayChangeMarker: {\n padding: \"6px 12px\",\n borderRadius: 10,\n color: theme.colors.dayChangeMarker.textColor,\n backgroundColor: theme.colors.dayChangeMarker.backgroundColor,\n alignSelf: \"center\",\n position: \"sticky\",\n top: 10,\n zIndex: 60\n }\n}));\nexports.default = react_1.default.memo(DayChangeMarker);\nfunction DayChangeMarker(props) {\n const classes = useStyles();\n return react_1.default.createElement(Typography_1.default, { variant: \"body2\", className: classes.dayChangeMarker }, formatDate(props.date));\n}\nfunction formatDate(date) {\n const startOfToday = dateFunctions.getStartOfToday();\n if (date >= startOfToday) {\n return \"Today\";\n }\n const startOfYesterday = dateFunctions.addDays(startOfToday, -1);\n if (date >= startOfYesterday) {\n return \"Yesterday\";\n }\n const useDayNameOnly = date >= dateFunctions.addDays(startOfToday, -6);\n return useDayNameOnly\n ? date_1.toDayOfWeekString(date)\n : date_1.toLongDateString(date);\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst MoreVert_1 = __importDefault(require(\"@material-ui/icons/MoreVert\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst PopOverMenu_1 = __importDefault(require(\"../shared/PopOverMenu\"));\nconst blockUser_1 = require(\"../../actions/chats/blockUser\");\nconst markMessagesAsRead_1 = require(\"../../actions/chats/markMessagesAsRead\");\nconst toggleNotifications_1 = require(\"../../actions/chats/toggleNotifications\");\nexports.default = react_1.default.memo(DirectChatMenu);\nconst useStyles = makeStyles_1.default((theme) => ({\n menuIcon: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6)\n }\n}));\nfunction DirectChatMenu(props) {\n const dispatch = react_redux_1.useDispatch();\n const unblock = react_redux_1.useSelector((state) => state.chatsState.blockedUsers).includes(props.userId);\n const classes = useStyles();\n const menuItems = [];\n // menuItems.push({ text: \"Contact info\", action: () => {} });\n menuItems.push({ text: props.muted ? \"Unmute notifications\" : \"Mute notifications\", action: () => dispatch(toggleNotifications_1.toggleNotifications(props.chatId, !props.muted)) });\n // menuItems.push({ text: \"Delete chat\", action: () => {} });\n menuItems.push({ text: unblock ? \"Unblock user\" : \"Block user\", action: () => dispatch(blockUser_1.blockUser(props.userId, unblock)) });\n menuItems.push({ text: \"Mark all as read\", action: () => dispatch(markMessagesAsRead_1.markAllMessagesAsReadLocally(props.chatId)), disable: !props.any_unread });\n return react_1.default.createElement(PopOverMenu_1.default, { icon: react_1.default.createElement(MoreVert_1.default, { className: classes.menuIcon }), menuItems: menuItems, placement: \"bottom-end\" });\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst fileSize_1 = __importDefault(require(\"../../formatters/fileSize\"));\nexports.default = react_1.default.memo(DraftMediaMessage);\nconst useStyles = makeStyles_1.default(() => ({\n container: {\n padding: 2,\n backgroundColor: \"#aaaaaa\",\n },\n file: {\n minWidth: 300,\n padding: \"10px 9px\",\n backgroundColor: \"#aaaaaa\",\n fontSize: 14,\n lineHeight: 1,\n display: \"flex\",\n alignItems: \"center\"\n },\n icon: {\n backgroundImage: \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAA8CAYAAADL94L/AAAByElEQVR4Ae3axdJTQRAFYFyegA3u8ALseCDcicsGhxt3x+G32BXc3X3NBnfXYTqp3sZlhuqpOlXZRL46He9ReJyJxGSTEreaPfEHZiX+1uSJvelVNu+Jvjd7Yk9zI8aSUe0eDpjCIYfNSuw5v/zF5In/6mU27478tXriLJvXjdSwPq1lCDTCmxjiCNav8GZYBVMwWKagX8kWjk9vCcMhYWhEFEw1+oV0wZjdPKY6Vn9EwmBDTYPwBoXCYPLGDQTJjkHQNQRJj0FQtmgs+C8wOHIIkh2DoDu5vD5Xfkz9hsTBWDyxhjDYUDqvLRYSY1JilSQGyyxXOt4QKJPX70NDQmI27gyxHcn9bH/5RFMNAUgoDI4afOAMHBiCdiDNj5woGAhgsCEYudSI1lBCRwoPL957slAoDDYEoPXb/ZVs3FE/y9072fDxsx4BMPVfGOpl1VY/y5++4EWM1Fm9LcCKpy8RpnchDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxhYNlXiP+XHXLRDM5thQVpyzIfS2YtLceVEkRmzalsgMArPhp258bA6b/LEb8LqPM930VNdvY/fhMmCxw+Of+4BTcPInBo2AAAAAElFTkSuQmCC)\",\n backgroundSize: \"contain\",\n width: 26,\n height: 30\n },\n fileName: {\n flex: \"1 0 auto\",\n marginLeft: 8,\n },\n fileSize: {\n margin: \"6px 0 3px 9px\",\n float: \"left\",\n textAlign: \"left\",\n display: \"block\",\n zIndex: 10,\n fontSize: 11,\n }\n}));\nfunction DraftMediaMessage(props) {\n const classes = useStyles();\n return (react_1.default.createElement(\"div\", { className: classes.container },\n react_1.default.createElement(\"div\", { className: classes.file },\n react_1.default.createElement(\"div\", { className: classes.icon }),\n react_1.default.createElement(\"div\", { className: classes.fileName }, props.name)),\n react_1.default.createElement(\"span\", { className: classes.fileSize },\n props.mimeType.toUpperCase(),\n \" - \",\n fileSize_1.default(props.size))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst Image_1 = __importDefault(require(\"../shared/Image\"));\nconst Video_1 = __importDefault(require(\"../shared/Video\"));\nexports.default = react_1.default.memo(DraftMediaMessage);\nconst useStyles = makeStyles_1.default(() => ({\n container: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n media: {\n margin: 14,\n marginBottom: 4,\n borderRadius: 16,\n \"& *\": {\n borderRadius: \"inherit\"\n },\n \"& img\": {\n maxWidth: props => props.isLandscape ? \"calc(var(--vh, 1vh) * 50)\" : \"none\",\n maxHeight: props => props.isLandscape ? \"none\" : \"calc(var(--vh, 1vh) * 50)\",\n width: props => props.isLandscape ? \"100%\" : \"auto\",\n height: props => props.isLandscape ? \"auto\" : \"100%\",\n }\n }\n}));\nfunction DraftMediaMessage(props) {\n const classes = useStyles({ isLandscape: props.width > props.height });\n return (react_1.default.createElement(\"div\", { className: classes.container },\n react_1.default.createElement(\"div\", { className: classes.media }, props.mimeType.startsWith(\"image/\")\n ? react_1.default.createElement(Image_1.default, { src: props.blobUrl })\n : react_1.default.createElement(Video_1.default, { src: props.blobUrl }))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst useTheme_1 = __importDefault(require(\"@material-ui/core/styles/useTheme\"));\nconst emoji_mart_1 = require(\"emoji-mart\");\nconst viewMode_1 = require(\"../../domain/model/viewMode\");\nexports.default = react_1.default.memo(EmojiPicker);\nconst useStyles = makeStyles_1.default((theme) => ({\n \"@global\": {\n \".emoji-mart\": {\n backgroundColor: theme.colors.footer.backgroundColor + \" !important\",\n border: 0,\n borderRadius: 0\n },\n \".emoji-mart-search\": {\n paddingBottom: 6,\n display: props => props.showSearch ? \"block\" : \"none\"\n },\n \".emoji-mart-search input\": {\n paddingTop: 7,\n backgroundColor: theme.colors.textBox.backgroundColor + \" !important\",\n color: theme.colors.textBox.textColor + \" !important\"\n },\n \".emoji-mart-category-label\": {\n top: -1\n },\n \".emoji-mart-category-label span\": {\n backgroundColor: theme.colors.footer.backgroundColor + \" !important\",\n opacity: 0.9,\n color: theme.colors.footer.mutedColor + \" !important\"\n },\n \".emoji-mart-category .emoji-mart-emoji span\": {\n cursor: \"pointer\"\n },\n \".emoji-mart-scroll\": {\n height: 215\n }\n }\n}));\nfunction EmojiPicker(props) {\n const currentViewMode = react_redux_1.useSelector((state) => state.appState.viewMode);\n const styleProps = {\n showSearch: currentViewMode === viewMode_1.ViewMode.Desktop\n };\n useStyles(styleProps);\n const theme = useTheme_1.default();\n return (react_1.default.createElement(emoji_mart_1.Picker, { title: \"Pick your emoji...\", theme: theme.palette.mode, color: \"#d62c7d\", onSelect: onSelectEmoji, autoFocus: styleProps.showSearch, showPreview: false, showSkinTones: false, emojiTooltip: true, emoji: \"point_up\", emojiSize: 28, perLine: 3, native: true, style: {\n width: \"100%\"\n } }));\n function onSelectEmoji(emojiData) {\n if (\"native\" in emojiData) {\n props.onEmojiSelected(emojiData.native);\n }\n }\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst CachingDataService_1 = __importStar(require(\"../../services/data/CachingDataService\"));\nconst blobFunctions_1 = require(\"../../utils/blobFunctions\");\nexports.default = react_1.default.memo(FileContent);\nconst useStyles = makeStyles_1.default((theme) => ({\n link: {\n padding: \"10px 9px\",\n fontSize: 14,\n lineHeight: 1,\n textDecoration: \"none\",\n display: \"flex\",\n alignItems: \"center\"\n },\n icon: {\n backgroundImage: \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAA8CAYAAADL94L/AAAByElEQVR4Ae3axdJTQRAFYFyegA3u8ALseCDcicsGhxt3x+G32BXc3X3NBnfXYTqp3sZlhuqpOlXZRL46He9ReJyJxGSTEreaPfEHZiX+1uSJvelVNu+Jvjd7Yk9zI8aSUe0eDpjCIYfNSuw5v/zF5In/6mU27478tXriLJvXjdSwPq1lCDTCmxjiCNav8GZYBVMwWKagX8kWjk9vCcMhYWhEFEw1+oV0wZjdPKY6Vn9EwmBDTYPwBoXCYPLGDQTJjkHQNQRJj0FQtmgs+C8wOHIIkh2DoDu5vD5Xfkz9hsTBWDyxhjDYUDqvLRYSY1JilSQGyyxXOt4QKJPX70NDQmI27gyxHcn9bH/5RFMNAUgoDI4afOAMHBiCdiDNj5woGAhgsCEYudSI1lBCRwoPL957slAoDDYEoPXb/ZVs3FE/y9072fDxsx4BMPVfGOpl1VY/y5++4EWM1Fm9LcCKpy8RpnchDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxhYNlXiP+XHXLRDM5thQVpyzIfS2YtLceVEkRmzalsgMArPhp258bA6b/LEb8LqPM930VNdvY/fhMmCxw+Of+4BTcPInBo2AAAAAElFTkSuQmCC)\",\n backgroundSize: \"contain\",\n width: 26,\n height: 30\n },\n fileName: {\n flex: \"1 0 auto\",\n marginLeft: 8,\n color: props => props.sentByMe ? theme.colors.messageSentByMe.textColor : theme.colors.messageSentByElse.textColor\n }\n}));\nfunction FileContent(props) {\n const classes = useStyles(props);\n const content = props.content;\n let downloading = false;\n let title = content.blobDeleted ? `\"${content.name}\" no longer available` : `Download \"${content.name}\"`;\n let name = content.blobDeleted ? `${content.name} no longer available` : content.name;\n return (react_1.default.createElement(\"a\", { className: classes.link, href: \"#\", role: \"button\", onClick: onClick, title: title },\n react_1.default.createElement(\"div\", { className: classes.icon }),\n react_1.default.createElement(\"div\", { className: classes.fileName }, name)));\n function onClick(e) {\n return __awaiter(this, void 0, void 0, function* () {\n if (content.blobDeleted) {\n return;\n }\n const anchor = findAnchor(e.target);\n const href = anchor.getAttribute(\"href\");\n // If the file is already downloading or the anchor is now pointing at the blob then return\n if (downloading || href && href.startsWith(\"blob\")) {\n return;\n }\n // Get the file from the IC\n downloading = true;\n const result = yield CachingDataService_1.default.getData(CachingDataService_1.DataSource.FileMessage, content.id, content.size, content.chunkSize);\n downloading = false;\n if (result.kind !== \"success\") {\n return;\n }\n // Point anchor at blob and re-click it to trigger download\n const blobUrl = blobFunctions_1.dataToBlobUrl(result.data, content.mimeType);\n anchor.setAttribute(\"href\", blobUrl);\n anchor.setAttribute(\"download\", content.name);\n anchor.click();\n // Reset anchor back to initial state and remove the blob from memory\n URL.revokeObjectURL(anchor.href);\n anchor.removeAttribute(\"download\");\n anchor.setAttribute(\"href\", \"#\");\n });\n }\n function findAnchor(node) {\n while (node != null && !(node instanceof HTMLAnchorElement)) {\n node = node.parentNode;\n }\n return node;\n }\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst IconButton_1 = __importDefault(require(\"@material-ui/core/IconButton\"));\nconst Send_1 = __importDefault(require(\"@material-ui/icons/Send\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst ClickAwayListener_1 = __importDefault(require(\"@material-ui/core/ClickAwayListener\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst sendMessage_1 = __importDefault(require(\"../../actions/chats/sendMessage\"));\nconst stateFunctions_1 = require(\"../../domain/stateFunctions\");\nconst AttachFile_1 = __importDefault(require(\"./AttachFile\"));\nconst SendCycles_1 = __importDefault(require(\"./SendCycles\"));\nconst MessageTextInput_1 = __importDefault(require(\"./MessageTextInput\"));\nconst CurrentUserTypingHandler_1 = __importDefault(require(\"../../domain/CurrentUserTypingHandler\"));\nconst smiley_svg_1 = __importDefault(require(\"../../icons/smiley.svg\"));\nconst dollar_svg_1 = __importDefault(require(\"../../icons/dollar.svg\"));\nconst EmojiPicker_1 = __importDefault(require(\"./EmojiPicker\"));\nconst CloseButton_1 = __importDefault(require(\"../shared/CloseButton\"));\nconst DraftMediaMessage_1 = __importDefault(require(\"./DraftMediaMessage\"));\nconst DraftFileMessage_1 = __importDefault(require(\"./DraftFileMessage\"));\nconst ReplyToMessagePanel_1 = __importDefault(require(\"./ReplyToMessagePanel\"));\nconst Alert_1 = require(\"../../components/modals/Alert\");\nexports.default = react_1.default.memo(Footer);\nconst useStyles = makeStyles_1.default((theme) => ({\n footer: {\n display: \"flex\",\n backgroundColor: theme.colors.footer.backgroundColor,\n flexDirection: \"column\",\n },\n container: {\n color: \"#9b9b9b\",\n padding: \"11px 16px 11px 10px\",\n display: \"flex\",\n alignItems: \"center\",\n },\n buttons: {\n display: \"flex\",\n alignItems: \"center\",\n },\n button: {\n borderRadius: \"50%\",\n height: 32,\n width: 32,\n padding: 0,\n marginRight: 6,\n cursor: \"pointer\",\n \"&:hover,:focus\": {\n backgroundColor: theme.colors.icon.hover,\n },\n \"& svg\": {\n verticalAlign: \"middle\",\n pointerEvents: \"none\",\n margin: 0,\n padding: 0,\n color: theme.colors.footer.iconColor,\n },\n },\n sendButton: {\n outline: 0,\n height: 25,\n border: 0,\n margin: 0,\n padding: 0,\n cursor: \"pointer\",\n alignSelf: \"center\",\n backgroundColor: \"transparent\",\n marginLeft: 20,\n color: \"#9b9b9b\",\n },\n}));\nvar MessagePanelState;\n(function (MessagePanelState) {\n MessagePanelState[MessagePanelState[\"Closed\"] = 0] = \"Closed\";\n MessagePanelState[MessagePanelState[\"EmojiPicker\"] = 1] = \"EmojiPicker\";\n MessagePanelState[MessagePanelState[\"SendCycles\"] = 2] = \"SendCycles\";\n MessagePanelState[MessagePanelState[\"SendFile\"] = 3] = \"SendFile\";\n})(MessagePanelState || (MessagePanelState = {}));\nfunction Footer() {\n const dispatch = react_redux_1.useDispatch();\n const [messagePanelState, setMessagePanel] = react_1.useState(MessagePanelState.Closed);\n const [textBoxText, setTextBoxText] = react_1.useState(\"\");\n const sendCyclesRef = react_1.useRef(null);\n const textBoxRef = react_1.useRef(null);\n const chat = react_redux_1.useSelector((state) => stateFunctions_1.getSelectedChat(state.chatsState));\n // Hold draft (media) message\n const draftMessageContentRef = react_1.useRef(null);\n const scrollBottomOverride = react_1.useRef();\n const them = react_redux_1.useSelector((state) => chat != null && chatFunctions.isDirectChat(chat)\n ? stateFunctions_1.getUserSummary(chat.them, state.usersState.userDictionary)\n : null);\n if (chat === null) {\n return react_1.default.createElement(\"div\", null);\n }\n react_1.useEffect(() => {\n if (messagePanelState !== MessagePanelState.Closed) {\n changeMessagePanel(MessagePanelState.Closed, true);\n }\n }, [chat.chatId]);\n function changeMessagePanel(state, retainScrollBottom) {\n if (state !== MessagePanelState.SendFile &&\n draftMessageContentRef.current) {\n if (draftMessageContentRef.current.kind === \"media\") {\n const blobUrl = draftMessageContentRef.current.blobUrl;\n setTimeout(() => {\n URL.revokeObjectURL(blobUrl);\n }, 100);\n }\n draftMessageContentRef.current = null;\n }\n if (state === MessagePanelState.Closed) {\n textBoxRef.current.onFocusBack();\n }\n if (retainScrollBottom) {\n const [_, scrollBottom] = chatFunctions.getScrollTopAndBottom();\n scrollBottomOverride.current = scrollBottom;\n }\n setMessagePanel(state);\n }\n react_1.useLayoutEffect(() => {\n if (scrollBottomOverride.current != null) {\n const messagesDiv = document.getElementById(\"messages\");\n messagesDiv.scrollTop =\n messagesDiv.scrollHeight -\n messagesDiv.clientHeight -\n scrollBottomOverride.current;\n scrollBottomOverride.current = undefined;\n }\n });\n function onSendMessage() {\n let draftMessage = null;\n switch (messagePanelState) {\n case MessagePanelState.SendCycles:\n if (sendCyclesRef.current) {\n draftMessage = {\n kind: \"cycles\",\n amount: sendCyclesRef.current.getCycles(),\n caption: textBoxText,\n };\n }\n break;\n case MessagePanelState.SendFile:\n if (draftMessageContentRef.current &&\n (draftMessageContentRef.current.kind === \"media\" ||\n draftMessageContentRef.current.kind === \"file\")) {\n draftMessage = Object.assign(Object.assign({}, draftMessageContentRef.current), { caption: textBoxText });\n }\n break;\n default:\n if (textBoxText) {\n draftMessage = { kind: \"text\", text: textBoxText };\n }\n break;\n }\n if (draftMessage) {\n switch (draftMessage.kind) {\n case \"text\":\n if (draftMessage.text.length > 5000) {\n Alert_1.alertDialog({\n title: \"Text too long\",\n text: \"Messages are limited to 5000 characters\",\n });\n return;\n }\n break;\n default:\n if (draftMessage.caption && draftMessage.caption.length > 500) {\n Alert_1.alertDialog({\n title: \"Text too long\",\n text: \"Captions are limited to 500 characters\",\n });\n return;\n }\n break;\n }\n dispatch(sendMessage_1.default(chat, draftMessage, chat.replyContext));\n changeMessagePanel(MessagePanelState.Closed, false);\n textBoxRef.current.clearText();\n }\n }\n function onFileAttached(content) {\n if (content.kind === \"file\") {\n dispatch(sendMessage_1.default(chat, content, chat.replyContext));\n textBoxRef.current.clearText();\n }\n else {\n draftMessageContentRef.current = content;\n changeMessagePanel(MessagePanelState.SendFile, true);\n }\n }\n function onFileValidationError(error, mimeType) {\n let title;\n let type;\n let size;\n // TODO: derive size text from constants\n if (mimeType.startsWith(\"image/\")) {\n title = \"Image too big\";\n type = \"images\";\n size = \"1 Mb\";\n }\n else if (mimeType.startsWith(\"video/\")) {\n title = \"Video too big\";\n type = \"videos\";\n size = \"5 Mb\";\n }\n else {\n title = \"File too big\";\n type = \"files\";\n size = \"1 Mb\";\n }\n let text = `You are limited to ${type} of size ${size}`;\n Alert_1.alertDialog({ title, text });\n }\n function onTextChanged(text) {\n setTextBoxText(text);\n if (chat && chatFunctions.isConfirmedChat(chat)) {\n CurrentUserTypingHandler_1.default.markTyping(chat.chatId);\n }\n }\n const classes = useStyles();\n let messagePanel = null;\n switch (messagePanelState) {\n case MessagePanelState.EmojiPicker:\n messagePanel = (react_1.default.createElement(EmojiPicker_1.default, { onEmojiSelected: textBoxRef.current.insertEmoji }));\n break;\n case MessagePanelState.SendCycles:\n if (chatFunctions.isDirectChat(chat)) {\n messagePanel = react_1.default.createElement(SendCycles_1.default, { ref: sendCyclesRef, recipient: them });\n }\n break;\n case MessagePanelState.SendFile:\n if (draftMessageContentRef.current) {\n if (draftMessageContentRef.current.kind === \"media\") {\n const draft = draftMessageContentRef.current;\n messagePanel = (react_1.default.createElement(DraftMediaMessage_1.default, { blobUrl: draft.blobUrl, width: draft.width, height: draft.height, mimeType: draft.mimeType }));\n }\n else if (draftMessageContentRef.current.kind === \"file\") {\n const draft = draftMessageContentRef.current;\n messagePanel = (react_1.default.createElement(DraftFileMessage_1.default, { name: draft.name, size: draft.data.length, mimeType: draft.mimeType }));\n }\n }\n break;\n }\n const closeButton = (react_1.default.createElement(CloseButton_1.default, { onClick: () => changeMessagePanel(MessagePanelState.Closed, true), className: classes.button }));\n return (react_1.default.createElement(ClickAwayListener_1.default, { onClickAway: () => { var _a; return (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.onFocusAway(); } },\n react_1.default.createElement(\"footer\", { className: classes.footer },\n react_1.default.createElement(ReplyToMessagePanel_1.default, null),\n messagePanel,\n react_1.default.createElement(\"div\", { className: classes.container },\n react_1.default.createElement(\"div\", { className: classes.buttons },\n messagePanelState !== MessagePanelState.EmojiPicker ? (react_1.default.createElement(IconButton_1.default, { onClick: (_) => changeMessagePanel(MessagePanelState.EmojiPicker, true), className: classes.button },\n react_1.default.createElement(smiley_svg_1.default, null))) : (closeButton),\n messagePanelState != MessagePanelState.SendFile ? (react_1.default.createElement(AttachFile_1.default, { onFileSelected: onFileAttached, onFileValidationError: onFileValidationError, className: classes.button })) : (closeButton),\n them && messagePanelState !== MessagePanelState.SendCycles ? (react_1.default.createElement(IconButton_1.default, { className: classes.button, onClick: (_) => changeMessagePanel(MessagePanelState.SendCycles, true) },\n react_1.default.createElement(dollar_svg_1.default, null))) : them ? (closeButton) : null),\n react_1.default.createElement(MessageTextInput_1.default, { ref: textBoxRef, placeholder: messagePanelState === MessagePanelState.Closed ||\n messagePanelState === MessagePanelState.EmojiPicker\n ? \"Type a message\"\n : \"Type a caption\", onEnterPressed: onSendMessage, onChange: onTextChanged }),\n react_1.default.createElement(\"button\", { onClick: onSendMessage, className: classes.sendButton },\n react_1.default.createElement(Send_1.default, null))))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst MoreVert_1 = __importDefault(require(\"@material-ui/icons/MoreVert\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst PopOverMenu_1 = __importDefault(require(\"../shared/PopOverMenu\"));\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst leaveGroup_1 = __importDefault(require(\"../../actions/chats/leaveGroup\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nconst markMessagesAsRead_1 = require(\"../../actions/chats/markMessagesAsRead\");\nconst toggleNotifications_1 = require(\"../../actions/chats/toggleNotifications\");\nexports.default = react_1.default.memo(GroupChatMenu);\nconst useStyles = makeStyles_1.default((theme) => ({\n menuIcon: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6)\n }\n}));\nfunction GroupChatMenu(props) {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n const menuItems = [];\n menuItems.push({ text: \"Participants\", action: () => dispatch(changeSidePanel_1.changeRightPanel(panels_1.RightPanelType.Participants)) });\n menuItems.push({ text: props.muted ? \"Unmute notifications\" : \"Mute notifications\", action: () => dispatch(toggleNotifications_1.toggleNotifications(props.chatId, !props.muted)) });\n menuItems.push({ text: \"Mark all as read\", action: () => dispatch(markMessagesAsRead_1.markAllMessagesAsReadLocally(props.chatId)), disable: !props.any_unread });\n menuItems.push({ text: \"Leave group\", action: () => {\n if (confirm(\"Are you sure you want to leave this group?\")) {\n dispatch(leaveGroup_1.default(props.chatId));\n }\n } });\n return react_1.default.createElement(PopOverMenu_1.default, { icon: react_1.default.createElement(MoreVert_1.default, { className: classes.menuIcon }), menuItems: menuItems, placement: \"bottom-end\" });\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Grid_1 = __importDefault(require(\"@material-ui/core/Grid\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst UserAvatar_1 = __importDefault(require(\"../shared/UserAvatar\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst stateFunctions = __importStar(require(\"../../domain/stateFunctions\"));\nconst stateFunctions_1 = require(\"../../domain/stateFunctions\");\nconst users_1 = require(\"../../domain/model/users\");\nconst ParticipantsTyping_1 = __importDefault(require(\"../shared/ParticipantsTyping\"));\nconst ThemTyping_1 = __importDefault(require(\"../shared/ThemTyping\"));\nconst BackButton_1 = __importDefault(require(\"../shared/BackButton\"));\nconst GroupChatMenu_1 = __importDefault(require(\"./GroupChatMenu\"));\nconst DefaultGroupChatIcon_1 = __importDefault(require(\"../shared/DefaultGroupChatIcon\"));\nconst LastOnline_1 = __importDefault(require(\"./LastOnline\"));\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst panels_1 = require(\"../../domain/model/panels\");\nconst DirectChatMenu_1 = __importDefault(require(\"./DirectChatMenu\"));\nexports.default = react_1.default.memo(Header);\nconst useStyles = makeStyles_1.default((theme) => ({\n titles: {\n color: theme.colors.header.primaryTextColor,\n lineHeight: \"normal\",\n paddingLeft: 18\n },\n subtitle: {\n color: theme.colors.header.secondaryTextColor,\n width: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\"\n },\n closeButton: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6),\n marginLeft: -6,\n marginRight: 6,\n }\n}));\nfunction Header() {\n const dispatch = react_redux_1.useDispatch();\n const me = react_redux_1.useSelector((state) => state.usersState.me);\n const userDictionary = react_redux_1.useSelector((state) => state.usersState.userDictionary);\n const chat = react_redux_1.useSelector((state) => stateFunctions_1.getSelectedChat(state.chatsState));\n const leftPanelState = react_redux_1.useSelector((state) => state.appState.panelState.leftPanel);\n if (chat === null) {\n return react_1.default.createElement(\"div\", null);\n }\n let icon;\n let chatName = \"\";\n let subTitle = null;\n let chatMenu = null;\n const any_unread = chatFunctions.getUnreadMessageCount(chat) > 0;\n if (chatFunctions.isDirectChat(chat)) {\n let muted = false;\n if (chatFunctions.isConfirmedChat(chat)) {\n muted = chat.muted;\n }\n chatMenu = react_1.default.createElement(DirectChatMenu_1.default, { chatId: chat.chatId, userId: chat.them, muted: muted, any_unread: any_unread });\n let imageId = null;\n let isOnline = false;\n if (userDictionary.hasOwnProperty(chat.them)) {\n const userSummary = userDictionary[chat.them];\n imageId = userSummary.imageId;\n chatName = userSummary.username;\n isOnline = users_1.isUserOnline(userSummary);\n subTitle = chatFunctions.isConfirmedChat(chat) && chat.themTyping\n ? react_1.default.createElement(ThemTyping_1.default, { variant: \"caption\" })\n : react_1.default.createElement(LastOnline_1.default, { variant: \"caption\", minutesSinceLastOnline: userSummary.minutesSinceLastOnline });\n }\n icon = react_1.default.createElement(UserAvatar_1.default, { userId: chat.them, imageId: imageId, isUserOnline: isOnline, size: \"sm\" });\n }\n else {\n icon = react_1.default.createElement(DefaultGroupChatIcon_1.default, { size: \"sm\" });\n chatName = chat.subject;\n if (chatFunctions.isConfirmedChat(chat) && me) {\n chatMenu = react_1.default.createElement(GroupChatMenu_1.default, { chatId: chat.chatId, muted: chat.muted, any_unread: any_unread });\n if (chat.participantsTyping.length) {\n const usernames = stateFunctions\n .getUsers(chat.participantsTyping, userDictionary)\n .map(u => u.username);\n subTitle = react_1.default.createElement(ParticipantsTyping_1.default, { usernames: usernames });\n }\n else {\n const participants = stateFunctions.getUsers(chat.participants, userDictionary);\n let text = \"\";\n if (participants.length > 5) {\n const onlineCount = participants.filter(p => users_1.isUserOnline(p)).length;\n text = `${chat.participants.length} members (${onlineCount + 1} online) `;\n }\n else {\n const sortedParticipants = participants\n .map(users_1.fromUserSummary)\n .sort(users_1.compareUsersOnlineFirst);\n text = sortedParticipants\n .map(u => u.username)\n .concat([\"You\"])\n .join(\", \");\n }\n subTitle =\n react_1.default.createElement(Typography_1.default, { variant: \"caption\" },\n react_1.default.createElement(\"span\", { className: \"text-link\", onClick: () => (dispatch(changeSidePanel_1.changeRightPanel(panels_1.RightPanelType.Participants))) }, text));\n }\n }\n }\n const classes = useStyles();\n return (react_1.default.createElement(Grid_1.default, { component: \"header\", flexWrap: \"nowrap\", container: true, alignItems: \"center\" },\n leftPanelState === panels_1.LeftPanelType.None ?\n react_1.default.createElement(Grid_1.default, { item: true },\n react_1.default.createElement(BackButton_1.default, { onClick: () => history.back(), className: classes.closeButton })) : null,\n react_1.default.createElement(Grid_1.default, { item: true }, icon),\n react_1.default.createElement(Grid_1.default, { item: true, flexGrow: 1, overflow: \"hidden\" },\n react_1.default.createElement(Grid_1.default, { container: true, direction: \"column\", className: \"header-titles \" + classes.titles },\n react_1.default.createElement(Grid_1.default, { item: true },\n react_1.default.createElement(Typography_1.default, { variant: \"body1\" }, chatName)),\n react_1.default.createElement(Grid_1.default, { item: true, className: classes.subtitle, whiteSpace: \"nowrap\" }, subTitle))),\n chatMenu\n ? react_1.default.createElement(Grid_1.default, { item: true }, chatMenu)\n : null));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nexports.default = react_1.default.memo(LastOnline);\nfunction LastOnline(props) {\n return react_1.default.createElement(Typography_1.default, { variant: props.variant }, formatLastOnlineDate(props.minutesSinceLastOnline));\n}\nfunction formatLastOnlineDate(minutesSinceLastOnline) {\n if (isNaN(minutesSinceLastOnline)) {\n return \"\";\n }\n if (minutesSinceLastOnline < 2) {\n return \"Online now\";\n }\n let durationText;\n if (minutesSinceLastOnline < 60) {\n durationText = `${minutesSinceLastOnline} minutes`;\n }\n else {\n const hoursSinceLastOnline = Math.floor(minutesSinceLastOnline / 60);\n if (hoursSinceLastOnline === 1) {\n durationText = \"1 hour\";\n }\n else if (hoursSinceLastOnline < 24) {\n durationText = `${hoursSinceLastOnline} hours`;\n }\n else {\n const daysSinceLastOnline = Math.floor(hoursSinceLastOnline / 24);\n durationText = daysSinceLastOnline === 1\n ? \"1 day\"\n : `${daysSinceLastOnline} days`;\n }\n }\n return `Last online ${durationText} ago`;\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst MessagesList_1 = __importDefault(require(\"./MessagesList\"));\nconst Header_1 = __importDefault(require(\"./Header\"));\nconst Footer_1 = __importDefault(require(\"./Footer\"));\nexports.default = react_1.default.memo(MainPanel);\nfunction MainPanel() {\n const showMainWindow = react_redux_1.useSelector((state) => state.chatsState.selectedChatIndex !== null);\n if (!showMainWindow) {\n return react_1.default.createElement(\"div\", null);\n }\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Header_1.default, null),\n react_1.default.createElement(MessagesList_1.default, null),\n react_1.default.createElement(Footer_1.default, null)));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst CachingDataService_1 = __importStar(require(\"../../services/data/CachingDataService\"));\nconst blobFunctions_1 = require(\"../../utils/blobFunctions\");\nconst Image_1 = __importDefault(require(\"../shared/Image\"));\nconst Video_1 = __importDefault(require(\"../shared/Video\"));\nexports.default = react_1.default.memo(MediaContent);\nfunction MediaContent(props) {\n const content = props.content;\n const ownedBlobUrl = props.ownsBlob ? content.blobUrl : null;\n const unmounted = react_1.useRef(false);\n const loaded = react_1.useRef(false);\n const src = react_1.useRef(ownedBlobUrl !== null && ownedBlobUrl !== void 0 ? ownedBlobUrl : content.thumbnailData);\n // https://reactjs.org/docs/hooks-faq.html#is-there-something-like-forceupdate\n const [_, forceUpdate] = react_1.useReducer(x => x + 1, 0);\n react_1.useLayoutEffect(() => {\n return () => {\n unmounted.current = true;\n };\n }, []);\n react_1.useEffect(() => {\n function fetchMedia() {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield CachingDataService_1.default.getData(CachingDataService_1.DataSource.MediaMessage, content.id, content.size, content.chunkSize);\n if (response.kind !== \"success\") {\n console.log(response);\n return;\n }\n if (!unmounted.current) {\n src.current = blobFunctions_1.dataToBlobUrl(response.data, content.mimeType);\n loaded.current = true;\n forceUpdate();\n }\n });\n }\n if (!ownedBlobUrl && !props.content.blobDeleted) {\n fetchMedia();\n }\n return () => {\n // Dispose of blob\n if (loaded.current) {\n setTimeout(() => {\n URL.revokeObjectURL(src.current);\n }, 100);\n }\n };\n }, []);\n let contentElement;\n if (content.mimeType.startsWith(\"image/\") || (!loaded.current && !ownedBlobUrl)) {\n contentElement = react_1.default.createElement(Image_1.default, { key: props.content.id, src: src.current, className: props.className });\n }\n else if (content.mimeType.startsWith(\"video/\")) {\n contentElement = react_1.default.createElement(Video_1.default, { key: props.content.id, src: src.current, className: props.className });\n }\n return (react_1.default.createElement(react_1.default.Fragment, null, contentElement));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MessageGroupPosition = void 0;\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst ExpandMore_1 = __importDefault(require(\"@material-ui/icons/ExpandMore\"));\nconst gotoUser_1 = __importDefault(require(\"../../actions/chats/gotoUser\"));\nconst gotoChat_1 = require(\"../../actions/chats/gotoChat\");\nconst deselectMessage_1 = __importDefault(require(\"../../actions/chats/deselectMessage\"));\nconst TextContent_1 = __importDefault(require(\"../shared/TextContent\"));\nconst MediaContent_1 = __importDefault(require(\"./MediaContent\"));\nconst MessageTimeAndTicks_1 = __importDefault(require(\"./MessageTimeAndTicks\"));\nconst fileSize_1 = __importDefault(require(\"../../formatters/fileSize\"));\nconst PopOverMenu_1 = __importDefault(require(\"../shared/PopOverMenu\"));\nconst replyToMessage_1 = require(\"../../actions/chats/replyToMessage\");\nconst MessageReplyPanel_1 = __importDefault(require(\"./MessageReplyPanel\"));\nconst FileContent_1 = __importDefault(require(\"./FileContent\"));\nconst CyclesContent_1 = __importDefault(require(\"./CyclesContent\"));\nexports.default = react_1.default.memo(Message);\nconst useStyles = makeStyles_1.default((theme) => ({\n message: {\n maxWidth: 500,\n [theme.breakpoints.down('sm')]: {\n maxWidth: \"87vw\"\n },\n padding: 3,\n borderRadius: 16,\n margin: 0,\n marginTop: 14,\n position: \"relative\",\n overflowWrap: \"anywhere\",\n overflow: \"hidden\",\n \"&:hover .pop-over-menu-icon\": {\n visibility: \"visible\"\n },\n \"&:hover $menu\": {\n opacity: \"0.8\",\n color: \"white\",\n backgroundColor: \"transparent\"\n },\n },\n sentByMe: {\n alignSelf: \"flex-end\",\n color: theme.colors.messageSentByMe.textColor,\n backgroundColor: props => colorManipulator_1.darken(theme.colors.messageSentByMe.backgroundColor, props.selectEffect ? 0.3 : 0),\n \"&$text:hover $menu\": {\n color: theme.colors.messageSentByMe.textColor,\n backgroundColor: theme.colors.messageSentByMe.backgroundColor,\n },\n \"&$file:hover $menu\": {\n color: theme.colors.messageSentByMe.textColor\n }\n },\n sentByElse: {\n alignSelf: \"flex-start\",\n color: theme.colors.messageSentByElse.textColor,\n backgroundColor: props => colorManipulator_1.darken(theme.colors.messageSentByElse.backgroundColor, props.selectEffect ? 0.3 : 0),\n \"& $caption, &$text:hover $menu\": {\n color: theme.colors.messageSentByElse.textColor,\n backgroundColor: theme.colors.messageSentByElse.backgroundColor\n },\n \"&$file:hover $menu\": {\n color: theme.colors.messageSentByElse.textColor\n }\n },\n unread: {\n filter: `brightness(${theme.colors.messageSentByElse.unreadMessageBrightness})`\n },\n mergeWithNext: {\n \"&$sentByMe\": {\n borderBottomRightRadius: 4\n },\n \"&$sentByElse\": {\n borderBottomLeftRadius: 4\n }\n },\n mergeWithPrevious: {\n marginTop: 2,\n \"&$sentByMe\": {\n borderTopRightRadius: 4\n },\n \"&$sentByElse\": {\n borderTopLeftRadius: 4\n }\n },\n text: {},\n file: {},\n media: {\n minWidth: 330,\n [theme.breakpoints.down('sm')]: {\n minWidth: \"60vw\"\n },\n \"& $participant\": {\n position: \"absolute\",\n display: \"block\",\n padding: \"4px 7px 3px 11px\",\n top: 0,\n left: 0,\n zIndex: 50,\n marginLeft: 0,\n backgroundColor: \"white\",\n textAlign: \"center\",\n borderRadius: \"16px 0 2px 0\",\n lineHeight: \"13px\",\n opacity: 0.6\n }\n },\n mediaUncaptioned: {\n backgroundColor: \"transparent !important\",\n padding: 0,\n \"& $timeAndTicks\": {\n position: \"absolute\",\n right: 10,\n bottom: 2\n }\n },\n timeAndTicks: {},\n participant: {\n fontSize: 13,\n marginLeft: 6,\n fontWeight: \"bolder\",\n display: \"block\",\n textDecoration: \"none\",\n \"&:hover\": {\n textDecoration: \"underline\"\n }\n },\n caption: {\n overflow: \"auto\",\n padding: \"6px 11px 4px 10px\",\n color: theme.colors.messageSentByMe.textColor,\n backgroundColor: theme.colors.messageSentByMe.backgroundColor,\n borderBottomLeftRadius: \"inherit\",\n borderBottomRightRadius: \"inherit\"\n },\n textContainer: {\n padding: \"3px 6px 0px 6px\",\n },\n fileSize: {\n fontSize: 11,\n color: props => colorManipulator_1.alpha(props.sentByMe ? theme.colors.messageSentByMe.textColor : theme.colors.messageSentByElse.textColor, 0.6)\n },\n menu: {\n position: \"absolute\",\n padding: 6,\n top: -5,\n right: 0,\n visibility: \"hidden\",\n zIndex: 3,\n },\n contentContainer: {\n backgroundColor: props => props.sentByMe\n ? theme.colors.messageSentByMe.highlightedContentBackgroundColor\n : theme.colors.messageSentByElse.highlightedContentBackgroundColor\n },\n mediaNoCaption: {\n position: \"relative\",\n borderRadius: \"inherit\"\n },\n topPanel: {\n borderRadius: props => props.contentBorderRadius\n },\n secondPanel: {\n borderRadius: 6,\n marginTop: 3\n },\n mediaContent: {\n borderRadius: \"inherit\"\n },\n shadow: {\n position: \"absolute\",\n bottom: 0,\n zIndex: 2,\n width: \"100%\",\n minWidth: 330,\n height: 28,\n background: \"linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.3))\",\n borderBottomLeftRadius: \"inherit\",\n borderBottomRightRadius: \"inherit\"\n }\n}));\nfunction Message(props) {\n const dispatch = react_redux_1.useDispatch();\n const content = props.content;\n react_1.useEffect(() => {\n if (props.selectEffect && props.chatId) {\n const chatId = props.chatId;\n setTimeout(() => {\n dispatch(deselectMessage_1.default(chatId));\n }, 1000);\n }\n }, [props.selectEffect]);\n // Based on the position of this message within a \"group\" of messages derive these properties to be used in styling\n const mergeWithNext = props.groupPosition === MessageGroupPosition.Top || props.groupPosition === MessageGroupPosition.Middle;\n const mergeWithPrevious = props.groupPosition === MessageGroupPosition.Middle || props.groupPosition === MessageGroupPosition.Bottom;\n // Calculate the border radius of the top-most message panel\n let borderRadius = [6, 6, 6, 6];\n if (!props.isGroupChat || props.sentByMe || content.kind === \"media\") {\n borderRadius[0] = mergeWithPrevious && !props.sentByMe ? 2 : 13;\n borderRadius[1] = mergeWithPrevious && props.sentByMe ? 2 : 13;\n }\n const borderRadiusStr = borderRadius.map(e => e + \"px\").join(\" \");\n // Pass some props into useStyles to configure the JSS\n const styleProps = {\n sentByMe: props.sentByMe,\n contentBorderRadius: borderRadiusStr,\n selectEffect: props.selectEffect\n };\n const classes = useStyles(styleProps);\n // Build up the combination of css classes applied to the container based on various factors\n let className = `${classes.message} ${(props.sentByMe ? classes.sentByMe : classes.sentByElse)}`;\n if (!props.readByMe) {\n className += \" unread \" + classes.unread;\n }\n if (mergeWithNext) {\n className += \" \" + classes.mergeWithNext;\n }\n if (mergeWithPrevious) {\n className += \" \" + classes.mergeWithPrevious;\n }\n // Is this message just standalone media\n const isMediaNoCaption = content.kind === \"media\" && !content.caption && !props.repliesToContent;\n // Dynamically build the child components that comprise the message\n const children = [];\n {\n // 1. Add the drop down menu\n const buttons = [];\n // if (props.sentByMe) {\n // buttons.push({ text: \"Info\", action: () => {} });\n // }\n if (props.confirmed && props.chatId && props.messageId) {\n const replyContext = {\n chatId: props.chatId,\n messageId: props.messageId,\n content: props.content,\n userId: props.userId\n };\n buttons.push({ text: \"Reply\", action: () => dispatch(replyToMessage_1.selectReplyToMessage(replyContext)) });\n if (props.sender) {\n const sender = props.sender;\n buttons.push({ text: \"Reply privately\", action: () => dispatch(replyToMessage_1.selectReplyPrivatelyToMessage(replyContext, sender)) });\n }\n // buttons.push({ text: \"Forward\", action: () => {} });\n // buttons.push({ text: \"Star\", action: () => {} });\n }\n // buttons.push({ text: \"Delete\", action: () => {} });\n children.push(react_1.default.createElement(PopOverMenu_1.default, { key: \"menu\", icon: react_1.default.createElement(ExpandMore_1.default, null), menuItems: buttons, placement: \"bottom-end\", className: classes.menu + \" pop-over-menu-icon\" }));\n // 2. Conditionally add the sender link \n if (props.sender && (props.groupPosition == MessageGroupPosition.None || props.groupPosition == MessageGroupPosition.Top)) {\n const sender = props.sender;\n children.push(react_1.default.createElement(\"a\", { key: \"sender\", className: classes.participant, href: \"#\", role: \"button\", title: `Select chat with \"${sender.username}\"`, onClick: _ => dispatch(gotoUser_1.default(sender)) }, sender.username));\n }\n // 3. Conditionally add the reply to message panel\n if (props.repliesToContent) {\n const className = classes.contentContainer + \" \" + classes.topPanel;\n children.push(react_1.default.createElement(MessageReplyPanel_1.default, { key: \"replyPanel\", repliesToChatId: props.repliesToChatId, isPrivateReply: props.chatId !== props.repliesToChatId, content: props.repliesToContent, repliesToMyMessage: props.repliesToMyMessage, sentByMe: props.sentByMe, isGroupChat: props.isGroupChat, theirUsername: props.theirUsername, repliesToUsername: props.repliesToUsername, className: className, onClick: () => dispatch(gotoChat_1.gotoChatById(props.repliesToChatId, props.repliesToMessageId)) }));\n }\n // 4. Add any message type specific content\n {\n let contentComponent;\n let shadow;\n switch (content.kind) {\n case \"file\":\n contentComponent = react_1.default.createElement(FileContent_1.default, { content: content, sentByMe: props.sentByMe });\n break;\n case \"cycles\":\n contentComponent = react_1.default.createElement(CyclesContent_1.default, { content: content, sentByMe: props.sentByMe, theirUsername: props.theirUsername });\n break;\n case \"media\":\n contentComponent = react_1.default.createElement(MediaContent_1.default, { content: content, ownsBlob: true, className: classes.mediaContent });\n // Add a shadow effect to bottom of media so the \"time and ticks\" can be seen\n if (!content.caption) {\n shadow = react_1.default.createElement(\"div\", { key: \"shadow\", className: classes.shadow });\n }\n break;\n }\n if (contentComponent) {\n const className = classes.contentContainer + \" \" + (props.repliesToContent ? classes.secondPanel : classes.topPanel);\n children.push(react_1.default.createElement(\"div\", { key: \"content\", className: isMediaNoCaption ? classes.mediaNoCaption : className }, contentComponent));\n if (shadow) {\n children.push(shadow);\n }\n }\n }\n // 5. If this message is standalone media then render \"time and ticks\" directly otherwise wrap the text + \"time and ticks\" together\n {\n const messageTimeAndTicks = react_1.default.createElement(MessageTimeAndTicks_1.default, { key: \"timeAndTicks\", sentByMe: props.sentByMe, confirmed: props.confirmed, read: props.readByThem, date: props.date, isOnMedia: isMediaNoCaption, className: classes.timeAndTicks });\n if (isMediaNoCaption) {\n children.push(messageTimeAndTicks);\n }\n else {\n // 6. Build the text component\n let text;\n let fileText;\n switch (content.kind) {\n case \"media\":\n text = content.caption;\n break;\n case \"file\":\n fileText = content.mimeType.toUpperCase() + \"-\" + fileSize_1.default(content.size);\n break;\n case \"cycles\":\n text = content.caption;\n fileText = content.caption ? null : \"CYCLES TRANSFER\";\n break;\n default:\n text = content.text;\n break;\n }\n let textComponent = null;\n if (text) {\n textComponent = react_1.default.createElement(TextContent_1.default, { text: text, variant: \"body1\", plainText: false, sentByMe: props.sentByMe });\n }\n else if (fileText) {\n textComponent = react_1.default.createElement(\"span\", { className: classes.fileSize }, fileText);\n }\n children.push(react_1.default.createElement(\"div\", { key: \"text\", className: classes.textContainer },\n textComponent,\n messageTimeAndTicks));\n }\n }\n }\n // Build the class and style of the container\n switch (content.kind) {\n case \"media\":\n className += \" \" + classes.media;\n if (!content.caption) {\n className += \" \" + classes.mediaUncaptioned;\n }\n break;\n case \"file\":\n case \"cycles\":\n className += \" \" + classes.file;\n break;\n default:\n className += \" \" + classes.text;\n break;\n }\n return (react_1.default.createElement(\"div\", { id: props.clientMessageId, \"data-message-id\": props.messageId, className: className }, children));\n}\nvar MessageGroupPosition;\n(function (MessageGroupPosition) {\n MessageGroupPosition[MessageGroupPosition[\"None\"] = 0] = \"None\";\n MessageGroupPosition[MessageGroupPosition[\"Top\"] = 1] = \"Top\";\n MessageGroupPosition[MessageGroupPosition[\"Middle\"] = 2] = \"Middle\";\n MessageGroupPosition[MessageGroupPosition[\"Bottom\"] = 3] = \"Bottom\";\n})(MessageGroupPosition = exports.MessageGroupPosition || (exports.MessageGroupPosition = {}));\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst Photo_1 = __importDefault(require(\"@material-ui/icons/Photo\"));\nconst Attachment_1 = __importDefault(require(\"@material-ui/icons/Attachment\"));\nconst stateFunctions_1 = require(\"../../domain/stateFunctions\");\nconst messageFunctions_1 = require(\"../../domain/messageFunctions\");\nconst MediaContent_1 = __importDefault(require(\"./MediaContent\"));\nconst CyclesContent_1 = require(\"./CyclesContent\");\nconst useStyles = makeStyles_1.default((theme) => ({\n container: {\n cursor: props => props.showPointer ? \"pointer\" : \"default\",\n overflow: \"hidden\",\n borderLeftColor: props => colorManipulator_1.lighten(theme.colors.green.main, props.sentByMe ? 0.4 : 0.0),\n borderLeftWidth: 4,\n borderLeftStyle: \"solid\",\n fontSize: 14,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\"\n },\n textContainer: {\n padding: \"4px 8px\",\n minWidth: 120\n },\n text: {\n maxHeight: 72,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n wordWrap: \"break-word\",\n whiteSpace: \"pre-wrap\",\n display: \"-webkit-box\",\n \"-webkit-line-clamp\": 2,\n \"-webkit-box-orient\": \"vertical\"\n },\n by: {\n color: props => colorManipulator_1.lighten(theme.colors.green.main, props.sentByMe ? 0.4 : 0.0)\n },\n mediaContent: {\n borderTopRightRadius: \"inherit\",\n borderBottomRightRadius: \"inherit\",\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n maxWidth: 120,\n maxHeight: 72,\n height: \"auto\",\n width: \"auto\"\n },\n cyclesIcon: {\n marginLeft: 12,\n marginRight: 12,\n fontSize: 50\n },\n icon: {\n verticalAlign: \"top\",\n display: \"inline-block\",\n width: 20,\n height: 20,\n marginRight: 3\n }\n}));\nexports.default = react_1.default.memo(MessageReplyPanel);\nfunction MessageReplyPanel(props) {\n var _a;\n let styleProps = {\n sentByMe: props.sentByMe,\n showPointer: props.onClick != undefined\n };\n let chatSubject;\n if (props.isPrivateReply) {\n chatSubject = react_redux_1.useSelector((state) => stateFunctions_1.getChatSubject(state.chatsState, props.repliesToChatId));\n }\n const classes = useStyles(styleProps);\n let text = messageFunctions_1.getContentAsText(props.content);\n let by = props.repliesToMyMessage ? \"You\" : (_a = props.repliesToUsername) !== null && _a !== void 0 ? _a : \"Unknown\";\n if (chatSubject) {\n by += \" - \" + chatSubject;\n }\n const className = props.className + \" \" + classes.container;\n let rightContent;\n let icon;\n if (props.content.kind === \"media\") {\n rightContent = react_1.default.createElement(MediaContent_1.default, { content: props.content, className: classes.mediaContent, ownsBlob: false });\n icon = react_1.default.createElement(Photo_1.default, { className: classes.icon });\n }\n else if (props.content.kind === \"cycles\") {\n rightContent = react_1.default.createElement(\"div\", { className: classes.cyclesIcon }, \"\\uD83C\\uDF89\");\n text = CyclesContent_1.formatCyclesText(props.content.amount, props.repliesToMyMessage, props.theirUsername);\n }\n else if (props.content.kind === \"file\") {\n icon = react_1.default.createElement(Attachment_1.default, { className: classes.icon });\n }\n return (react_1.default.createElement(\"div\", { className: className, onClick: props.onClick },\n react_1.default.createElement(\"div\", { className: classes.textContainer },\n react_1.default.createElement(\"div\", { className: classes.by }, by),\n react_1.default.createElement(\"div\", { className: classes.text },\n icon,\n text)),\n rightContent));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst useStyles = makeStyles_1.default((theme) => ({\n inputContainer: {\n flex: \"1 1 auto\",\n display: \"flex\",\n borderRadius: 25,\n padding: \"8px 15px 10px 15px\",\n backgroundColor: theme.colors.textBox.backgroundColor,\n marginLeft: 6\n },\n input: {\n border: 0,\n outline: \"none\",\n flex: \"1 1 auto\",\n fontSize: 16,\n lineHeight: \"20px\",\n fontWeight: 400,\n color: theme.colors.textBox.textColor,\n whiteSpace: \"pre-wrap\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n zIndex: 1,\n minHeight: 20,\n maxHeight: 100,\n userSelect: \"text\",\n overflowWrap: \"anywhere\"\n }\n}));\nconst MessageTextInput = react_1.forwardRef((props, ref) => {\n const classes = useStyles();\n // The saved textbox range selection - used to restore the selection when inserting emojis from the picker\n const savedRangeRef = react_1.useRef(null);\n const textBoxRef = react_1.useRef(null);\n react_1.useImperativeHandle(ref, () => ({\n insertEmoji,\n clearText,\n onFocusAway,\n onFocusBack\n }));\n function insertEmoji(nativeEmoji) {\n var _a, _b;\n // Focus on the message box and re-apply any saved range selection\n restoreSelection();\n // // Markup the text so it will appear correctly in the textbox and manually insert it\n document.execCommand(\"insertText\", false, nativeEmoji);\n // Save the new selection range\n saveSelection();\n // Notify parent\n props.onChange((_b = (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : \"\");\n }\n function onFocusAway() {\n clearSelection();\n }\n function onFocusBack() {\n restoreSelection();\n }\n function clearText() {\n var _a, _b;\n const textBox = textBoxRef.current;\n textBox.innerHTML = \"\";\n textBox.focus();\n props.onChange((_b = (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : \"\");\n }\n function handleInput(e) {\n var _a, _b;\n if (e.target.innerHTML.trim() == \"
\") {\n e.target.innerHTML = \"\";\n }\n props.onChange((_b = (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : \"\");\n }\n function pastePlainText(e) {\n var _a, _b;\n // Cancel the paste event\n e.preventDefault();\n // Get plain text representation of clipboard\n const text = e.clipboardData.getData('text/plain');\n // Manually insert text\n document.execCommand(\"insertText\", false, text);\n // Notify parent\n props.onChange((_b = (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.textContent) !== null && _b !== void 0 ? _b : \"\");\n }\n function handleKeyPress(e) {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n props.onEnterPressed();\n }\n }\n function saveSelection() {\n var _a, _b;\n // Save the textbox range selection so it can be restored when the textbox next gets focus\n savedRangeRef.current = (_b = (_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.getRangeAt(0)) !== null && _b !== void 0 ? _b : null;\n }\n function restoreSelection() {\n // Set the focus on to the textbox\n const textBox = textBoxRef.current;\n textBox.focus();\n // Set the window selection to the last saved range. If there is no existing \n // saved range then initialise one at the end of the text box.\n if (!savedRangeRef.current) {\n const range = new Range();\n range.selectNodeContents(textBox);\n range.collapse(false);\n savedRangeRef.current = range;\n }\n const selection = window.getSelection();\n selection.removeAllRanges();\n selection.addRange(savedRangeRef.current);\n }\n function clearSelection() {\n savedRangeRef.current = null;\n }\n return (react_1.default.createElement(\"div\", { className: classes.inputContainer },\n react_1.default.createElement(\"div\", { id: \"textbox\", ref: textBoxRef, className: classes.input, placeholder: props.placeholder, onInput: handleInput, onPaste: pastePlainText, onKeyDown: handleKeyPress, onBlur: saveSelection, contentEditable: true, spellCheck: \"true\" })));\n});\nexports.default = react_1.default.memo(MessageTextInput);\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst tick_svg_1 = __importDefault(require(\"../../icons/tick.svg\"));\nconst doubleTick_svg_1 = __importDefault(require(\"../../icons/doubleTick.svg\"));\nconst date_1 = require(\"../../formatters/date\");\nMessageTimeAndTicks.defaultProps = {\n className: null\n};\nexports.default = react_1.default.memo(MessageTimeAndTicks);\nconst useStyles = makeStyles_1.default((theme) => ({\n container: {\n position: \"relative\",\n float: \"right\",\n zIndex: 2,\n \"&$sentByThem $tick\": {\n color: colorManipulator_1.alpha(theme.colors.messageSentByElse.textColor, 0.8)\n },\n \"&$sentByThem $date\": {\n color: colorManipulator_1.alpha(theme.colors.messageSentByElse.textColor, 0.6)\n }\n },\n sentByThem: {\n \"& $date\": {\n marginRight: 0\n }\n },\n onMedia: {\n \"& $date, $tick\": {\n color: \"white !important\",\n }\n },\n date: {\n color: colorManipulator_1.alpha(theme.colors.messageSentByMe.textColor, 0.6),\n margin: \"9px 15px 0 10px\"\n },\n tick: {\n position: \"absolute\",\n right: -3,\n bottom: 0,\n color: colorManipulator_1.alpha(theme.colors.messageSentByMe.textColor, 0.8),\n height: 15,\n width: 15,\n zIndex: 55\n }\n}));\nfunction MessageTimeAndTicks(props) {\n const classes = useStyles();\n let tick;\n if (props.sentByMe && props.confirmed) {\n if (props.read) {\n tick = react_1.default.createElement(doubleTick_svg_1.default, { className: classes.tick });\n }\n else {\n tick = react_1.default.createElement(tick_svg_1.default, { className: classes.tick });\n }\n }\n let containerClass = classes.container;\n if (!props.sentByMe) {\n containerClass += \" \" + classes.sentByThem;\n }\n if (props.isOnMedia) {\n containerClass += \" \" + classes.onMedia;\n }\n if (props.className) {\n containerClass += \" \" + props.className;\n }\n return (react_1.default.createElement(\"div\", { className: containerClass },\n react_1.default.createElement(Typography_1.default, { className: classes.date, component: \"div\", variant: \"smallest\" }, date_1.toShortTimeString(props.date)),\n tick));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst DayChangeMarker_1 = __importDefault(require(\"./DayChangeMarker\"));\nconst Message_1 = __importStar(require(\"./Message\"));\nconst dateFunctions_1 = require(\"../../utils/dateFunctions\");\nconst MERGE_MESSAGES_SENT_BY_SAME_USER_WITHIN_MILLIS = 60 * 1000; // 1 minute\nexports.default = react_1.default.memo(MessagesFromSingleDay);\nconst useStyles = makeStyles_1.default((theme) => ({\n dayContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n flexShrink: 0,\n paddingBottom: 14\n }\n}));\nfunction MessagesFromSingleDay(props) {\n var _a, _b, _c, _d, _e, _f, _g;\n const classes = useStyles();\n const theirUsername = (props.theirUserId && props.usersDictionary.hasOwnProperty(props.theirUserId))\n ? props.usersDictionary[props.theirUserId].username\n : null;\n // Determine which messages should be grouped with the previous message\n const messagesToGroup = [];\n let prevMessageSender = null;\n let lastMessageDate = null;\n for (const message of props.messages) {\n const senderUserId = message.kind === \"unconfirmed\" ? props.myUserId : message.sender;\n const groupWithPrevious = lastMessageDate !== null &&\n senderUserId === prevMessageSender &&\n message.date.getTime() - lastMessageDate.getTime() < MERGE_MESSAGES_SENT_BY_SAME_USER_WITHIN_MILLIS;\n messagesToGroup.push(groupWithPrevious);\n lastMessageDate = message.date;\n prevMessageSender = senderUserId;\n }\n const children = [];\n const startOfDay = dateFunctions_1.getStartOfDay(props.messages[0].date);\n children.push(react_1.default.createElement(DayChangeMarker_1.default, { key: startOfDay.toDateString(), date: startOfDay }));\n // Loop through messages and add components\n for (let i = 0; i < props.messages.length; i++) {\n const message = props.messages[i];\n let sentByMe;\n let senderUserId;\n let senderDetails = null;\n let readByMe = true;\n if (message.kind === \"unconfirmed\") {\n sentByMe = true;\n senderUserId = props.myUserId;\n }\n else {\n sentByMe = message.sender === props.myUserId;\n senderUserId = message.sender;\n readByMe = !props.unreadMessageDetector.isUnread(message);\n if (props.isGroupChat && !sentByMe) {\n senderDetails = props.usersDictionary.hasOwnProperty(message.sender)\n ? props.usersDictionary[message.sender]\n : {\n userId: message.sender,\n username: \"Unknown\",\n version: 0\n };\n }\n }\n const readByThem = !props.unreadMessageDetector.isUnreadByThem(message);\n const repliesToUserId = (_a = message.repliesTo) === null || _a === void 0 ? void 0 : _a.userId;\n const repliesToContent = (_c = (_b = message.repliesTo) === null || _b === void 0 ? void 0 : _b.content) !== null && _c !== void 0 ? _c : null;\n const repliesToMyMessage = props.myUserId === repliesToUserId;\n const repliesToUsername = repliesToUserId && !repliesToMyMessage && props.usersDictionary.hasOwnProperty(repliesToUserId)\n ? props.usersDictionary[repliesToUserId].username\n : null;\n // Determine whether the message should be grouped with others and if so whether it is\n // at the top, middle, or bottom of the group\n const groupWithPrevious = messagesToGroup[i];\n const groupWithNext = i < props.messages.length - 1 ? messagesToGroup[i + 1] : false;\n let groupPosition = Message_1.MessageGroupPosition.None;\n if (!groupWithPrevious && groupWithNext) {\n groupPosition = Message_1.MessageGroupPosition.Top;\n }\n else if (groupWithPrevious && groupWithNext) {\n groupPosition = Message_1.MessageGroupPosition.Middle;\n }\n else if (groupWithPrevious && !groupWithNext) {\n groupPosition = Message_1.MessageGroupPosition.Bottom;\n }\n const messageId = \"id\" in message ? message.id : null;\n const selectEffect = messageId != null && props.messageIdToSelect != null && messageId === props.messageIdToSelect;\n children.push(react_1.default.createElement(Message_1.default, { key: message.clientMessageId, chatId: props.chatId, messageId: messageId, userId: senderUserId, clientMessageId: message.clientMessageId, content: message.content, date: message.date, isGroupChat: props.isGroupChat, sentByMe: sentByMe, sender: senderDetails, theirUsername: theirUsername, confirmed: message.kind !== \"unconfirmed\", readByMe: readByMe, readByThem: readByThem, groupPosition: groupPosition, repliesToContent: repliesToContent, repliesToChatId: (_e = (_d = message.repliesTo) === null || _d === void 0 ? void 0 : _d.chatId) !== null && _e !== void 0 ? _e : null, repliesToMessageId: (_g = (_f = message.repliesTo) === null || _f === void 0 ? void 0 : _f.messageId) !== null && _g !== void 0 ? _g : null, repliesToMyMessage: repliesToMyMessage, repliesToUsername: repliesToUsername, selectEffect: selectEffect }));\n }\n return (react_1.default.createElement(\"div\", { className: classes.dayContainer }, children));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Grid_1 = __importDefault(require(\"@material-ui/core/Grid\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst constants_1 = require(\"../../constants\");\nconst getMessages_1 = __importDefault(require(\"../../actions/chats/getMessages\"));\nconst dateFunctions_1 = require(\"../../utils/dateFunctions\");\nconst stateFunctions_1 = require(\"../../domain/stateFunctions\");\nconst MessagesFromSingleDay_1 = __importDefault(require(\"./MessagesFromSingleDay\"));\nconst UnreadMessageDetector_1 = __importDefault(require(\"../../domain/UnreadMessageDetector\"));\nconst UnreadMessagesHandler_1 = __importDefault(require(\"../../domain/UnreadMessagesHandler\"));\nconst ScrollToBottomButton_1 = __importDefault(require(\"./ScrollToBottomButton\"));\nexports.default = react_1.default.memo(MessagesList);\nconst useStyles = makeStyles_1.default((theme) => ({\n container: {\n position: \"relative\",\n overflowX: \"hidden\",\n overflowY: \"auto\"\n },\n messagesList: {\n padding: \"14px 14px 0 14px\"\n },\n scrollToBottomButton: {\n position: \"absolute\",\n bottom: 8,\n right: 24,\n zIndex: 100,\n color: theme.colors.iconAlt.color,\n backgroundColor: theme.colors.iconAlt.backgroundColor,\n \"&:hover,:focus\": {\n backgroundColor: theme.colors.iconAlt.hover\n }\n }\n}));\nfunction MessagesList() {\n const myUserId = react_redux_1.useSelector((state) => state.usersState.me.userId);\n const usersDictionary = react_redux_1.useSelector((state) => state.usersState.userDictionary);\n const chat = react_redux_1.useSelector((state) => stateFunctions_1.getSelectedChat(state.chatsState));\n const classes = useStyles();\n const messageIdToSelect = chat && chatFunctions.isConfirmedChat(chat) ? chat.messageToSelect : null;\n if (chat === null) {\n return react_1.default.createElement(\"div\", null);\n }\n const isGroupChat = chatFunctions.isGroupChat(chat);\n const theirUserId = chatFunctions.isDirectChat(chat) ? chat.them : null;\n let chatId = chatFunctions.isConfirmedChat(chat) ? chat.chatId : null;\n const children = [];\n const unreadMessageDetector = new UnreadMessageDetector_1.default(chat);\n // Ignore remote messages\n const messages = chat.messages.filter(m => m.kind !== \"remote\");\n let messagesFromSameDay = [];\n let lastMessageDate = null;\n for (const message of messages) {\n if (lastMessageDate && !dateFunctions_1.areOnSameDay(lastMessageDate, message.date)) {\n addDay(lastMessageDate, messagesFromSameDay);\n messagesFromSameDay = [];\n }\n messagesFromSameDay.push(message);\n lastMessageDate = message.date;\n }\n if (messagesFromSameDay.length) {\n addDay(lastMessageDate, messagesFromSameDay);\n }\n function addDay(date, messages) {\n children.push(react_1.default.createElement(MessagesFromSingleDay_1.default, { chatId: chatId, key: date.toDateString(), isGroupChat: isGroupChat, myUserId: myUserId, theirUserId: theirUserId, usersDictionary: usersDictionary, messages: messages, unreadMessageDetector: unreadMessageDetector, messageIdToSelect: messageIdToSelect }));\n }\n const dispatch = react_redux_1.useDispatch();\n const messagesRef = react_1.useRef(null);\n // Start scroll listener to download more messages when scroll reaches near the top\n react_1.useLayoutEffect(() => {\n const messagesDiv = messagesRef.current;\n if (!messagesDiv || !chatFunctions.isConfirmedChat(chat)) {\n return;\n }\n // Set the scroll top or scroll bottom to maintain the previously saved scroll position\n if (chat.scrollTop !== null) {\n messagesDiv.scrollTop = chat.scrollTop;\n }\n else if (chat.scrollBottom !== null) {\n messagesDiv.scrollTop = messagesDiv.scrollHeight - messagesDiv.clientHeight - chat.scrollBottom;\n }\n const onScroll = (e) => onScroll_downloadMoreMessages(chat, e.target);\n messagesDiv.addEventListener(\"scroll\", onScroll);\n onScroll_downloadMoreMessages(chat, messagesDiv);\n return () => messagesDiv.removeEventListener(\"scroll\", onScroll);\n }, [chat, messagesRef.current]);\n const hasUnreadMessages = chatId\n ? chatFunctions.getUnreadMessageCount(chat) > 0\n : false;\n // Start a new UnreadMessagesHandler to mark messages as read once they have been visible for a certain duration\n react_1.useLayoutEffect(() => {\n if (!chatId || !hasUnreadMessages) {\n return;\n }\n const unreadMessagesHandler = UnreadMessagesHandler_1.default.startNew(chatId);\n return () => unreadMessagesHandler.stop();\n }, [chatId, hasUnreadMessages]);\n // If there is a messageToSelect then set the scroll so that the message is in the middle of the screen\n react_1.useLayoutEffect(() => {\n if (messageIdToSelect != null) {\n const messagesDiv = messagesRef.current;\n const clientId = chatFunctions.getClientMessageId(messages, messageIdToSelect);\n if (clientId != null && messagesDiv != null) {\n chatFunctions.scrollToMessage(messagesDiv, clientId);\n }\n }\n }, [messageIdToSelect]);\n // Listen to scroll events and load more messages if the user scrolls near the top of the currently loaded messages\n function onScroll_downloadMoreMessages(chat, messagesDiv) {\n const minMessageIdOnServer = chatFunctions.getMinMessageIdOnServer(chat);\n const downloadMoreMessages = !chat.messagesDownloading.length &&\n chat.minLocalMessageId !== null &&\n chat.minLocalMessageId > minMessageIdOnServer &&\n messagesDiv.scrollTop < 200;\n if (downloadMoreMessages) {\n const fromId = Math.max(chat.minLocalMessageId - constants_1.PAGE_SIZE, minMessageIdOnServer);\n const count = chat.minLocalMessageId - fromId;\n dispatch(getMessages_1.default(chat.chatId, fromId, count));\n }\n }\n return (react_1.default.createElement(Grid_1.default, { id: \"messages\", ref: messagesRef, item: true, flex: \"1 1\", className: classes.container },\n react_1.default.createElement(\"div\", { className: classes.messagesList }, children),\n react_1.default.createElement(ScrollToBottomButton_1.default, { parentElem: messagesRef, className: classes.scrollToBottomButton })));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst Container_1 = __importDefault(require(\"@material-ui/core/Container\"));\nconst stateFunctions_1 = require(\"../../domain/stateFunctions\");\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst replyToMessage_1 = require(\"../../actions/chats/replyToMessage\");\nconst CloseButton_1 = __importDefault(require(\"../shared/CloseButton\"));\nconst MessageReplyPanel_1 = __importDefault(require(\"./MessageReplyPanel\"));\nexports.default = react_1.default.memo(ReplyToMessagePanel);\nconst useStyles = makeStyles_1.default((theme) => ({\n container: {\n paddingLeft: 16,\n paddingRight: 16,\n },\n innerContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginTop: 8\n },\n contentContainer: {\n maxWidth: 500,\n [theme.breakpoints.down('sm')]: {\n maxWidth: \"87vw\"\n },\n backgroundColor: colorManipulator_1.darken(theme.colors.messageSentByElse.highlightedContentBackgroundColor, 0.05),\n borderRadius: 6,\n \"& svg\": {\n opacity: 0.7\n }\n },\n closeButton: {\n marginLeft: 16\n }\n}));\nfunction ReplyToMessagePanel() {\n const dispatch = react_redux_1.useDispatch();\n const classes = useStyles();\n const chat = react_redux_1.useSelector((state) => stateFunctions_1.getSelectedChat(state.chatsState));\n const myUserId = react_redux_1.useSelector((state) => state.usersState.me.userId);\n const userMap = react_redux_1.useSelector((state) => state.usersState.userDictionary);\n const replyContext = chat === null || chat === void 0 ? void 0 : chat.replyContext;\n let panel = null;\n if (chat && replyContext) {\n const repliesToMyMessage = myUserId === replyContext.userId;\n const repliesToUsername = !repliesToMyMessage && userMap.hasOwnProperty(replyContext.userId)\n ? userMap[replyContext.userId].username\n : null;\n let theirUsername;\n if (chatFunctions.isDirectChat(chat)) {\n theirUsername = userMap.hasOwnProperty(chat.them)\n ? userMap[chat.them].username\n : null;\n }\n panel =\n react_1.default.createElement(\"div\", { className: classes.innerContainer },\n react_1.default.createElement(MessageReplyPanel_1.default, { repliesToChatId: replyContext.chatId, isPrivateReply: chat.chatId !== replyContext.chatId, content: replyContext.content, repliesToMyMessage: repliesToMyMessage, sentByMe: false, isGroupChat: chatFunctions.isGroupChat(chat), theirUsername: theirUsername, repliesToUsername: repliesToUsername, className: classes.contentContainer }),\n react_1.default.createElement(CloseButton_1.default, { className: classes.closeButton, onClick: closePanel }));\n }\n function closePanel() {\n dispatch(replyToMessage_1.cancelReplyToMessage(chat.chatId));\n }\n return (react_1.default.createElement(Container_1.default, { className: classes.container }, panel));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst Zoom_1 = __importDefault(require(\"@material-ui/core/Zoom\"));\nconst Fab_1 = __importDefault(require(\"@material-ui/core/Fab\"));\nconst ArrowDownward_1 = __importDefault(require(\"@material-ui/icons/ArrowDownward\"));\nexports.default = react_1.default.memo(ScrollToBottomButton);\nfunction ScrollToBottomButton(props) {\n const [buttonVisible, setButtonVisible] = react_1.useState(false);\n react_1.useLayoutEffect(() => {\n const parentElem = props.parentElem.current;\n if (!parentElem) {\n return;\n }\n const onScroll = (e) => onScroll_toggleButtonVisibility(e.target);\n parentElem.addEventListener(\"scroll\", onScroll);\n onScroll_toggleButtonVisibility(parentElem);\n return () => parentElem.removeEventListener(\"scroll\", onScroll);\n }, [props.parentElem.current, buttonVisible]);\n function onScroll_toggleButtonVisibility(messagesDiv) {\n const scrollBottom = messagesDiv.scrollHeight - messagesDiv.scrollTop - messagesDiv.clientHeight;\n const shouldShowButton = scrollBottom > 50;\n if (shouldShowButton !== buttonVisible) {\n setButtonVisible(shouldShowButton);\n }\n }\n function scrollToBottom() {\n const parentElem = props.parentElem.current;\n if (parentElem) {\n parentElem.scrollTo({ top: parentElem.scrollHeight - parentElem.clientHeight });\n }\n }\n return (react_1.default.createElement(Zoom_1.default, { in: buttonVisible },\n react_1.default.createElement(Fab_1.default, { onClick: scrollToBottom, className: props.className, size: \"medium\" },\n react_1.default.createElement(ArrowDownward_1.default, null))));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst SyncAlt_1 = __importDefault(require(\"@material-ui/icons/SyncAlt\"));\nconst TextField_1 = __importDefault(require(\"@material-ui/core/TextField\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst getCurrentUser_1 = __importDefault(require(\"../../actions/users/getCurrentUser\"));\nconst cycles_1 = require(\"../../formatters/cycles\");\nconst cycleFunctions = __importStar(require(\"../../utils/cycleFunctions\"));\nconst useStyles = makeStyles_1.default((theme) => ({\n container: {\n padding: \"10px 10px 0 10px\"\n },\n box: {\n padding: 10,\n display: \"inline-block\",\n backgroundColor: theme.colors.textBox.backgroundColor,\n borderRadius: 6\n },\n inputContainer: {\n display: \"flex\",\n marginTop: 10,\n alignItems: \"center\"\n },\n input: {\n width: 170,\n backgroundColor: theme.colors.textBox.backgroundColor,\n },\n cyclesInput: {\n marginRight: 10,\n },\n poundsInput: {\n marginLeft: 10,\n },\n balanceContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginTop: 4,\n marginBottom: 8,\n \"& a\": {\n marginLeft: 30\n }\n }\n}));\nconst SendCycles = react_1.forwardRef((props, ref) => {\n const dispatch = react_redux_1.useDispatch();\n const [cycles, setCycles] = react_1.useState(\"\");\n const [dollars, setDollars] = react_1.useState(\"\");\n const [balance, setBalance] = react_1.useState(\"...\");\n const classes = useStyles();\n react_1.useEffect(() => {\n fetchCurrentBalance();\n }, []);\n react_1.useImperativeHandle(ref, () => ({ getCycles }));\n function getCycles() {\n return cycleFunctions.fromT(parseFloat(cycles));\n }\n function onCyclesChanged(text) {\n setCycles(text);\n const dollars = text.length > 0\n ? cycleFunctions.round(cycleFunctions.toCurrency(cycleFunctions.fromT(parseFloat(text)), \"USD\")).toString()\n : \"\";\n setDollars(dollars);\n }\n function onDollarsChanged(text) {\n setDollars(text);\n const cycles = text.length > 0\n ? cycleFunctions.round(cycleFunctions.toT(cycleFunctions.fromCurrency(parseFloat(text), \"USD\"))).toString()\n : \"\";\n setCycles(cycles);\n }\n function fetchCurrentBalance() {\n const getCurrentUserAsync = () => dispatch(getCurrentUser_1.default());\n getCurrentUserAsync().then((outcome) => {\n if (outcome.type === \"GET_CURRENT_USER_SUCCEEDED\") {\n setBalance(cycles_1.formatCycles(outcome.payload.accountBalance));\n }\n });\n }\n return (react_1.default.createElement(\"div\", { className: classes.container },\n react_1.default.createElement(\"div\", { className: classes.box },\n react_1.default.createElement(Typography_1.default, { component: \"div\", variant: \"h6\" },\n \"Send cycles to \",\n props.recipient.username),\n react_1.default.createElement(\"div\", { className: classes.balanceContainer },\n react_1.default.createElement(Typography_1.default, { component: \"div\", variant: \"caption\" },\n \"Current balance \",\n react_1.default.createElement(\"strong\", null, balance))),\n react_1.default.createElement(\"div\", { className: classes.inputContainer },\n react_1.default.createElement(TextField_1.default, { id: \"cyclesInput\", label: \"Cycles (T)\", type: \"number\", value: cycles, className: classes.cyclesInput + \" \" + classes.input, onChange: e => onCyclesChanged(e.target.value) }),\n react_1.default.createElement(SyncAlt_1.default, null),\n react_1.default.createElement(TextField_1.default, { id: \"poundsInput\", label: \"USD\", type: \"number\", value: dollars, className: classes.poundsInput + \" \" + classes.input, onChange: e => onDollarsChanged(e.target.value) })))));\n});\nexports.default = react_1.default.memo(SendCycles);\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.alertDialog = void 0;\nconst react_1 = __importDefault(require(\"react\"));\nconst Button_1 = __importDefault(require(\"@material-ui/core/Button\"));\nconst Dialog_1 = __importDefault(require(\"@material-ui/core/Dialog\"));\nconst DialogTitle_1 = __importDefault(require(\"@material-ui/core/DialogTitle\"));\nconst DialogContent_1 = __importDefault(require(\"@material-ui/core/DialogContent\"));\nconst DialogContentText_1 = __importDefault(require(\"@material-ui/core/DialogContentText\"));\nconst DialogActions_1 = __importDefault(require(\"@material-ui/core/DialogActions\"));\nconst react_modal_promise_1 = require(\"react-modal-promise\");\nconst Modal = ({ title, text, isOpen, onResolve }) => {\n const onClose = () => onResolve(true);\n return (react_1.default.createElement(Dialog_1.default, { open: isOpen, onClose: onClose, \"aria-labelledby\": \"alert-dialog-title\", \"aria-describedby\": \"alert-dialog-description\" },\n react_1.default.createElement(DialogTitle_1.default, { id: \"alert-dialog-title\" }, title !== null && title !== void 0 ? title : \"\"),\n react_1.default.createElement(DialogContent_1.default, null,\n react_1.default.createElement(DialogContentText_1.default, { id: \"alert-dialog-description\" }, text !== null && text !== void 0 ? text : \"\")),\n react_1.default.createElement(DialogActions_1.default, null,\n react_1.default.createElement(Button_1.default, { onClick: onClose, color: \"primary\" }, \"Continue\"))));\n};\nexports.alertDialog = react_modal_promise_1.create(Modal);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst clipboard = __importStar(require(\"clipboard-polyfill/text\"));\nconst react_redux_1 = require(\"react-redux\");\nconst Button_1 = __importDefault(require(\"@material-ui/core/Button\"));\nconst List_1 = __importDefault(require(\"@material-ui/core/List\"));\nconst Tooltip_1 = __importDefault(require(\"@material-ui/core/Tooltip\"));\nconst stateFunctions_1 = require(\"../../domain/stateFunctions\");\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst service_1 = __importDefault(require(\"../../services/userMgmt/service\"));\nconst addParticipants_1 = __importDefault(require(\"../../actions/chats/addParticipants\"));\nconst SearchBox_1 = __importDefault(require(\"../shared/SearchBox\"));\nconst u64 = __importStar(require(\"../../utils/u64Functions\"));\nconst UserListItem_1 = __importDefault(require(\"../shared/UserListItem\"));\nconst users_1 = require(\"../../domain/model/users\");\nconst Header_1 = __importDefault(require(\"./Header\"));\nconst CreateGroupChatIcon_1 = __importDefault(require(\"../shared/CreateGroupChatIcon\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nconst PLACEHOLDER_TEXT = \"Type a username\";\nexports.default = react_1.default.memo(AddParticipantsPanel);\nfunction AddParticipantsPanel() {\n const dispatch = react_redux_1.useDispatch();\n const chat = react_redux_1.useSelector((state) => stateFunctions_1.getSelectedChat(state.chatsState));\n const emptyResults = [];\n const [text, setText] = react_1.useState(\"\");\n const [results, setResults] = react_1.useState(emptyResults);\n const [tooltipOpen, setTooltipOpen] = react_1.useState(false);\n const tooltipTimeout = react_1.useRef();\n const clearInput = () => setText(\"\");\n const textBoxRef = react_1.useRef(null);\n function handleInputChange(text) {\n setText(text);\n if (text.length > 0) {\n const request = {\n search_term: text,\n max_results: 20\n };\n service_1.default.searchUsers(request).then(response => {\n if (text.length > 0) {\n setResults(response.users);\n }\n });\n }\n else {\n setResults(emptyResults);\n }\n }\n function handleCopyCodeButtonClick() {\n return __awaiter(this, void 0, void 0, function* () {\n if (tooltipTimeout.current) {\n clearTimeout(tooltipTimeout.current);\n }\n yield clipboard.writeText(u64.toHex(chat.chatId));\n setTooltipOpen(true);\n tooltipTimeout.current = setTimeout(() => {\n setTooltipOpen(false);\n tooltipTimeout.current = undefined;\n }, 1000);\n });\n }\n function closePanel() {\n clearInput();\n dispatch(changeSidePanel_1.changeRightPanel(panels_1.RightPanelType.Participants));\n }\n function handleSelectUser(user) {\n closePanel();\n dispatch(addParticipants_1.default(chat, [user.userId]));\n }\n react_1.useLayoutEffect(() => {\n var _a;\n (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n }, []);\n let mainContent;\n if (results.length) {\n mainContent = (react_1.default.createElement(List_1.default, { disablePadding: true }, results.map(user => react_1.default.createElement(UserListItem_1.default, { key: user.userId, user: users_1.fromUserSummary(user), handleSelectUser: () => handleSelectUser(user) }))));\n }\n else {\n mainContent = (react_1.default.createElement(Tooltip_1.default, { title: \"copied!\", placement: \"bottom\", open: tooltipOpen },\n react_1.default.createElement(Button_1.default, { onClick: handleCopyCodeButtonClick }, \"Copy Invite Code\")));\n }\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Header_1.default, { title: \"Add participant\", onCloseButtonClick: closePanel, rightIcon: react_1.default.createElement(CreateGroupChatIcon_1.default, { size: \"sm\" }), back: true }),\n react_1.default.createElement(SearchBox_1.default, { text: text, onChange: handleInputChange, placeholderText: PLACEHOLDER_TEXT, ref: textBoxRef }),\n mainContent));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst Grid_1 = __importDefault(require(\"@material-ui/core/Grid\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst CloseButton_1 = __importDefault(require(\"../shared/CloseButton\"));\nconst BackButton_1 = __importDefault(require(\"../shared/BackButton\"));\nexports.default = react_1.default.memo(Header);\nHeader.defaultProps = {\n rightIcon: null,\n back: false\n};\nconst useStyles = makeStyles_1.default((theme) => ({\n title: {\n color: theme.colors.header.primaryTextColor,\n padding: \"0 16px\"\n },\n closeButton: {\n color: colorManipulator_1.alpha(theme.colors.header.primaryTextColor, 0.6)\n }\n}));\nfunction Header(props) {\n const classes = useStyles();\n const rightElement = props.rightIcon\n ? react_1.default.createElement(Grid_1.default, { item: true }, props.rightIcon)\n : null;\n return (react_1.default.createElement(Grid_1.default, { component: \"header\", container: true, justifyContent: \"space-between\", alignItems: \"center\" },\n react_1.default.createElement(Grid_1.default, { item: true },\n react_1.default.createElement(Grid_1.default, { container: true, alignItems: \"center\" },\n react_1.default.createElement(Grid_1.default, { item: true }, props.back\n ? react_1.default.createElement(BackButton_1.default, { onClick: props.onCloseButtonClick, className: classes.closeButton })\n : react_1.default.createElement(CloseButton_1.default, { onClick: props.onCloseButtonClick, className: classes.closeButton })),\n react_1.default.createElement(Grid_1.default, { item: true },\n react_1.default.createElement(Typography_1.default, { variant: \"h6\", className: classes.title }, props.title)))),\n rightElement));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_redux_1 = require(\"react-redux\");\nconst List_1 = __importDefault(require(\"@material-ui/core/List\"));\nconst ListItem_1 = __importDefault(require(\"@material-ui/core/ListItem\"));\nconst ListItemIcon_1 = __importDefault(require(\"@material-ui/core/ListItemIcon\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst stateFunctions_1 = require(\"../../domain/stateFunctions\");\nconst changeSidePanel_1 = require(\"../../actions/app/changeSidePanel\");\nconst UserListItem_1 = __importDefault(require(\"../shared/UserListItem\"));\nconst users_1 = require(\"../../domain/model/users\");\nconst gotoUser_1 = require(\"../../actions/chats/gotoUser\");\nconst removeParticipant_1 = __importDefault(require(\"../../actions/chats/removeParticipant\"));\nconst Header_1 = __importDefault(require(\"./Header\"));\nconst CreateGroupChatIcon_1 = __importDefault(require(\"../shared/CreateGroupChatIcon\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nexports.default = react_1.default.memo(ParticipantsPanel);\nconst useStyles = makeStyles_1.default((theme) => ({\n list: {\n overflowX: \"hidden\",\n overflowY: \"auto\"\n },\n listItem: {\n \"&:hover\": {\n backgroundColor: theme.colors.sidePanel.listItemHoverBackgroundColor,\n cursor: \"pointer\"\n }\n }\n}));\nfunction ParticipantsPanel() {\n const dispatch = react_redux_1.useDispatch();\n const chat = react_redux_1.useSelector((state) => stateFunctions_1.getSelectedChat(state.chatsState));\n const me = react_redux_1.useSelector((state) => state.usersState.me);\n const _users = react_redux_1.useSelector((state) => stateFunctions_1.getUsers(chat.participants, state.usersState.userDictionary), compareUsers);\n // Sort participants alphabetically by username\n const users = _users.map(users_1.fromUserSummary);\n users.sort(users_1.compareUsersOnlineFirst);\n function closePanel() {\n dispatch(changeSidePanel_1.changeRightPanel(panels_1.RightPanelType.None));\n }\n const handleSelectUser = (user) => () => {\n if (user.userId != me.userId && user.chatId) {\n closePanel();\n dispatch(gotoUser_1.gotoKnownUser(user.userId));\n }\n };\n function compareUsers(left, right) {\n if (left.length !== right.length)\n return false;\n for (let i = 0; i < left.length; i++) {\n const l = left[i];\n const r = right[i];\n if (l.userId !== r.userId || l.username !== r.username || l.imageId !== r.imageId) {\n return false;\n }\n }\n return true;\n }\n const classes = useStyles();\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(Header_1.default, { title: \"Participants\", onCloseButtonClick: closePanel }),\n react_1.default.createElement(List_1.default, { disablePadding: true, className: classes.list },\n react_1.default.createElement(ListItem_1.default, { onClick: _ => dispatch(changeSidePanel_1.changeRightPanel(panels_1.RightPanelType.AddParticipants)), className: classes.listItem, divider: true },\n react_1.default.createElement(ListItemIcon_1.default, null,\n react_1.default.createElement(CreateGroupChatIcon_1.default, { size: \"sm\" })),\n react_1.default.createElement(Typography_1.default, { variant: \"body1\" }, \"Add participant\")),\n react_1.default.createElement(UserListItem_1.default, { key: me.userId, user: users_1.fromMyProfile(me) }),\n users.map(user => {\n const userId = user.userId;\n const buttons = [];\n buttons.push({ text: \"Remove\", action: () => dispatch(removeParticipant_1.default(chat.chatId, userId)) });\n buttons.push({ text: \"Dismiss as admin\", action: () => { } });\n return react_1.default.createElement(UserListItem_1.default, { key: userId, user: user, buttons: buttons, handleSelectUser: handleSelectUser(user) });\n }))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst AddParticipantsPanel_1 = __importDefault(require(\"./AddParticipantsPanel\"));\nconst ParticipantsPanel_1 = __importDefault(require(\"./ParticipantsPanel\"));\nconst panels_1 = require(\"../../domain/model/panels\");\nexports.default = RightPanel;\nfunction RightPanel(props) {\n switch (props.type) {\n case panels_1.RightPanelType.AddParticipants:\n return react_1.default.createElement(AddParticipantsPanel_1.default, null);\n case panels_1.RightPanelType.Participants:\n return react_1.default.createElement(ParticipantsPanel_1.default, null);\n default:\n return react_1.default.createElement(react_1.default.Fragment, null);\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst IconButton_1 = __importDefault(require(\"@material-ui/core/IconButton\"));\nconst ArrowBack_1 = __importDefault(require(\"@material-ui/icons/ArrowBack\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nexports.default = react_1.default.memo(BackButton);\nconst useStyles = makeStyles_1.default((theme) => ({\n closeButton: {\n height: theme.avatarSize.sm,\n width: theme.avatarSize.sm\n }\n}));\nfunction BackButton(props) {\n const classes = useStyles();\n return (react_1.default.createElement(IconButton_1.default, { onClick: props.onClick, className: classes.closeButton + \" \" + props.className },\n react_1.default.createElement(ArrowBack_1.default, null)));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst Avatar_1 = __importDefault(require(\"@material-ui/core/Avatar\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nexports.default = react_1.default.memo(CircularIcon);\nconst useStyles = makeStyles_1.default((theme) => ({\n icon: {\n color: theme.colors.icon.color,\n backgroundColor: theme.colors.icon.backgroundColor,\n height: props => props.size === \"md\" ? theme.avatarSize.md : theme.avatarSize.sm,\n width: props => props.size === \"md\" ? theme.avatarSize.md : theme.avatarSize.sm,\n \"& .background\": {\n fill: theme.colors.icon.backgroundColor\n }\n }\n}));\nfunction CircularIcon(props) {\n const classes = useStyles(props);\n return (react_1.default.createElement(Avatar_1.default, { className: classes.icon }, props.svg));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst IconButton_1 = __importDefault(require(\"@material-ui/core/IconButton\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst Close_1 = __importDefault(require(\"@material-ui/icons/Close\"));\nexports.default = react_1.default.memo(CloseButton);\nconst useStyles = makeStyles_1.default((theme) => ({\n closeButton: {\n height: theme.avatarSize.sm,\n width: theme.avatarSize.sm\n }\n}));\nCloseButton.defaultProps = {\n className: \"\"\n};\nfunction CloseButton(props) {\n const classes = useStyles();\n return (react_1.default.createElement(IconButton_1.default, { onClick: props.onClick, className: classes.closeButton + \" \" + props.className },\n react_1.default.createElement(Close_1.default, null)));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst createGroupChat_svg_1 = __importDefault(require(\"../../icons/createGroupChat.svg\"));\nconst CircularIcon_1 = __importDefault(require(\"./CircularIcon\"));\nexports.default = CreateGroupChatIcon;\nfunction CreateGroupChatIcon(props) {\n return react_1.default.createElement(CircularIcon_1.default, { svg: react_1.default.createElement(createGroupChat_svg_1.default, null), size: props.size });\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst groupChatIcon_svg_1 = __importDefault(require(\"../../icons/groupChatIcon.svg\"));\nconst CircularIcon_1 = __importDefault(require(\"./CircularIcon\"));\nexports.default = react_1.default.memo(DefaultGroupChatIcon);\nfunction DefaultGroupChatIcon(props) {\n return react_1.default.createElement(CircularIcon_1.default, { svg: react_1.default.createElement(groupChatIcon_svg_1.default, null), size: props.size });\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nexports.default = react_1.default.memo(Emoji);\nconst useStyles = makeStyles_1.default((theme) => ({\n emoji: {\n height: 20,\n fontSize: 20,\n lineHeight: 1\n }\n}));\nfunction Emoji(props) {\n const classes = useStyles();\n return react_1.default.createElement(\"span\", { className: classes.emoji }, props.text);\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nImage.defaultProps = {\n className: \"\"\n};\nexports.default = react_1.default.memo(Image);\nfunction Image(props) {\n return react_1.default.createElement(\"img\", { className: props.className, src: props.src, width: \"100%\", height: \"100%\" });\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst IconButton_1 = __importDefault(require(\"@material-ui/core/IconButton\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst tick2_svg_1 = __importDefault(require(\"../../icons/tick2.svg\"));\nexports.default = react_1.default.memo(NameInput);\nNameInput.defaultProps = {\n minLength: 1,\n disabled: false\n};\nconst useStyles = makeStyles_1.default((theme) => ({\n nameInput: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n textBoxContainer: {\n paddingBottom: 4,\n borderBottom: \"2px solid #3dc5ee\",\n display: \"flex\",\n justifyContent: \"space-between\"\n },\n textBox: {\n border: 0,\n padding: 0,\n outline: \"none\",\n flexGrow: 1\n },\n charsRemaining: {\n marginRight: 12,\n color: \"#cccccc\"\n },\n submitButton: {\n alignSelf: \"center\",\n marginTop: 40,\n width: 46,\n height: 46,\n borderRadius: \"50%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"#32cd32\",\n boxShadow: \"0 1px 3px rgba(80,80,80,0.4)\",\n \"&:hover\": {\n backgroundColor: colorManipulator_1.alpha(\"#32cd32\", 0.8)\n },\n \"&:disabled\": {\n visibility: \"hidden\"\n }\n },\n buttonSvg: {\n color: \"white\",\n verticalAlign: \"middle\",\n pointerEvents: \"none\"\n }\n}));\nfunction NameInput(props) {\n const [text, setText] = react_1.useState(\"\");\n const remainingCharCount = props.maxLength - text.length;\n const classes = useStyles();\n const textBoxRef = react_1.useRef(null);\n function handleSubmit() {\n if (text.length < 1) {\n return;\n }\n props.onSubmit(text);\n }\n function handleInputChange(text) {\n setText(text);\n }\n function handleKeyPress(e) {\n if (e.key === \"Enter\") {\n handleSubmit();\n e.preventDefault();\n }\n }\n react_1.useLayoutEffect(() => {\n var _a;\n if (!props.disabled) {\n (_a = textBoxRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n }\n }, [props.disabled]);\n const className = classes.nameInput + (props.className ? \" \" + props.className : \"\");\n return (react_1.default.createElement(\"div\", { className: className },\n react_1.default.createElement(\"div\", { className: classes.textBoxContainer + \" \" + props.textBoxClassName },\n react_1.default.createElement(\"input\", { className: classes.textBox, ref: textBoxRef, type: \"text\", value: text, onChange: e => handleInputChange(e.target.value), placeholder: props.placeholderText, onKeyDown: handleKeyPress, minLength: props.minLength, maxLength: props.maxLength, disabled: props.disabled }),\n react_1.default.createElement(Typography_1.default, { variant: \"body2\", className: classes.charsRemaining }, remainingCharCount)),\n props.children,\n react_1.default.createElement(IconButton_1.default, { disabled: props.disabled || text.length < props.minLength, onClick: handleSubmit, className: classes.submitButton },\n react_1.default.createElement(tick2_svg_1.default, { className: classes.buttonSvg }))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nexports.default = react_1.default.memo(ParticipantsTyping);\nfunction ParticipantsTyping(props) {\n if (!props.usernames.length) {\n return null;\n }\n let text;\n if (props.usernames.length === 1) {\n text = `${props.usernames[0]} is typing...`;\n }\n else {\n text = props.usernames[0];\n for (let i = 1; i < props.usernames.length - 1; i++) {\n text += `, ${props.usernames[i]}`;\n }\n text += ` and ${props.usernames[props.usernames.length - 1]} are typing...`;\n }\n return (react_1.default.createElement(Typography_1.default, { variant: \"body2\" }, text));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst ClickAwayListener_1 = __importDefault(require(\"@material-ui/core/ClickAwayListener\"));\nconst IconButton_1 = __importDefault(require(\"@material-ui/core/IconButton\"));\nconst MenuItem_1 = __importDefault(require(\"@material-ui/core/MenuItem\"));\nconst MenuList_1 = __importDefault(require(\"@material-ui/core/MenuList\"));\nconst Paper_1 = __importDefault(require(\"@material-ui/core/Paper\"));\nconst Popper_1 = __importDefault(require(\"@material-ui/core/Popper\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nexports.default = react_1.default.memo(PopOverMenu);\nconst useStyles = makeStyles_1.default((theme) => ({\n button: {\n height: theme.avatarSize.sm,\n width: theme.avatarSize.sm\n },\n menu: {\n color: colorManipulator_1.alpha(theme.colors.textColor, 0.8),\n backgroundColor: colorManipulator_1.alpha(theme.colors.sidePanel.backgroundColor, 0.8),\n minWidth: 160\n },\n popper: {\n zIndex: 100\n }\n}));\nfunction PopOverMenu(props) {\n const classes = useStyles();\n const [open, setOpen] = react_1.useState(false);\n const anchorRef = react_1.useRef(null);\n let buttonClassName = classes.button;\n if (props.className) {\n buttonClassName += \" \" + props.className;\n }\n const handleClick = (event) => {\n event.preventDefault();\n setOpen(!open);\n };\n const handleClose = () => {\n setOpen(false);\n };\n function buildMenuItemElement(text, action, disable) {\n return (react_1.default.createElement(MenuItem_1.default, { key: text, disabled: disable, onClick: _ => {\n if (!disable) {\n action();\n handleClose();\n }\n } },\n react_1.default.createElement(Typography_1.default, { variant: \"body2\" }, text)));\n }\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(IconButton_1.default, { onClick: handleClick, buttonRef: anchorRef, className: buttonClassName }, props.icon),\n react_1.default.createElement(Popper_1.default, { open: open, anchorEl: anchorRef.current, placement: props.placement, className: classes.popper },\n react_1.default.createElement(Paper_1.default, null,\n react_1.default.createElement(ClickAwayListener_1.default, { onClickAway: handleClose },\n react_1.default.createElement(MenuList_1.default, { variant: \"menu\", className: classes.menu + \" pop-over-menu\" }, props.menuItems.map(m => buildMenuItemElement(m.text, m.action, m.disable))))))));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst search_svg_1 = __importDefault(require(\"../../icons/search.svg\"));\nexports.default = react_1.default.memo(SearchBox);\nconst useStyles = makeStyles_1.default((theme) => ({\n container: {\n backgroundColor: theme.colors.sidePanel.subHeaderBackgroundColor,\n padding: \"6px 15px\",\n position: \"relative\"\n },\n textBox: {\n width: \"100%\",\n border: 0,\n borderRadius: 25,\n padding: \"4px 15px 6px 64px\",\n fontSize: 15,\n fontWeight: 300,\n outline: \"none\",\n color: theme.colors.textBox.textColor,\n backgroundColor: theme.colors.textBox.backgroundColor\n },\n icon: {\n display: \"block\",\n float: \"left\",\n position: \"absolute\",\n top: 11,\n left: 25,\n color: \"#aaaaaa\"\n }\n}));\nfunction SearchBox(props) {\n const classes = useStyles();\n return (react_1.default.createElement(\"div\", { className: classes.container },\n react_1.default.createElement(\"input\", { className: classes.textBox, ref: props.ref, maxLength: 25, value: props.text, onChange: e => props.onChange(e.target.value), placeholder: props.placeholderText }),\n react_1.default.createElement(search_svg_1.default, { className: classes.icon })));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst he_1 = __importDefault(require(\"he\"));\nconst server_1 = __importDefault(require(\"react-dom/server\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst emojiFunctions_1 = require(\"../../utils/emojiFunctions\");\nconst urlFunctions_1 = require(\"../../utils/urlFunctions\");\nconst Emoji_1 = __importDefault(require(\"./Emoji\"));\nexports.default = react_1.default.memo(TextContent);\nconst useStyles = makeStyles_1.default((theme) => ({\n sentByMe: {\n \"& a\": {\n color: \"inherit\"\n }\n }\n}));\nfunction TextContent(props) {\n const classes = useStyles();\n function markupText(text, plainText) {\n // First HTML encode the text\n text = he_1.default.encode(text);\n // Wrap contiguous emoji chars in an \"emoji span\"\n let markup = \"\";\n let emojis = \"\";\n for (const c of text) {\n const isEmoji = emojiFunctions_1.containsEmoji(c);\n // If the char is an emoji or a zero-width joiner ‍\n // then accumulate the chars in a string to be wrapped in an \"emoji span\"\n if (isEmoji || c == '\\u200D') {\n emojis += c;\n }\n else {\n if (emojis.length) {\n markup += server_1.default.renderToStaticMarkup(react_1.default.createElement(Emoji_1.default, { text: emojis }));\n emojis = \"\";\n }\n markup += c;\n }\n }\n if (emojis.length) {\n markup += server_1.default.renderToStaticMarkup(react_1.default.createElement(Emoji_1.default, { text: emojis }));\n }\n if (!plainText) {\n // Try to wrap links in tags\n markup = urlFunctions_1.wrapURLsInAnchorTags(markup, true);\n // Replace newlines with
tags\n markup = markup.replace(/(?:\\r\\n|\\r|\\n)/g, '
');\n }\n return markup;\n }\n const markup = markupText(props.text, props.plainText);\n const className = props.sentByMe ? classes.sentByMe : undefined;\n return (react_1.default.createElement(Typography_1.default, { className: className, variant: props.variant, dangerouslySetInnerHTML: { __html: markup } }));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nexports.default = react_1.default.memo(ThemTyping);\nfunction ThemTyping(props) {\n return (react_1.default.createElement(Typography_1.default, { variant: props.variant }, \"typing...\"));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nconst Avatar_1 = __importDefault(require(\"@material-ui/core/Avatar\"));\nconst Badge_1 = __importDefault(require(\"@material-ui/core/Badge\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst identicon_js_1 = __importDefault(require(\"identicon.js\"));\nconst md5_1 = __importDefault(require(\"md5\"));\nconst unknownUserAvatar_svg_1 = __importDefault(require(\"../../icons/unknownUserAvatar.svg\"));\nconst CachingDataService_1 = __importStar(require(\"../../services/data/CachingDataService\"));\nconst blobFunctions_1 = require(\"../../utils/blobFunctions\");\nconst CircularIcon_1 = __importDefault(require(\"./CircularIcon\"));\nconst useTheme_1 = __importDefault(require(\"@material-ui/core/styles/useTheme\"));\nUserAvatar.defaultProps = {\n blobUrl: null\n};\nexports.default = react_1.default.memo(UserAvatar);\nconst useStyles = makeStyles_1.default((theme) => ({\n avatar: {\n height: props => props.size === \"md\" ? theme.avatarSize.md : theme.avatarSize.sm,\n width: props => props.size === \"md\" ? theme.avatarSize.md : theme.avatarSize.sm\n },\n userOnlineMarker: {\n backgroundColor: theme.colors.green.main,\n height: props => props.size === \"md\" ? theme.avatarSize.md / 4 : theme.avatarSize.sm / 4,\n width: props => props.size === \"md\" ? theme.avatarSize.md / 4 : theme.avatarSize.sm / 4,\n borderRadius: \"50%\"\n }\n}));\nfunction UserAvatar(props) {\n let icon;\n const isLoading = react_1.useRef(false);\n const unmounted = react_1.useRef(false);\n const blobsToRevoke = react_1.useRef([]);\n const [src, setSrc] = react_1.useState(() => setInitialSrc(props));\n const classes = useStyles(props);\n const userOnlineMarkerRef = react_1.useRef(null);\n const theme = useTheme_1.default();\n react_1.useEffect(() => {\n if (!props.userId) {\n if (src) {\n setSrc(null);\n }\n return;\n }\n if (!props.imageId) {\n setSrc(buildIdenticonUrl(props.userId));\n }\n else if (!props.blobUrl && !isLoading.current) {\n // Start loading the image from the IC and once loaded set the image src\n isLoading.current = true;\n CachingDataService_1.default.getData(CachingDataService_1.DataSource.Avatar, props.imageId)\n .then((res) => {\n isLoading.current = false;\n if (res.kind !== \"success\") {\n return;\n }\n if (!unmounted.current) {\n const blobUrl = blobFunctions_1.dataToBlobUrl(res.data, null);\n blobsToRevoke.current.push(blobUrl);\n setSrc(blobUrl);\n }\n });\n }\n }, [props.userId, props.imageId]);\n react_1.useLayoutEffect(() => {\n return () => {\n unmounted.current = true;\n };\n }, []);\n // Set the boxShadow of the userOnlineMarker based on the first non-transparent parent's backgroundColor, then\n // listen for changes to that backgroundColor and update the boxShadow on each change\n react_1.useLayoutEffect(() => {\n const userOnlineMarker = userOnlineMarkerRef.current;\n if (!userOnlineMarker) {\n return;\n }\n const dot = userOnlineMarker.getElementsByClassName(\"MuiBadge-dot\")[0];\n const backgroundColorElem = getFirstNonTransparentParent(userOnlineMarker);\n const setBoxShadowColor = function () {\n const latestBackgroundColor = window.getComputedStyle(backgroundColorElem).backgroundColor;\n dot.style.boxShadow = \"0 0 0 2px \" + latestBackgroundColor;\n };\n setBoxShadowColor();\n // Listen for style / class changes or for hover started / stopped\n const observer = new MutationObserver(setBoxShadowColor);\n observer.observe(backgroundColorElem, { attributes: true });\n backgroundColorElem.addEventListener(\"mouseenter\", setBoxShadowColor);\n backgroundColorElem.addEventListener(\"mouseleave\", setBoxShadowColor);\n return () => {\n // Dispose of all the listeners\n observer.disconnect();\n backgroundColorElem.removeEventListener(\"mouseenter\", setBoxShadowColor);\n backgroundColorElem.removeEventListener(\"mouseleave\", setBoxShadowColor);\n };\n }, [src, props.isUserOnline, theme]);\n react_1.useEffect(() => {\n return () => {\n for (const blobUrl of blobsToRevoke.current) {\n URL.revokeObjectURL(blobUrl);\n }\n };\n }, []);\n if (src) {\n icon = react_1.default.createElement(Avatar_1.default, { className: classes.avatar, src: props.blobUrl ? props.blobUrl : src });\n if (props.isUserOnline) {\n icon = (react_1.default.createElement(Badge_1.default, { classes: { root: classes.avatar, badge: classes.userOnlineMarker }, variant: \"dot\", overlap: \"circular\", ref: userOnlineMarkerRef, anchorOrigin: {\n vertical: \"bottom\",\n horizontal: \"right\",\n } }, icon));\n }\n }\n else {\n icon = react_1.default.createElement(CircularIcon_1.default, { size: props.size, svg: react_1.default.createElement(unknownUserAvatar_svg_1.default, null) });\n }\n function setInitialSrc(props) {\n return props.userId && !props.imageId\n ? buildIdenticonUrl(props.userId)\n : null;\n }\n function buildIdenticonUrl(userId) {\n const identicon = new identicon_js_1.default(md5_1.default(userId), { margin: 0, format: 'svg' });\n return \"data:image/svg+xml;base64,\" + identicon.toString();\n }\n function getFirstNonTransparentParent(elem) {\n let currentElem = elem;\n do {\n const backgroundColor = window.getComputedStyle(currentElem).backgroundColor;\n if (!backgroundColor.startsWith(\"rgba\")) {\n return currentElem;\n }\n const alpha = parseInt(backgroundColor.split(\"(\")[1].split(\")\")[0].split(\",\")[3]);\n // If alpha is 0 then this element is transparent\n if (alpha > 0) {\n return currentElem;\n }\n currentElem = currentElem.parentElement;\n } while (currentElem);\n // This should never happen\n throw new Error();\n }\n return icon;\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst ListItem_1 = __importDefault(require(\"@material-ui/core/ListItem\"));\nconst ListItemIcon_1 = __importDefault(require(\"@material-ui/core/ListItemIcon\"));\nconst Typography_1 = __importDefault(require(\"@material-ui/core/Typography\"));\nconst makeStyles_1 = __importDefault(require(\"@material-ui/styles/makeStyles\"));\nconst ExpandMore_1 = __importDefault(require(\"@material-ui/icons/ExpandMore\"));\nconst UserAvatar_1 = __importDefault(require(\"./UserAvatar\"));\nconst PopOverMenu_1 = __importDefault(require(\"./PopOverMenu\"));\nexports.default = react_1.default.memo(UserListItem, shouldSkipRerender);\nUserListItem.defaultProps = {\n buttons: null,\n handleSelectUser: null\n};\nfunction shouldSkipRerender(p1, p2) {\n return p1.user.userId === p2.user.userId &&\n p1.user.username === p2.user.username &&\n p1.user.imageId === p2.user.imageId &&\n p1.user.isOnline === p2.user.isOnline;\n}\nconst useStyles = makeStyles_1.default((theme) => ({\n container: {\n position: \"relative\",\n \"&:hover .pop-over-menu-icon\": {\n visibility: \"visible\"\n }\n },\n listItem: {\n backgroundColor: theme.colors.sidePanel.backgroundColor,\n \"&:hover\": {\n backgroundColor: theme.colors.sidePanel.listItemHoverBackgroundColor,\n cursor: \"pointer\"\n }\n },\n username: {\n paddingLeft: 10,\n width: \"100%\"\n },\n menu: {\n position: \"absolute\",\n padding: 6,\n top: 3,\n right: 3,\n visibility: \"hidden\"\n }\n}));\nconst defaultOnClick = _ => { };\nfunction UserListItem(props) {\n const classes = useStyles();\n let className = classes.container;\n let onClick = defaultOnClick;\n if (props.handleSelectUser) {\n className += \" \" + classes.listItem;\n onClick = handleClick;\n }\n function handleClick(event) {\n const element = event.target;\n const clickedOnPopOver = element.closest(\".pop-over-menu-icon, .pop-over-menu\") !== null;\n if (!clickedOnPopOver) {\n props.handleSelectUser();\n }\n }\n return (react_1.default.createElement(ListItem_1.default, { onClick: onClick, className: className, divider: true },\n react_1.default.createElement(ListItemIcon_1.default, null,\n react_1.default.createElement(UserAvatar_1.default, { userId: props.user.userId, imageId: props.user.imageId, isUserOnline: props.user.isOnline, size: \"md\" })),\n react_1.default.createElement(Typography_1.default, { variant: \"body1\", className: classes.username }, props.user.username),\n props.buttons\n ? react_1.default.createElement(PopOverMenu_1.default, { icon: react_1.default.createElement(ExpandMore_1.default, null), menuItems: props.buttons, placement: \"bottom-end\", className: classes.menu + \" pop-over-menu-icon\" })\n : null));\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importStar(require(\"react\"));\nVideo.defaultProps = {\n className: \"\"\n};\nexports.default = react_1.default.memo(Video);\nfunction Video(props) {\n // For some reason it is necessary to specifically set the height of the video's parent element to that of the video\n // otherwise some spurious padding appears at the bottom of the parent element\n const videoRef = react_1.useRef(null);\n react_1.useEffect(() => {\n const ro = new ResizeObserver((entries) => {\n for (let entry of entries) {\n const parent = entry.target.parentNode;\n if (parent) {\n parent.style.height = `${entry.contentRect.height}px`;\n }\n }\n });\n if (ro.observe && videoRef.current) {\n ro.observe(videoRef.current);\n }\n }, []);\n return react_1.default.createElement(\"video\", { ref: videoRef, className: props.className, controls: true },\n react_1.default.createElement(\"source\", { src: props.src }),\n \"Your browser does not support the video tag\");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ABOUT_US = exports.UNCONFIRMED_GROUP_CHAT = exports.UNCONFIRMED_DIRECT_CHAT = exports.CONFIRMED_GROUP_CHAT = exports.CONFIRMED_DIRECT_CHAT = exports.SCAVENGE_CACHE_INTERVAL_MS = exports.UPDATE_USERS_INTERVAL_MS = exports.REFRESH_P2P_CONNECTIONS_MAX_INTERVAL_MS = exports.REFRESH_P2P_CONNECTIONS_MIN_INTERVAL_MS = exports.REFRESH_CHATS_MAX_INTERVAL_MS = exports.REFRESH_CHATS_MIN_INTERVAL_MS = exports.MARK_CURRENT_USER_AS_ONLINE_INTERVAL_MS = exports.DEFAULT_UPDATED_DATE = exports.CHUNK_SIZE_BYTES = exports.PAGE_SIZE = exports.MAX_FILE_SIZE = exports.MAX_VIDEO_SIZE = exports.MAX_AVATAR_SIZE = exports.MAX_IMAGE_SIZE = exports.PUBLIC_VAPID_KEY = exports.APP_TITLE = void 0;\nexports.APP_TITLE = \"OpenChat\";\n// https://datatracker.ietf.org/doc/html/draft-thomson-webpush-vapid\nexports.PUBLIC_VAPID_KEY = \"BD8RU5tDBbFTDFybDoWhFzlL5-mYptojI6qqqqiit68KSt17-vt33jcqLTHKhAXdSzu6pXntfT9e4LccBv-iV3A=\";\nexports.MAX_IMAGE_SIZE = 1024 * 1024;\nexports.MAX_AVATAR_SIZE = 1024 * 256;\nexports.MAX_VIDEO_SIZE = 1024 * 1024 * 5;\nexports.MAX_FILE_SIZE = 1024 * 1024;\nexports.PAGE_SIZE = 20;\nexports.CHUNK_SIZE_BYTES = 1024 * 500; // 500KB\nexports.DEFAULT_UPDATED_DATE = new Date(2000, 1, 1);\nexports.MARK_CURRENT_USER_AS_ONLINE_INTERVAL_MS = 61000; // 61 seconds\nexports.REFRESH_CHATS_MIN_INTERVAL_MS = 3000; // 3 seconds\nexports.REFRESH_CHATS_MAX_INTERVAL_MS = 19000; // 19 seconds\nexports.REFRESH_P2P_CONNECTIONS_MIN_INTERVAL_MS = 3000; // 3 seconds\nexports.REFRESH_P2P_CONNECTIONS_MAX_INTERVAL_MS = 17000; // 17 seconds\nexports.UPDATE_USERS_INTERVAL_MS = 37000; // 37 seconds\nexports.SCAVENGE_CACHE_INTERVAL_MS = 60000; // 1 minute\nexports.CONFIRMED_DIRECT_CHAT = \"cd\";\nexports.CONFIRMED_GROUP_CHAT = \"cg\";\nexports.UNCONFIRMED_DIRECT_CHAT = \"ud\";\nexports.UNCONFIRMED_GROUP_CHAT = \"ug\";\nexports.ABOUT_US = {\n title: \"TEST MODE\",\n text: \"OpenChat is running in test mode. Maximum users 100,000. Old media files scavenged. Dummy cycle balance. Accounts may get reset on main release expected in November. Enjoy! - OpenChat devs\",\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst getUpdatedChats_1 = __importStar(require(\"../actions/chats/getUpdatedChats\"));\nconst ExponentialBackoffRecurringTaskRunner_1 = __importStar(require(\"./ExponentialBackoffRecurringTaskRunner\"));\nconst constants_1 = require(\"../constants\");\nconst store_1 = __importDefault(require(\"../store\"));\nclass ChatsUpdater {\n constructor() {\n this.startNew = (chatsSyncedUpTo) => {\n if (this.taskRunner) {\n this.taskRunner.stop();\n }\n this.taskRunner = ExponentialBackoffRecurringTaskRunner_1.default.startNew(() => this.getUpdates(chatsSyncedUpTo), constants_1.REFRESH_CHATS_MIN_INTERVAL_MS, constants_1.REFRESH_CHATS_MAX_INTERVAL_MS, 1.2, ExponentialBackoffRecurringTaskRunner_1.StartOptions.WaitBeforeFirstRun);\n };\n this.triggerUpdate = () => {\n return this.taskRunner\n ? this.taskRunner.restart(ExponentialBackoffRecurringTaskRunner_1.StartOptions.AwaitFirstRun)\n : Promise.resolve();\n };\n this.stop = () => {\n if (this.taskRunner) {\n this.taskRunner.stop();\n this.taskRunner = undefined;\n }\n };\n this.getUpdates = (chatsSyncedUpTo) => __awaiter(this, void 0, void 0, function* () {\n const result = yield store_1.default.dispatch(getUpdatedChats_1.default(chatsSyncedUpTo));\n return result.type === getUpdatedChats_1.GET_UPDATED_CHATS_SUCCEEDED && result.payload.chats.length > 0;\n });\n }\n}\nconst chatsUpdater = new ChatsUpdater();\nexports.default = chatsUpdater;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst store_1 = __importDefault(require(\"../store\"));\nconst userTyping_1 = require(\"../actions/chats/userTyping\");\nconst USER_TYPING_EVENT_MIN_INTERVAL_MS = 1000; // 1 second\nconst MARK_TYPING_STOPPED_INTERVAL_MS = 5000; // 5 seconds\nclass CurrentUserTypingHandler {\n constructor() {\n this.chatId = null;\n this.lastUpdated = null;\n this.currentUserStoppedTypingTimeoutId = null;\n this.markTyping = (chatId) => {\n const now = new Date();\n if (this.chatId) {\n if (chatId !== this.chatId) {\n this.markTypingStopped(this.chatId);\n }\n else if (this.lastUpdated && now.getTime() - this.lastUpdated.getTime() < USER_TYPING_EVENT_MIN_INTERVAL_MS) {\n return;\n }\n }\n this.chatId = chatId;\n this.lastUpdated = now;\n const event = {\n type: userTyping_1.CURRENT_USER_TYPING,\n payload: chatId\n };\n store_1.default.dispatch(event);\n if (this.currentUserStoppedTypingTimeoutId) {\n clearTimeout(this.currentUserStoppedTypingTimeoutId);\n }\n this.currentUserStoppedTypingTimeoutId = setTimeout(() => this.markTypingStopped(chatId), MARK_TYPING_STOPPED_INTERVAL_MS);\n };\n this.markTypingStopped = (chatId) => {\n if (this.chatId !== chatId) {\n return;\n }\n const event = {\n type: userTyping_1.CURRENT_USER_STOPPED_TYPING,\n payload: chatId\n };\n store_1.default.dispatch(event);\n this.chatId = null;\n this.lastUpdated = null;\n if (this.currentUserStoppedTypingTimeoutId) {\n clearTimeout(this.currentUserStoppedTypingTimeoutId);\n this.currentUserStoppedTypingTimeoutId = null;\n }\n };\n }\n}\nconst handler = new CurrentUserTypingHandler();\nexports.default = handler;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StartOptions = void 0;\nclass ExponentialBackoffRecurringTaskRunner {\n constructor(task, minIntervalMs, maxIntervalMs, intervalMultiplier) {\n this.timeoutId = null;\n this.cancel = null;\n this.stopped = false;\n this.start = (options) => {\n return this.run(options);\n };\n this.restart = (options) => {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n return this.run(options);\n };\n this.stop = () => {\n this.stopped = true;\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n };\n this.run = (options) => __awaiter(this, void 0, void 0, function* () {\n if (this.stopped) {\n return;\n }\n let nextIntervalMs = this.minIntervalMs;\n const runInLoop = () => {\n if (this.stopped)\n return;\n this.timeoutId = setTimeout((_) => __awaiter(this, void 0, void 0, function* () {\n let reset = false;\n try {\n reset = yield this.task();\n }\n finally {\n if (reset) {\n nextIntervalMs = this.minIntervalMs;\n }\n else {\n nextIntervalMs = Math.min(nextIntervalMs * this.intervalMultiplier, this.maxIntervalMs);\n }\n }\n runInLoop();\n }), nextIntervalMs);\n };\n switch (options) {\n case StartOptions.TriggerTaskAndReturn:\n this.task().finally(runInLoop);\n break;\n case StartOptions.WaitBeforeFirstRun:\n runInLoop();\n break;\n case StartOptions.AwaitFirstRun: {\n try {\n yield this.task();\n }\n finally {\n runInLoop();\n }\n break;\n }\n }\n });\n this.task = task;\n this.minIntervalMs = minIntervalMs;\n this.maxIntervalMs = maxIntervalMs;\n this.intervalMultiplier = intervalMultiplier;\n }\n // When the task returns true the interval will be reset to the minimum\n static startNew(task, minIntervalMs, maxIntervalMs, intervalMultiplier, options) {\n if (intervalMultiplier <= 1) {\n throw new Error(\"'intervalMultiplier' must be > 1\");\n }\n const taskRunner = new ExponentialBackoffRecurringTaskRunner(task, minIntervalMs, maxIntervalMs, intervalMultiplier);\n taskRunner.start(options);\n return taskRunner;\n }\n}\nexports.default = ExponentialBackoffRecurringTaskRunner;\nvar StartOptions;\n(function (StartOptions) {\n StartOptions[StartOptions[\"TriggerTaskAndReturn\"] = 0] = \"TriggerTaskAndReturn\";\n StartOptions[StartOptions[\"WaitBeforeFirstRun\"] = 1] = \"WaitBeforeFirstRun\";\n StartOptions[StartOptions[\"AwaitFirstRun\"] = 2] = \"AwaitFirstRun\";\n})(StartOptions = exports.StartOptions || (exports.StartOptions = {}));\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst store_1 = __importDefault(require(\"../store\"));\nconst markMessagesAsReadServerSync_1 = __importDefault(require(\"../actions/chats/markMessagesAsReadServerSync\"));\nconst SYNC_DELAY_MS = 3000;\nclass MarkAsReadHandler {\n constructor() {\n this.pending = null;\n this.markRead = (chatId, messageIds) => {\n if (this.pending) {\n if (this.pending.chatId !== chatId) {\n this.updateServer();\n }\n else {\n // Clear the current timeout and start waiting again, so we flush to the server once no new messages are\n // marked as read for SYNC_DELAY_MS\n clearTimeout(this.pending.timeoutId);\n this.pending.timeoutId = setTimeout(() => this.updateServer(), SYNC_DELAY_MS);\n }\n }\n if (!this.pending) {\n this.pending = {\n chatId,\n messageIds: new Set(),\n timeoutId: setTimeout(() => this.updateServer(), SYNC_DELAY_MS)\n };\n }\n for (const messageId of messageIds) {\n this.pending.messageIds.add(messageId);\n }\n };\n this.updateServer = () => {\n const pending = this.pending;\n if (!pending || !pending.messageIds.size)\n return;\n const ordered = Array.from(pending.messageIds).sort();\n const ranges = [];\n let current = null;\n for (const messageId of ordered) {\n if (!current) {\n current = [messageId, messageId];\n }\n else if (messageId === current[1] + 1) {\n current[1] = messageId;\n }\n else {\n ranges.push(current);\n current = [messageId, messageId];\n }\n }\n if (current) {\n ranges.push(current);\n }\n ranges.forEach(r => store_1.default.dispatch(markMessagesAsReadServerSync_1.default(pending.chatId, r[0], r[1])));\n this.pending = null;\n };\n }\n}\nconst handler = new MarkAsReadHandler();\nexports.default = handler;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass RecurringTaskRunner {\n constructor(task, intervalMs, waitBeforeFirstRun) {\n this.timeoutId = null;\n this.cancel = null;\n this.stopped = false;\n this.start = () => {\n if (this.stopped) {\n return;\n }\n const runInLoop = () => {\n if (this.stopped)\n return;\n this.timeoutId = setTimeout(_ => this.task().finally(runInLoop), this.intervalMs);\n };\n if (this.waitBeforeFirstRun) {\n runInLoop();\n }\n else {\n this.task().finally(runInLoop);\n }\n };\n this.stop = () => {\n this.stopped = true;\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n };\n this.task = task;\n this.intervalMs = intervalMs;\n this.waitBeforeFirstRun = waitBeforeFirstRun;\n }\n static startNew(task, intervalMs, waitBeforeFirstRun) {\n const taskRunner = new RecurringTaskRunner(task, intervalMs, waitBeforeFirstRun);\n taskRunner.start();\n return taskRunner;\n }\n}\nexports.default = RecurringTaskRunner;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst store_1 = __importDefault(require(\"../store\"));\nconst userTyping_1 = require(\"../actions/chats/userTyping\");\nconst MARK_TYPING_STOPPED_INTERVAL_MS = 5000; // 5 seconds\nclass RemoteUserTypingHandler {\n constructor() {\n this.userStoppedTypingTimeoutIds = new Map();\n this.markTyping = (chatId, userId) => {\n const event = {\n type: userTyping_1.REMOTE_USER_TYPING,\n payload: {\n chatId,\n userId\n }\n };\n store_1.default.dispatch(event);\n const key = this.buildTimeoutKey(chatId, userId);\n const existingTimeoutId = this.userStoppedTypingTimeoutIds.get(key);\n if (existingTimeoutId) {\n clearTimeout(existingTimeoutId);\n }\n const newTimeoutId = setTimeout(() => this.markTypingStopped(chatId, userId), MARK_TYPING_STOPPED_INTERVAL_MS);\n this.userStoppedTypingTimeoutIds.set(key, newTimeoutId);\n };\n this.markTypingStopped = (chatId, userId) => {\n const key = this.buildTimeoutKey(chatId, userId);\n const timeoutId = this.userStoppedTypingTimeoutIds.get(key);\n if (timeoutId) {\n this.userStoppedTypingTimeoutIds.delete(key);\n clearTimeout(timeoutId);\n const event = {\n type: userTyping_1.REMOTE_USER_STOPPED_TYPING,\n payload: {\n chatId,\n userId\n }\n };\n store_1.default.dispatch(event);\n }\n };\n this.buildTimeoutKey = (chatId, userId) => `${chatId}-${userId}`;\n }\n}\nconst handler = new RemoteUserTypingHandler();\nexports.default = handler;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst KEY = \"SELECTED_THEME\";\nclass SelectedThemeCache {\n constructor() {\n this.tryGet = () => {\n const value = localStorage.getItem(KEY);\n if (value === null) {\n return null;\n }\n return parseInt(value);\n };\n this.set = (value) => {\n localStorage.setItem(KEY, value.toString());\n };\n }\n}\nconst cache = new SelectedThemeCache();\nexports.default = cache;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst notifySessionExpired_1 = __importDefault(require(\"../actions/signin/notifySessionExpired\"));\nconst store_1 = __importDefault(require(\"../store\"));\nconst authClient_1 = require(\"../utils/authClient\");\nconst ONE_MINUTE_MILLIS = 60 * 1000;\nclass SessionExpirationHandler {\n constructor() {\n this.startSession = () => {\n this.reset();\n this.handleSessionExpiry();\n };\n this.handleSessionExpiry = () => {\n const durationUntilSessionExpiresMs = authClient_1.getTimeUntilSessionExpiryMs();\n if (durationUntilSessionExpiresMs) {\n const durationUntilLogoutMs = durationUntilSessionExpiresMs - ONE_MINUTE_MILLIS;\n // If when the session starts there is < 5 minutes remaining, log the user out now and force them to renew\n // their session\n if (durationUntilLogoutMs <= 5 * ONE_MINUTE_MILLIS) {\n this.logoutAndReset();\n }\n else {\n // Log the user out 1 minute before their session expires\n this.timeout = setTimeout(() => this.logoutAndReset(), durationUntilLogoutMs);\n }\n }\n };\n this.logoutAndReset = () => __awaiter(this, void 0, void 0, function* () {\n yield store_1.default.dispatch(notifySessionExpired_1.default());\n this.reset();\n });\n this.reset = () => {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n };\n }\n}\nconst handler = new SessionExpirationHandler();\nexports.default = handler;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst chatFunctions = __importStar(require(\"./model/chats\"));\nclass UnreadMessageDetector {\n constructor(chat) {\n this.isUnread = (message) => {\n const isUnreadOnServer = this.unreadClientMessageIds.has(message.clientMessageId) ||\n (\"id\" in message && this.unreadMessageIds.has(message.id));\n if (!isUnreadOnServer) {\n return false;\n }\n const isPendingBeingMarkedAsRead = this.markAsReadByClientIdPending.has(message.clientMessageId) ||\n (\"id\" in message && this.markAsReadPending.has(message.id));\n return !isPendingBeingMarkedAsRead;\n };\n this.isUnreadByThem = (message) => {\n if (\"id\" in message) {\n const isUnreadOnServer = this.unreadByThem.has(message.id);\n if (!isUnreadOnServer) {\n return false;\n }\n const isPendingBeingMarkedAsRead = this.markAsReadByThemPending.has(message.id) ||\n this.markAsReadByThemByClientIdPending.has(message.clientMessageId);\n return !isPendingBeingMarkedAsRead;\n }\n else {\n return !this.markAsReadByThemByClientIdPending.has(message.clientMessageId);\n }\n };\n if (chatFunctions.isConfirmedChat(chat)) {\n this.unreadMessageIds = new Set(chat.unreadMessageIds);\n this.unreadClientMessageIds = new Set(chat.unreadClientMessageIds);\n this.markAsReadPending = new Set(chat.markAsReadPending);\n this.markAsReadByClientIdPending = new Set(chat.markAsReadByClientIdPending);\n if (chatFunctions.isDirectChat(chat)) {\n this.unreadByThem = new Set(chat.unreadByThemMessageIds);\n this.markAsReadByThemPending = new Set(chat.markAsReadByThemPendingSync);\n this.markAsReadByThemByClientIdPending = new Set(chat.markAsReadByThemByClientIdPendingSync);\n }\n else {\n this.unreadByThem = new Set(chat.unreadByAnyMessageIds);\n this.markAsReadByThemPending = new Set();\n this.markAsReadByThemByClientIdPending = new Set();\n }\n }\n else {\n this.unreadMessageIds = new Set();\n this.unreadClientMessageIds = new Set();\n this.markAsReadPending = new Set();\n this.markAsReadByClientIdPending = new Set();\n this.unreadByThem = new Set();\n this.markAsReadByThemPending = new Set();\n this.markAsReadByThemByClientIdPending = new Set();\n }\n }\n}\nexports.default = UnreadMessageDetector;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst store_1 = __importDefault(require(\"../store\"));\nconst markMessagesAsRead_1 = require(\"../actions/chats/markMessagesAsRead\");\nconst RecurringTaskRunner_1 = __importDefault(require(\"./RecurringTaskRunner\"));\nconst INTERVAL_MS = 100;\nconst COUNT_REQUIRED = 6;\n// This class takes a snapshot of which unread messages are visible every 'INTERVAL_MS', once a message has been visible\n// in 'COUNT_REQUIRED' consecutive snapshots, it will be marked as read\nclass UnreadMessagesHandler {\n constructor(chatId) {\n this.stopped = false;\n this.timeout = null;\n this.messageIdToAppearanceCountMap = new Map();\n this.taskRunner = null;\n this.stop = () => {\n this.pause();\n this.stopped = true;\n };\n this.resume = () => {\n if (this.stopped || this.taskRunner) {\n return;\n }\n this.taskRunner = RecurringTaskRunner_1.default.startNew(this.runSingleIteration, INTERVAL_MS, false);\n };\n this.pause = () => {\n if (this.taskRunner) {\n this.taskRunner.stop();\n this.taskRunner = null;\n this.messageIdToAppearanceCountMap.clear();\n }\n };\n this.runSingleIteration = () => {\n const visibleUnreadMessages = this.getVisibleUnreadMessages();\n const newMessageIdToAppearanceCountMap = new Map();\n const messagesToMarkAsRead = [];\n const messagesToMarkAsReadByClientId = [];\n for (const { clientMessageId, messageId } of visibleUnreadMessages) {\n const prevCount = this.messageIdToAppearanceCountMap.get(clientMessageId);\n if (prevCount) {\n const count = prevCount + 1;\n if (count >= COUNT_REQUIRED) {\n if (messageId) {\n messagesToMarkAsRead.push(messageId);\n }\n else {\n messagesToMarkAsReadByClientId.push(clientMessageId);\n }\n }\n else {\n newMessageIdToAppearanceCountMap.set(clientMessageId, count);\n }\n }\n else {\n newMessageIdToAppearanceCountMap.set(clientMessageId, 1);\n }\n }\n if (messagesToMarkAsRead.length) {\n store_1.default.dispatch(markMessagesAsRead_1.markMessagesAsReadLocally(this.chatId, messagesToMarkAsRead));\n }\n if (messagesToMarkAsReadByClientId.length) {\n store_1.default.dispatch(markMessagesAsRead_1.markMessagesAsReadByClientIdLocally(this.chatId, messagesToMarkAsReadByClientId));\n }\n this.messageIdToAppearanceCountMap = newMessageIdToAppearanceCountMap;\n return Promise.resolve();\n };\n this.getVisibleUnreadMessages = () => {\n const messagesDiv = document.getElementById(\"messages\");\n const visibleUnreadMessageIds = [];\n if (!messagesDiv) {\n return visibleUnreadMessageIds;\n }\n const unreadMessageElements = messagesDiv.getElementsByClassName(\"unread\");\n if (!unreadMessageElements.length) {\n return visibleUnreadMessageIds;\n }\n const outerBox = messagesDiv.getBoundingClientRect();\n const min = outerBox.top - 10;\n const max = outerBox.bottom - 30;\n for (let i = 0; i < unreadMessageElements.length; i++) {\n const element = unreadMessageElements[i];\n const box = element.getBoundingClientRect();\n if (box.top < min || box.top > max) {\n continue;\n }\n const clientMessageId = element.id;\n const messageIdAttr = element.getAttribute(\"data-message-id\");\n const messageId = messageIdAttr ? parseInt(messageIdAttr) : null;\n visibleUnreadMessageIds.push({\n clientMessageId,\n messageId\n });\n }\n return visibleUnreadMessageIds;\n };\n this.chatId = chatId;\n document.onvisibilitychange = () => {\n if (document.hidden) {\n this.pause();\n }\n else {\n this.resume();\n }\n };\n }\n}\nexports.default = UnreadMessagesHandler;\nUnreadMessagesHandler.startNew = (chatId) => {\n const handler = new UnreadMessagesHandler(chatId);\n if (!document.hidden) {\n handler.resume();\n }\n return handler;\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pushOrReplaceChat = exports.replaceLatestWithHome = exports.extractChatIdFromLocation = void 0;\nconst u64 = __importStar(require(\"../utils/u64Functions\"));\nconst extractChatIdFromLocation = () => {\n let path = document.location.pathname;\n if (path.length > 0 && path[0] == '/') {\n path = path.slice(1);\n }\n const parts = path.split('/');\n if (parts.length > 0 && parts[0].length > 0) {\n try {\n return u64.fromHex(parts[0]);\n }\n catch (_a) {\n return null;\n }\n }\n return null;\n};\nexports.extractChatIdFromLocation = extractChatIdFromLocation;\nfunction replaceLatestWithHome() {\n if (!history)\n return;\n history.replaceState(null, \"Home\", \"/\");\n}\nexports.replaceLatestWithHome = replaceLatestWithHome;\nfunction pushOrReplaceChat(chatId, replace) {\n if (!history)\n return;\n const hexId = u64.toHex(chatId);\n const method = replace ? \"replaceState\" : \"pushState\";\n history[method]({ chatId }, \"\", `/${hexId}`);\n}\nexports.pushOrReplaceChat = pushOrReplaceChat;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getContentAsText = void 0;\nconst cycles_1 = require(\"../formatters/cycles\");\nfunction getContentAsText(content) {\n let text;\n if (content.kind === \"text\") {\n text = content.text;\n }\n else if (content.kind === \"media\") {\n text = buildTextForMediaContent(content);\n }\n else if (content.kind === \"file\") {\n text = content.name;\n }\n else if (content.kind === \"cycles\") {\n text = cycles_1.formatCycles(content.amount);\n }\n else {\n throw new Error(\"Unrecognised content type - \" + content.kind);\n }\n return text.trim();\n}\nexports.getContentAsText = getContentAsText;\nfunction buildTextForMediaContent(content) {\n if (content.caption)\n return content.caption;\n const mimeType = content.mimeType;\n const mimeTypeLower = mimeType.toLowerCase();\n if (mimeTypeLower.startsWith(\"video/\")) {\n return \"video\";\n }\n else if (mimeTypeLower.startsWith(\"image/\")) {\n return \"image\";\n }\n else {\n return \"file\";\n }\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getClientMessageId = exports.scrollToMessage = exports.getScrollTopAndBottom = exports.freeMediaData = exports.tryFindMessge = exports.getMinMessageIdOnServer = exports.getMaxMessageId = exports.getMinMessageId = exports.markMessagesAsReadOnServer = exports.markMessagesAsReadByClientIdRemotely = exports.markMessagesAsReadRemotely = exports.markMessagesAsReadByClientIdLocally = exports.markMessagesAsReadLocally = exports.getUsers = exports.restoreDraftMessage = exports.saveDraftMessage = exports.maintainScrollBottom = exports.maintainScrollTop = exports.maintainScroll = exports.findDirectChatIndex = exports.findChatIndex = exports.sortChatsAndReturnSelectedIndex = exports.removeChat = exports.tryFindChat = exports.getChatByUserId = exports.tryGetChat = exports.getConfirmedChat = exports.getChat = exports.extendMessagesRangeUpTo = exports.extendMessagesRangeDownTo = exports.queueMissingMessagesForDownload = exports.addP2PMessage = exports.addUnconfirmedMessage = exports.addMessages = exports.addMessage = exports.confirmDirectChat = exports.mergeUpdates = exports.newUnconfirmedGroupChat = exports.newUnconfirmedDirectChat = exports.newConfirmedGroupChat = exports.newConfirmedDirectChat = exports.getUnreadChatCount = exports.getUnreadMessageCount = exports.isConfirmedChat = exports.isGroupChat = exports.isDirectChat = exports.generateChatId = void 0;\nconst setFunctions = __importStar(require(\"../../utils/setFunctions\"));\nconst MarkAsReadHandler_1 = __importDefault(require(\"../MarkAsReadHandler\"));\nconst constants_1 = require(\"../../constants\");\nfunction generateChatId() {\n const array = new Uint32Array(4);\n window.crypto.getRandomValues(array);\n let chatId = BigInt(array[0]);\n chatId += BigInt(array[1]) << BigInt(32);\n chatId += BigInt(array[2]) << BigInt(64);\n chatId += BigInt(array[3]) << BigInt(96);\n return chatId;\n}\nexports.generateChatId = generateChatId;\nconst isDirectChat = (chat) => {\n return chat.kind === constants_1.CONFIRMED_DIRECT_CHAT || chat.kind === constants_1.UNCONFIRMED_DIRECT_CHAT;\n};\nexports.isDirectChat = isDirectChat;\nconst isGroupChat = (chat) => {\n return chat.kind === constants_1.CONFIRMED_GROUP_CHAT || chat.kind === constants_1.UNCONFIRMED_GROUP_CHAT;\n};\nexports.isGroupChat = isGroupChat;\nconst isConfirmedChat = (chat) => {\n return chat.kind === constants_1.CONFIRMED_DIRECT_CHAT || chat.kind === constants_1.CONFIRMED_GROUP_CHAT;\n};\nexports.isConfirmedChat = isConfirmedChat;\nconst getUnreadMessageCount = (chat) => {\n return exports.isConfirmedChat(chat)\n ? chat.unreadMessageIds.length + chat.unreadClientMessageIds.length - chat.markAsReadPending.length - chat.markAsReadByClientIdPending.length\n : 0;\n};\nexports.getUnreadMessageCount = getUnreadMessageCount;\nconst getUnreadChatCount = (chats) => {\n let count = 0;\n for (const chat of chats) {\n if (exports.getUnreadMessageCount(chat)) {\n count++;\n }\n }\n return count;\n};\nexports.getUnreadChatCount = getUnreadChatCount;\nconst newConfirmedDirectChat = (chatId, them, displayDate, lastUpdated, messages = [], unreadMessageIds = [], unreadByThemMessageIds = [], muted = false) => {\n const earliestConfirmedMessageId = exports.getMinMessageId(messages);\n const latestConfirmedMessageId = exports.getMaxMessageId(messages);\n return {\n kind: constants_1.CONFIRMED_DIRECT_CHAT,\n chatId,\n them,\n displayDate,\n lastUpdated,\n unreadMessageIds,\n unreadClientMessageIds: [],\n markAsReadPending: [],\n markAsReadByClientIdPending: [],\n unreadByThemMessageIds,\n markAsReadByThemPendingSync: [],\n markAsReadByThemByClientIdPendingSync: [],\n messages,\n messagesToDownload: [],\n messagesDownloading: [],\n minLocalMessageId: earliestConfirmedMessageId,\n maxLocalMessageId: latestConfirmedMessageId,\n minimumUnconfirmedMessageIndex: 0,\n scrollTop: null,\n scrollBottom: 0,\n draftMessage: \"\",\n themTyping: false,\n replyContext: null,\n messageToSelect: null,\n muted,\n };\n};\nexports.newConfirmedDirectChat = newConfirmedDirectChat;\nconst newConfirmedGroupChat = (chatId, subject, participants, displayDate, lastUpdated, minMessageIdOnServer, messages = [], unreadMessageIds = [], unreadByAnyMessageIds = [], muted = false) => {\n const earliestConfirmedMessageId = exports.getMinMessageId(messages);\n const latestConfirmedMessageId = exports.getMaxMessageId(messages);\n return {\n kind: constants_1.CONFIRMED_GROUP_CHAT,\n chatId,\n subject,\n participants,\n displayDate,\n lastUpdated,\n minMessageIdOnServer,\n unreadMessageIds,\n unreadClientMessageIds: [],\n markAsReadPending: [],\n markAsReadByClientIdPending: [],\n unreadByAnyMessageIds,\n messages,\n messagesToDownload: [],\n messagesDownloading: [],\n minLocalMessageId: earliestConfirmedMessageId,\n maxLocalMessageId: latestConfirmedMessageId,\n minimumUnconfirmedMessageIndex: 0,\n scrollTop: null,\n scrollBottom: 0,\n draftMessage: \"\",\n participantsTyping: [],\n replyContext: null,\n messageToSelect: null,\n muted,\n };\n};\nexports.newConfirmedGroupChat = newConfirmedGroupChat;\nconst newUnconfirmedDirectChat = (userId, chatId) => {\n return {\n kind: constants_1.UNCONFIRMED_DIRECT_CHAT,\n chatId,\n them: userId,\n messages: [],\n scrollTop: null,\n scrollBottom: 0,\n draftMessage: \"\",\n replyContext: null\n };\n};\nexports.newUnconfirmedDirectChat = newUnconfirmedDirectChat;\nconst newUnconfirmedGroupChat = (chatId, subject, users) => {\n return {\n kind: constants_1.UNCONFIRMED_GROUP_CHAT,\n chatId,\n subject,\n initialParticipants: users,\n messages: [],\n scrollTop: null,\n scrollBottom: 0,\n draftMessage: \"\",\n replyContext: null\n };\n};\nexports.newUnconfirmedGroupChat = newUnconfirmedGroupChat;\nconst mergeUpdates = (currentChat, updatedChat, isSelectedChat) => {\n // These messages have just come from the server so are all of type LocalMessage\n const messages = updatedChat.messages;\n const chat = currentChat.kind === constants_1.UNCONFIRMED_DIRECT_CHAT\n ? exports.confirmDirectChat(currentChat, updatedChat.chatId)\n : currentChat;\n exports.addMessages(chat, messages, isSelectedChat);\n if (updatedChat.lastUpdated > chat.lastUpdated) {\n chat.lastUpdated = updatedChat.lastUpdated;\n chat.displayDate = updatedChat.displayDate;\n chat.unreadMessageIds = updatedChat.unreadMessageIds;\n if (exports.isDirectChat(chat)) {\n chat.unreadByThemMessageIds = updatedChat.unreadByThemMessageIds;\n }\n else {\n chat.unreadByAnyMessageIds = updatedChat.unreadByAnyMessageIds;\n }\n }\n return chat;\n};\nexports.mergeUpdates = mergeUpdates;\nconst confirmDirectChat = (chat, chatId) => {\n return exports.newConfirmedDirectChat(chatId, chat.them, constants_1.DEFAULT_UPDATED_DATE, constants_1.DEFAULT_UPDATED_DATE, chat.messages);\n};\nexports.confirmDirectChat = confirmDirectChat;\nconst addMessage = (chat, message, isSelectedChat) => {\n exports.addMessages(chat, [message], isSelectedChat);\n};\nexports.addMessage = addMessage;\nconst addMessages = (chat, messages, isSelectedChat) => {\n if (messages.length === 0)\n return;\n // Ensure messages are sorted by id (they should be already so this should only do a single iteration)\n messages.sort((a, b) => a.id - b.id);\n exports.extendMessagesRangeDownTo(chat, messages[0].id, isSelectedChat);\n exports.extendMessagesRangeUpTo(chat, messages[messages.length - 1].id, isSelectedChat);\n for (const message of messages) {\n setFunctions.remove(chat.messagesToDownload, message.id);\n const messageIndex = getMessageIndex(chat.messages, message.id);\n const currentMessage = chat.messages[messageIndex];\n if (currentMessage.kind === \"local\") {\n // If the current message is 'local' then this message has already been added\n continue;\n }\n chat.messages[messageIndex] = message;\n const unconfirmedMessage = removeMatchingUnconfirmedMessage(chat, message.clientMessageId);\n if (unconfirmedMessage) {\n // If we are confirming the message then we know the content hasn't changed so we keep the old\n // reference to avoid re-renders in particular for media messages\n message.content = unconfirmedMessage.content;\n }\n if (setFunctions.remove(chat.unreadClientMessageIds, message.clientMessageId)) {\n setFunctions.add(chat.unreadMessageIds, message.id);\n // We only add to markAsReadByClientIdPending if we don't yet know the messageId, so if this incoming message\n // matches one in the pending queue, now that we know the messageId we can mark it as read on the server\n if (setFunctions.remove(chat.markAsReadByClientIdPending, message.clientMessageId)) {\n setFunctions.add(chat.markAsReadPending, message.id);\n MarkAsReadHandler_1.default.markRead(chat.chatId, [message.id]);\n }\n }\n if (chat.displayDate < message.date) {\n chat.displayDate = message.date;\n }\n }\n exports.queueMissingMessagesForDownload(chat);\n};\nexports.addMessages = addMessages;\nconst addUnconfirmedMessage = (chat, clientMessageId, content, repliesTo) => {\n const message = {\n kind: \"unconfirmed\",\n clientMessageId,\n date: new Date(),\n content,\n repliesTo\n };\n chat.messages.push(message);\n chat.scrollBottom = 0;\n chat.scrollTop = null;\n};\nexports.addUnconfirmedMessage = addUnconfirmedMessage;\nconst addP2PMessage = (chat, message) => {\n chat.messages.push(message);\n chat.unreadClientMessageIds.push(message.clientMessageId);\n chat.displayDate = message.date;\n};\nexports.addP2PMessage = addP2PMessage;\nconst queueMissingMessagesForDownload = (chat) => {\n const missingMessages = chat.messages.filter(m => m.kind === \"remote\").map(m => m.id);\n setFunctions.unionWith(chat.messagesToDownload, missingMessages);\n};\nexports.queueMissingMessagesForDownload = queueMissingMessagesForDownload;\nconst extendMessagesRangeDownTo = (chat, messageId, isSelectedChat) => {\n if (!chat.minLocalMessageId) {\n chat.messages.splice(0, 0, { kind: \"remote\", id: messageId });\n chat.maxLocalMessageId = messageId;\n }\n else if (messageId >= chat.minLocalMessageId) {\n return;\n }\n else {\n const toPrepend = [];\n for (let id = messageId; id < chat.minLocalMessageId; id++) {\n toPrepend.push({ kind: \"remote\", id });\n }\n chat.messages.splice(0, 0, ...toPrepend);\n if (isSelectedChat) {\n exports.maintainScrollBottom(chat);\n }\n }\n chat.minLocalMessageId = messageId;\n};\nexports.extendMessagesRangeDownTo = extendMessagesRangeDownTo;\nconst extendMessagesRangeUpTo = (chat, messageId, isSelectedChat) => {\n if (!chat.maxLocalMessageId) {\n chat.messages.splice(0, 0, { kind: \"remote\", id: messageId });\n chat.minLocalMessageId = messageId;\n }\n else if (messageId <= chat.maxLocalMessageId) {\n return;\n }\n else {\n const toAdd = [];\n for (let id = chat.maxLocalMessageId + 1; id <= messageId; id++) {\n toAdd.push({ kind: \"remote\", id });\n }\n chat.messages.splice(getMessageIndex(chat.messages, chat.maxLocalMessageId + 1), 0, ...toAdd);\n if (isSelectedChat) {\n exports.maintainScroll(chat);\n }\n }\n chat.maxLocalMessageId = messageId;\n};\nexports.extendMessagesRangeUpTo = extendMessagesRangeUpTo;\nconst getChat = (chats, chatId) => {\n return exports.tryFindChat(chats, { chatId });\n};\nexports.getChat = getChat;\n// Only call this if you know that the chat is already a confirmed chat\nconst getConfirmedChat = (chats, chatId) => {\n return exports.tryFindChat(chats, { chatId });\n};\nexports.getConfirmedChat = getConfirmedChat;\nconst tryGetChat = (chats, chatId) => {\n return exports.tryFindChat(chats, { chatId });\n};\nexports.tryGetChat = tryGetChat;\nconst getChatByUserId = (chats, userId) => {\n return exports.tryFindChat(chats, { userId });\n};\nexports.getChatByUserId = getChatByUserId;\nconst tryFindChat = (chats, filter) => {\n let index = -1;\n if (index === -1 && filter.chatId) {\n index = exports.findChatIndex(chats, filter.chatId);\n }\n if (index === -1 && filter.userId) {\n index = exports.findDirectChatIndex(chats, filter.userId);\n }\n if (index === -1) {\n return [null, -1];\n }\n return [chats[index], index];\n};\nexports.tryFindChat = tryFindChat;\nconst removeChat = (chats, chatId) => {\n const index = chats.findIndex(c => chatId === c.chatId);\n if (index >= 0) {\n chats.splice(index, 1);\n }\n};\nexports.removeChat = removeChat;\nconst sortChatsAndReturnSelectedIndex = (chats, selectedIndex) => {\n const selectedChat = selectedIndex !== null ? chats[selectedIndex] : null;\n chats.sort((a, b) => {\n if (\"displayDate\" in a) {\n if (\"displayDate\" in b) {\n // If both are confirmed then compare the display dates\n return b.displayDate.getTime() - a.displayDate.getTime();\n }\n // If only 'a' is confirmed, then 'b' should appear first\n return 1;\n }\n // If only 'b' is confirmed, then 'a' should appear first\n if (\"displayDate\" in b) {\n return -1;\n }\n // If neither are confirmed then treat them equally (this should be extremely rare)\n return 0;\n });\n return selectedChat !== null ? chats.indexOf(selectedChat) : null;\n};\nexports.sortChatsAndReturnSelectedIndex = sortChatsAndReturnSelectedIndex;\nconst findChatIndex = (chats, chatId) => {\n return chats.findIndex(c => chatId === c.chatId);\n};\nexports.findChatIndex = findChatIndex;\nconst findDirectChatIndex = (chats, userId) => {\n return chats.findIndex(c => \"them\" in c && userId === c.them);\n};\nexports.findDirectChatIndex = findDirectChatIndex;\nconst maintainScroll = (chat) => {\n if (isScrolledToBottom()) {\n exports.maintainScrollBottom(chat);\n }\n else {\n exports.maintainScrollTop(chat);\n }\n};\nexports.maintainScroll = maintainScroll;\nconst maintainScrollTop = (chat) => {\n const scrollValues = exports.getScrollTopAndBottom();\n if (scrollValues) {\n chat.scrollTop = scrollValues[0];\n chat.scrollBottom = null;\n }\n};\nexports.maintainScrollTop = maintainScrollTop;\nconst maintainScrollBottom = (chat) => {\n const scrollValues = exports.getScrollTopAndBottom();\n if (scrollValues) {\n chat.scrollBottom = scrollValues[1];\n chat.scrollTop = null;\n }\n};\nexports.maintainScrollBottom = maintainScrollBottom;\nconst saveDraftMessage = (chat) => {\n const textbox = document.getElementById(\"textbox\");\n if (!textbox)\n return;\n chat.draftMessage = textbox.innerHTML;\n};\nexports.saveDraftMessage = saveDraftMessage;\nconst restoreDraftMessage = (chat) => {\n const textbox = document.getElementById(\"textbox\");\n if (!textbox)\n return;\n textbox.innerHTML = chat.draftMessage;\n};\nexports.restoreDraftMessage = restoreDraftMessage;\nconst getUsers = (chat) => {\n if (exports.isDirectChat(chat)) {\n return [chat.them];\n }\n if (exports.isConfirmedChat(chat)) {\n return chat.participants;\n }\n return chat.initialParticipants;\n};\nexports.getUsers = getUsers;\nconst markMessagesAsReadLocally = (chat, messageIds) => {\n setFunctions.unionWith(chat.markAsReadPending, messageIds);\n MarkAsReadHandler_1.default.markRead(chat.chatId, messageIds);\n};\nexports.markMessagesAsReadLocally = markMessagesAsReadLocally;\nconst markMessagesAsReadByClientIdLocally = (chat, clientMessageIds) => {\n setFunctions.unionWith(chat.markAsReadByClientIdPending, clientMessageIds);\n};\nexports.markMessagesAsReadByClientIdLocally = markMessagesAsReadByClientIdLocally;\nconst markMessagesAsReadRemotely = (chat, messageIds) => {\n setFunctions.unionWith(chat.markAsReadByThemPendingSync, messageIds);\n};\nexports.markMessagesAsReadRemotely = markMessagesAsReadRemotely;\nconst markMessagesAsReadByClientIdRemotely = (chat, clientMessageIds) => {\n setFunctions.unionWith(chat.markAsReadByThemByClientIdPendingSync, clientMessageIds);\n};\nexports.markMessagesAsReadByClientIdRemotely = markMessagesAsReadByClientIdRemotely;\nconst markMessagesAsReadOnServer = (chat, fromId, toId) => {\n for (let messageId = fromId; messageId <= toId; messageId++) {\n const clientMessageId = exports.getClientMessageId(chat.messages, messageId);\n setFunctions.remove(chat.unreadMessageIds, messageId);\n setFunctions.remove(chat.markAsReadPending, messageId);\n setFunctions.remove(chat.unreadClientMessageIds, clientMessageId);\n setFunctions.remove(chat.markAsReadByClientIdPending, clientMessageId);\n }\n};\nexports.markMessagesAsReadOnServer = markMessagesAsReadOnServer;\nconst getMinMessageId = (messages) => {\n return messages.length && messages[0].kind !== \"unconfirmed\" && messages[0].kind !== \"p2p\"\n ? messages[0].id\n : null;\n};\nexports.getMinMessageId = getMinMessageId;\nconst getMaxMessageId = (messages) => {\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index];\n if (message.kind !== \"unconfirmed\" && message.kind !== \"p2p\") {\n return message.id;\n }\n }\n return null;\n};\nexports.getMaxMessageId = getMaxMessageId;\nconst getMinMessageIdOnServer = (chat) => {\n return exports.isGroupChat(chat) ? chat.minMessageIdOnServer : 1;\n};\nexports.getMinMessageIdOnServer = getMinMessageIdOnServer;\nconst tryFindMessge = (messages, messageId) => {\n const index = getMessageIndex(messages, messageId);\n return messages[index];\n};\nexports.tryFindMessge = tryFindMessge;\nconst freeMediaData = (chat) => {\n if (!exports.isConfirmedChat(chat))\n return;\n const blobUrlsToRevoke = [];\n for (const message of chat.messages) {\n if (message.kind !== \"remote\" && message.content.kind === \"media\" && message.content.blobUrl) {\n blobUrlsToRevoke.push(message.content.blobUrl);\n message.content.blobUrl = null;\n }\n }\n // Make sure this happens after current reduce/render loop otherwise there can be a race \n // where a video player can still try to load more data from blob\n setTimeout(() => {\n for (const blobUrl of blobUrlsToRevoke) {\n URL.revokeObjectURL(blobUrl);\n }\n }, 100);\n};\nexports.freeMediaData = freeMediaData;\nconst getScrollTopAndBottom = () => {\n const messagesDiv = document.getElementById(\"messages\");\n if (!messagesDiv) {\n return null;\n }\n return [messagesDiv.scrollTop, messagesDiv.scrollHeight - messagesDiv.clientHeight - messagesDiv.scrollTop];\n};\nexports.getScrollTopAndBottom = getScrollTopAndBottom;\nconst scrollToMessage = (containerDiv, clientMessageId) => {\n const messageDiv = document.getElementById(clientMessageId);\n if (!messageDiv) {\n return;\n }\n const targetScroll = Math.max(0, messageDiv.offsetTop - (containerDiv.clientHeight - messageDiv.clientHeight) / 2);\n containerDiv.scrollTo({ top: targetScroll });\n};\nexports.scrollToMessage = scrollToMessage;\nconst getClientMessageId = (messages, messageId) => {\n const index = getMessageIndex(messages, messageId);\n const message = messages[index];\n return message.kind === \"remote\" ? \"\" : message.clientMessageId;\n};\nexports.getClientMessageId = getClientMessageId;\nconst removeMatchingUnconfirmedMessage = (chat, clientMessageId) => {\n let indexOfMatch = -1;\n for (let index = chat.minimumUnconfirmedMessageIndex; index < chat.messages.length; index++) {\n const message = chat.messages[index];\n if (message.kind !== \"unconfirmed\" && message.kind != \"p2p\") {\n chat.minimumUnconfirmedMessageIndex = index;\n }\n else if (message.clientMessageId === clientMessageId) {\n indexOfMatch = index;\n chat.messages.splice(indexOfMatch, 1);\n return message;\n }\n }\n return null;\n};\nconst getMessageIndex = (messages, messageId) => {\n const lowestMessageId = messages.length && messages[0].kind !== \"unconfirmed\" && messages[0].kind !== \"p2p\"\n ? messages[0].id\n : messageId;\n return messageId - lowestMessageId;\n};\nconst isScrolledToBottom = () => {\n const scrollValues = exports.getScrollTopAndBottom();\n return !scrollValues || scrollValues[1] <= 20;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sentByMe = void 0;\nfunction sentByMe(message, me) {\n if (\"sender\" in message) {\n return message.sender === me;\n }\n return true;\n}\nexports.sentByMe = sentByMe;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RightPanelType = exports.MiddlePanelType = exports.LeftPanelType = void 0;\nvar LeftPanelType;\n(function (LeftPanelType) {\n LeftPanelType[LeftPanelType[\"None\"] = 0] = \"None\";\n LeftPanelType[LeftPanelType[\"Chats\"] = 1] = \"Chats\";\n LeftPanelType[LeftPanelType[\"JoinGroupChat\"] = 2] = \"JoinGroupChat\";\n LeftPanelType[LeftPanelType[\"NewDirectChat\"] = 3] = \"NewDirectChat\";\n LeftPanelType[LeftPanelType[\"NewGroupChat\"] = 4] = \"NewGroupChat\";\n})(LeftPanelType = exports.LeftPanelType || (exports.LeftPanelType = {}));\nvar MiddlePanelType;\n(function (MiddlePanelType) {\n MiddlePanelType[MiddlePanelType[\"None\"] = 0] = \"None\";\n MiddlePanelType[MiddlePanelType[\"Messages\"] = 1] = \"Messages\";\n})(MiddlePanelType = exports.MiddlePanelType || (exports.MiddlePanelType = {}));\nvar RightPanelType;\n(function (RightPanelType) {\n RightPanelType[RightPanelType[\"None\"] = 0] = \"None\";\n RightPanelType[RightPanelType[\"AddParticipants\"] = 1] = \"AddParticipants\";\n RightPanelType[RightPanelType[\"Participants\"] = 2] = \"Participants\";\n})(RightPanelType = exports.RightPanelType || (exports.RightPanelType = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SelectedTheme = void 0;\nvar SelectedTheme;\n(function (SelectedTheme) {\n SelectedTheme[SelectedTheme[\"SystemDefault\"] = 0] = \"SystemDefault\";\n SelectedTheme[SelectedTheme[\"Light\"] = 1] = \"Light\";\n SelectedTheme[SelectedTheme[\"Dark\"] = 2] = \"Dark\";\n})(SelectedTheme = exports.SelectedTheme || (exports.SelectedTheme = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.compareUsersOnlineFirst = exports.isUserOnline = exports.fromUserSummary = exports.fromMyProfile = void 0;\nfunction fromMyProfile(myProfile) {\n return {\n userId: myProfile.userId,\n username: \"You\",\n usernameLower: \"you\",\n isOnline: true,\n imageId: myProfile.imageId,\n chatId: null\n };\n}\nexports.fromMyProfile = fromMyProfile;\nfunction fromUserSummary(user) {\n return {\n userId: user.userId,\n username: user.username,\n usernameLower: user.usernameLower,\n isOnline: user.minutesSinceLastOnline < 2,\n imageId: user.imageId,\n chatId: user.chatId\n };\n}\nexports.fromUserSummary = fromUserSummary;\nfunction isUserOnline(user) {\n return user.minutesSinceLastOnline < 2;\n}\nexports.isUserOnline = isUserOnline;\nfunction compareUsersOnlineFirst(u1, u2) {\n if (u1.isOnline != u2.isOnline) {\n return u1.isOnline ? -1 : 1;\n }\n return (u1.usernameLower < u2.usernameLower) ? -1 : (u1.usernameLower > u2.usernameLower) ? 1 : 0;\n}\nexports.compareUsersOnlineFirst = compareUsersOnlineFirst;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ViewMode = void 0;\nvar ViewMode;\n(function (ViewMode) {\n ViewMode[ViewMode[\"Desktop\"] = 0] = \"Desktop\";\n ViewMode[ViewMode[\"Mobile\"] = 1] = \"Mobile\";\n})(ViewMode = exports.ViewMode || (exports.ViewMode = {}));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getUsers = exports.getUserSummary = exports.getChatSubject = exports.getSelectedChat = void 0;\nconst chats_1 = require(\"./model/chats\");\nfunction getSelectedChat(chatsState) {\n var _a;\n return chatsState.selectedChatIndex === null\n ? null\n : (_a = chatsState.chats[chatsState.selectedChatIndex]) !== null && _a !== void 0 ? _a : null;\n}\nexports.getSelectedChat = getSelectedChat;\nfunction getChatSubject(chatsState, chatId) {\n const chat = chatsState.chats.find(c => c.chatId === chatId);\n return chat && chats_1.isGroupChat(chat) ? chat.subject : null;\n}\nexports.getChatSubject = getChatSubject;\nfunction getUserSummary(them, userDictionary) {\n return them && userDictionary.hasOwnProperty(them)\n ? userDictionary[them]\n : null;\n}\nexports.getUserSummary = getUserSummary;\nfunction getUsers(userIds, userDictionary) {\n return userIds\n .filter(u => userDictionary.hasOwnProperty(u))\n .map(u => userDictionary[u]);\n}\nexports.getUsers = getUsers;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uuid_1 = require(\"uuid\");\nclass RtcConnection {\n constructor(userId, config, onMessage, onDisconnected) {\n this.iceCandidates = [];\n this.dataChannel = null;\n this.offerId = null;\n this.answerId = null;\n this.createOffer = () => __awaiter(this, void 0, void 0, function* () {\n if (this.offerId) {\n throw new Error(\"Offer already set for connection\");\n }\n const offerId = this.offerId = uuid_1.v1().toString();\n const dataChannel = this.dataChannel = this.connection.createDataChannel(offerId, { ordered: true });\n this.configureDataChannel(dataChannel);\n const offer = yield this.connection.createOffer();\n yield this.connection.setLocalDescription(offer);\n yield this.waitUntilIceGatheringIsComplete();\n return {\n kind: \"offer\",\n id: offerId,\n userId: this.userId,\n connectionString: offer.sdp,\n iceCandidates: this.iceCandidates.map(c => JSON.stringify(c)),\n ageSeconds: 0\n };\n });\n this.answerRemoteOffer = (offer) => __awaiter(this, void 0, void 0, function* () {\n if (this.offerId) {\n throw new Error(\"Offer already set for connection\");\n }\n else if (this.answerId) {\n throw new Error(\"Answer already set for connection\");\n }\n yield this.connection.setRemoteDescription({\n sdp: offer.connectionString,\n type: \"offer\"\n });\n offer.iceCandidates.forEach(c => this.connection.addIceCandidate(JSON.parse(c)));\n const answer = yield this.connection.createAnswer();\n yield this.connection.setLocalDescription(answer);\n this.offerId = offer.id;\n const answerId = this.answerId = uuid_1.v1().toString();\n yield this.waitUntilIceGatheringIsComplete();\n return {\n kind: \"answer\",\n id: answerId,\n offerId: offer.id,\n userId: this.userId,\n connectionString: answer.sdp,\n iceCandidates: this.iceCandidates.map(c => JSON.stringify(c)),\n ageSeconds: 0\n };\n });\n this.addRemoteAnswer = (answer) => __awaiter(this, void 0, void 0, function* () {\n if (this.offerId !== answer.offerId) {\n return false;\n }\n yield this.connection.setRemoteDescription({\n sdp: answer.connectionString,\n type: \"answer\"\n });\n answer.iceCandidates.forEach(c => this.connection.addIceCandidate(JSON.parse(c)));\n this.answerId = answer.id;\n return true;\n });\n this.isConnected = () => {\n return this.connection.connectionState === \"connected\";\n };\n this.sendMessage = (message) => {\n var _a;\n try {\n (_a = this.dataChannel) === null || _a === void 0 ? void 0 : _a.send(message);\n }\n catch (_b) { }\n };\n this.close = () => {\n this.connection.close();\n };\n this.waitUntilIceGatheringIsComplete = () => __awaiter(this, void 0, void 0, function* () {\n yield new Promise(resolve => {\n if (this.connection.iceGatheringState === \"complete\") {\n resolve(null);\n }\n // Start a fallback timer which resolves this promise in 1 second so that it cannot stay unresolved forever\n const timeout = setTimeout(() => resolve(null), 1000);\n // Listen for onicegatheringstatechange events and resolve the promise once the ice gathering is complete.\n // At this point this.iceCandidates will contain the complete set of ICE candidates.\n this.connection.addEventListener(\"onicegatheringstatechange\", () => {\n if (this.connection.iceGatheringState === \"complete\") {\n clearTimeout(timeout);\n resolve(null);\n }\n });\n });\n });\n this.configureDataChannel = (dataChannel) => {\n dataChannel.binaryType = \"arraybuffer\";\n dataChannel.onmessage = (e) => this.onMessage(e.data);\n };\n this.userId = userId;\n this.connection = new RTCPeerConnection(config);\n this.onMessage = onMessage;\n this.connection.onicecandidate = (e) => {\n if (e.candidate) {\n this.iceCandidates.push(e.candidate);\n }\n };\n this.connection.onconnectionstatechange = () => {\n console.log(`Connection to user: ${this.userId}. Connection state: ${this.connection.connectionState}`);\n if (this.connection.connectionState === \"disconnected\" ||\n this.connection.connectionState === \"closed\" ||\n this.connection.connectionState === \"failed\") {\n onDisconnected();\n }\n };\n this.connection.ondatachannel = (e) => {\n this.configureDataChannel(e.channel);\n this.dataChannel = e.channel;\n };\n console.log(`Creating connection to ${this.userId}`);\n }\n}\nexports.default = RtcConnection;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst RtcConnection_1 = __importDefault(require(\"./RtcConnection\"));\nconst RtcConnectionsStore_1 = __importDefault(require(\"./RtcConnectionsStore\"));\nconst RtcMessageReceiver_1 = __importDefault(require(\"./RtcMessageReceiver\"));\nclass RtcConnectionFactory {\n constructor() {\n this.createConfig = () => {\n const iceServers = [{\n urls: [\n \"stun:stun.l.google.com:19302\"\n ]\n }];\n return {\n iceServers\n };\n };\n this.config = this.createConfig();\n }\n createNew(user) {\n return new RtcConnection_1.default(user, this.config, m => RtcMessageReceiver_1.default.handleMessage(user, m), () => RtcConnectionsStore_1.default.remove(user));\n }\n}\nconst factory = new RtcConnectionFactory();\nexports.default = factory;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst RtcConnectionsStore_1 = __importDefault(require(\"./RtcConnectionsStore\"));\nconst service_1 = __importDefault(require(\"../../services/p2p/service\"));\nclass RtcConnectionsHandler {\n constructor() {\n this.lastUpdated = null;\n this.setupMissingConnections = (users) => __awaiter(this, void 0, void 0, function* () {\n const createOfferPromises = users\n .filter(u => !RtcConnectionsStore_1.default.exists(u))\n .map(this.createOffer);\n if (createOfferPromises.length) {\n const offers = yield Promise.all(createOfferPromises);\n yield service_1.default.addOffers({\n offers\n });\n }\n });\n this.getConnections = () => __awaiter(this, void 0, void 0, function* () {\n const response = yield service_1.default.getConnectionDetails(this.lastUpdated);\n if (response.kind !== \"success\") {\n return 0;\n }\n if (response.connections.length) {\n yield this.handleRemoteConnectionDetails(response.connections);\n }\n this.lastUpdated = response.timestamp;\n return response.connections.length;\n });\n this.sendMessage = (users, data) => {\n for (const user of users) {\n const connection = RtcConnectionsStore_1.default.get(user);\n if (connection && connection.isConnected()) {\n connection.sendMessage(data);\n }\n }\n };\n this.createOffer = (user) => __awaiter(this, void 0, void 0, function* () {\n const connection = RtcConnectionsStore_1.default.create(user);\n return yield connection.createOffer();\n });\n this.handleRemoteConnectionDetails = (connectionDetails) => __awaiter(this, void 0, void 0, function* () {\n const offers = [];\n const handleRemoteAnswerPromises = [];\n for (const cd of connectionDetails) {\n if (cd.kind === \"offer\") {\n offers.push(cd);\n }\n else {\n handleRemoteAnswerPromises.push(this.handleRemoteAnswer(cd));\n }\n }\n if (offers.length) {\n const createAnswerPromises = offers.map(this.createAnswer);\n const answers = yield Promise.all(createAnswerPromises);\n yield service_1.default.addAnswers({\n answers\n });\n }\n yield Promise.all(handleRemoteAnswerPromises);\n });\n this.createAnswer = (offer) => __awaiter(this, void 0, void 0, function* () {\n let rtcConnection = RtcConnectionsStore_1.default.get(offer.userId);\n if (rtcConnection) {\n RtcConnectionsStore_1.default.remove(offer.userId);\n }\n rtcConnection = RtcConnectionsStore_1.default.create(offer.userId);\n return yield rtcConnection.answerRemoteOffer(offer);\n });\n this.handleRemoteAnswer = (answer) => __awaiter(this, void 0, void 0, function* () {\n const rtcConnection = RtcConnectionsStore_1.default.get(answer.userId);\n if (rtcConnection) {\n yield rtcConnection.addRemoteAnswer(answer);\n }\n });\n }\n}\nconst handler = new RtcConnectionsHandler();\nexports.default = handler;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst RtcConnectionFactory_1 = __importDefault(require(\"./RtcConnectionFactory\"));\nclass RtcConnectionsStore {\n constructor() {\n this.connections = new Map();\n }\n exists(user) {\n return this.connections.has(user);\n }\n get(user) {\n var _a;\n return (_a = this.connections.get(user)) !== null && _a !== void 0 ? _a : null;\n }\n create(user) {\n const connection = RtcConnectionFactory_1.default.createNew(user);\n this.connections.set(user, connection);\n return connection;\n }\n remove(user) {\n const connection = this.connections.get(user);\n if (!connection) {\n return false;\n }\n connection.close();\n this.connections.delete(user);\n return true;\n }\n}\nconst rtcConnectionsStore = new RtcConnectionsStore();\nexports.default = rtcConnectionsStore;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst store_1 = __importDefault(require(\"../../store\"));\nconst receiveP2PMessage_1 = __importDefault(require(\"../../actions/chats/receiveP2PMessage\"));\nconst sendMessage_1 = require(\"../../actions/chats/sendMessage\");\nconst userTyping_1 = require(\"../../actions/chats/userTyping\");\nconst RemoteUserTypingHandler_1 = __importDefault(require(\"../../domain/RemoteUserTypingHandler\"));\nconst markMessagesAsRead_1 = require(\"../../actions/chats/markMessagesAsRead\");\nconst markRemoteUserOnline_1 = __importDefault(require(\"../../actions/users/markRemoteUserOnline\"));\nclass RtcMessageReceiver {\n constructor() {\n this.handleMessage = (from, message) => {\n store_1.default.dispatch(markRemoteUserOnline_1.default(from));\n const p2pMessageRaw = JSON.parse(message);\n switch (p2pMessageRaw.kind) {\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ_REMOTELY: {\n const { messageIds } = p2pMessageRaw;\n store_1.default.dispatch(markMessagesAsRead_1.markMessagesAsReadRemotely(from, messageIds));\n break;\n }\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY: {\n const { clientMessageIds } = p2pMessageRaw;\n store_1.default.dispatch(markMessagesAsRead_1.markMessagesAsReadByClientIdRemotely(from, clientMessageIds));\n break;\n }\n case sendMessage_1.SEND_MESSAGE_REQUESTED: {\n const chatId = BigInt(p2pMessageRaw.chatId);\n const p2pMessage = {\n kind: \"p2p\",\n clientMessageId: p2pMessageRaw.clientMessageId,\n date: new Date(),\n sender: from,\n content: p2pMessageRaw.content,\n repliesTo: p2pMessageRaw.repliesTo\n };\n RemoteUserTypingHandler_1.default.markTypingStopped(chatId, from);\n store_1.default.dispatch(receiveP2PMessage_1.default(chatId, p2pMessage));\n break;\n }\n case userTyping_1.REMOTE_USER_TYPING: {\n const chatId = BigInt(p2pMessageRaw.chatId);\n RemoteUserTypingHandler_1.default.markTyping(chatId, from);\n break;\n }\n case userTyping_1.REMOTE_USER_STOPPED_TYPING: {\n const chatId = BigInt(p2pMessageRaw.chatId);\n RemoteUserTypingHandler_1.default.markTypingStopped(chatId, from);\n break;\n }\n }\n };\n }\n}\nconst receiver = new RtcMessageReceiver();\nexports.default = receiver;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sendMessage_1 = require(\"../../actions/chats/sendMessage\");\nconst userTyping_1 = require(\"../../actions/chats/userTyping\");\nconst chatFunctions = __importStar(require(\"../model/chats\"));\nconst RtcConnectionsHandler_1 = __importDefault(require(\"./RtcConnectionsHandler\"));\nconst markMessagesAsRead_1 = require(\"../../actions/chats/markMessagesAsRead\");\nconst webRtcMiddleware = store => next => event => {\n switch (event.type) {\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ: {\n const { chatId, messageIds } = event.payload;\n const [chat] = chatFunctions.getChat(store.getState().chatsState.chats, chatId);\n if (chatFunctions.isDirectChat(chat)) {\n const p2pMessage = {\n kind: markMessagesAsRead_1.MARK_MESSAGES_AS_READ_REMOTELY,\n messageIds\n };\n sendMessage(p2pMessage, chat);\n }\n break;\n }\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ_BY_CLIENT_ID: {\n const { chatId, clientMessageIds } = event.payload;\n const [chat] = chatFunctions.getChat(store.getState().chatsState.chats, chatId);\n if (chatFunctions.isDirectChat(chat)) {\n const p2pMessage = {\n kind: markMessagesAsRead_1.MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY,\n clientMessageIds\n };\n sendMessage(p2pMessage, chat);\n }\n break;\n }\n case sendMessage_1.SEND_MESSAGE_REQUESTED: {\n const { chat, clientMessageId, content } = event.payload;\n if (content.kind === \"text\" && chatFunctions.isConfirmedChat(chat)) {\n const p2pMessage = {\n kind: sendMessage_1.SEND_MESSAGE_REQUESTED,\n chatId: chat.chatId,\n clientMessageId,\n content\n };\n sendMessage(p2pMessage, chat);\n }\n break;\n }\n case userTyping_1.CURRENT_USER_TYPING: {\n const chatId = event.payload;\n const [chat] = chatFunctions.getChat(store.getState().chatsState.chats, chatId);\n if (chatFunctions.isDirectChat(chat)) {\n const blockedUsers = store.getState().chatsState.blockedUsers;\n if (blockedUsers.includes(chat.them)) {\n break;\n }\n }\n const p2pMessage = {\n kind: userTyping_1.REMOTE_USER_TYPING,\n chatId: chat.chatId\n };\n sendMessage(p2pMessage, chat);\n break;\n }\n case userTyping_1.CURRENT_USER_STOPPED_TYPING: {\n const chatId = event.payload;\n const [chat] = chatFunctions.getChat(store.getState().chatsState.chats, chatId);\n const p2pMessage = {\n kind: userTyping_1.REMOTE_USER_STOPPED_TYPING,\n chatId: chat.chatId\n };\n sendMessage(p2pMessage, chat);\n break;\n }\n }\n return next(event);\n};\nexports.default = webRtcMiddleware;\nfunction sendMessage(message, chat) {\n const users = chatFunctions.getUsers(chat);\n RtcConnectionsHandler_1.default.sendMessage(users, JSON.stringify(message));\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst notifySessionExpired_1 = __importDefault(require(\"../actions/signin/notifySessionExpired\"));\nconst authClient_1 = require(\"../utils/authClient\");\nconst errorHandlingMiddleware = store => next => event => {\n if (\"httpError\" in event && event.httpError) {\n const httpError = event.httpError;\n if (httpError.code === 401\n || httpError.code === 403\n || authClient_1.getTimeUntilSessionExpiryMs() <= 0) {\n return store.dispatch(notifySessionExpired_1.default());\n }\n }\n return next(event);\n};\nexports.default = errorHandlingMiddleware;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toHttpError = void 0;\nfunction toHttpError(error) {\n let code = 500;\n const statusLine = error\n .message\n .split(\"\\n\")\n .map(l => l.trim().toLowerCase())\n .find(l => l.startsWith(\"code:\") || l.startsWith(\"http status code:\"));\n if (statusLine) {\n const parts = statusLine.split(\":\");\n if (parts && parts.length > 1) {\n let valueText = parts[1].trim();\n const valueParts = valueText.split(\" \");\n if (valueParts && valueParts.length > 1) {\n valueText = valueParts[0].trim();\n }\n code = parseInt(valueText, 10);\n if (isNaN(code)) {\n code = 500;\n }\n }\n }\n return {\n kind: \"httpError\",\n code: code,\n message: error.message\n };\n}\nexports.toHttpError = toHttpError;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatCycles = void 0;\nconst cycleFunctions = __importStar(require(\"../utils/cycleFunctions\"));\nfunction formatCycles(amount) {\n const cycles = cycleFunctions.toT(amount);\n const pounds = cycleFunctions.toCurrency(amount, \"USD\").toFixed(2);\n return `${cycles} T cycles ($${pounds})`;\n}\nexports.formatCycles = formatCycles;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatMessageDate = exports.toShortTimeString = exports.toLongDateString = exports.toDateString = exports.toDayOfWeekString = void 0;\nconst dateFunctions = __importStar(require(\"../utils/dateFunctions\"));\nfunction toDayOfWeekString(date) {\n return date.toLocaleDateString(undefined, { weekday: \"long\" });\n}\nexports.toDayOfWeekString = toDayOfWeekString;\nfunction toDateString(date) {\n return date.toLocaleDateString();\n}\nexports.toDateString = toDateString;\nfunction toLongDateString(date) {\n const weekday = date.toLocaleDateString(\"en\", { weekday: \"long\" });\n const dayOfMonth = date.getDate();\n const month = date.toLocaleDateString(undefined, { month: \"short\" });\n const ordinal = getOrdinal(dayOfMonth);\n const year = date.getFullYear();\n return `${weekday} ${dayOfMonth}${ordinal} ${month} ${year}`;\n}\nexports.toLongDateString = toLongDateString;\nfunction toShortTimeString(date) {\n return date.toLocaleTimeString(undefined, { hour: \"2-digit\", minute: \"2-digit\", hour12: false });\n}\nexports.toShortTimeString = toShortTimeString;\nfunction formatMessageDate(date) {\n const startOfToday = dateFunctions.getStartOfToday();\n if (date >= startOfToday) {\n return toShortTimeString(date);\n }\n const startOfYesterday = dateFunctions.addDays(startOfToday, -1);\n if (date >= startOfYesterday) {\n return \"Yesterday\";\n }\n const useDayNameOnly = date >= dateFunctions.addDays(startOfToday, -6);\n return useDayNameOnly\n ? toDayOfWeekString(date)\n : toDateString(date);\n}\nexports.formatMessageDate = formatMessageDate;\nfunction getOrdinal(n) {\n // TODO - Localise\n // Taken from https://stackoverflow.com/a/39466341\n return [, \"st\", \"nd\", \"rd\"][n / 10 % 10 ^ 1 && n % 10] || \"th\";\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst unitTypes = [\n \"Bytes\",\n \"KB\",\n \"MB\",\n \"GB\",\n \"TB\"\n];\nfunction format(bytes) {\n let value = Math.ceil(bytes);\n let unitType = 0;\n while (value >= 1024 && unitType < unitTypes.length - 1) {\n value = value / 1024;\n unitType++;\n }\n const showDecimal = unitType > 0 && value < 9.95; // Since 9.95.toFixed(1) will display '10.0', whereas we want '10'\n const formattedValue = value.toFixed(showDecimal ? 1 : 0);\n const unit = unitTypes[unitType];\n return `${formattedValue} ${unit}`;\n}\nexports.default = format;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst react_1 = __importDefault(require(\"react\"));\nconst react_dom_1 = __importDefault(require(\"react-dom\"));\nconst AppRoot_1 = __importDefault(require(\"./components/AppRoot\"));\nrequire(\"./css/index.css\");\nrequire(\"./css/emoji-mart.css\");\nconst constants_1 = require(\"./constants\");\nconst startup_1 = __importDefault(require(\"./startup\"));\ndocument.title = constants_1.APP_TITLE;\nstartup_1.default().then(() => react_dom_1.default.render(react_1.default.createElement(AppRoot_1.default, null), document.getElementById(\"app\")));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unregister = exports.close = exports.setSoftDisabled = exports.softDisabled = exports.askForPermission = exports.trySubscribe = exports.supported = exports.status = exports.Status = void 0;\nconst constants_1 = require(\"./constants\");\nconst service_1 = __importDefault(require(\"./services/notifications/service\"));\nconst base64 = __importStar(require(\"./utils/base64Functions\"));\nconst store_1 = __importDefault(require(\"./store\"));\nconst gotoChat_1 = require(\"./actions/chats/gotoChat\");\n// https://web-push-book.gauntface.com/common-notification-patterns/\n// - Once subscribed send the user an initial notification a la slack \"Nice, notifications are enabled!\"\n// https://www.youtube.com/watch?v=_dXBibRO0SM&t=103s\nvar Status;\n(function (Status) {\n Status[Status[\"Unsupported\"] = 0] = \"Unsupported\";\n Status[Status[\"Prompt\"] = 1] = \"Prompt\";\n Status[Status[\"Denied\"] = 2] = \"Denied\";\n Status[Status[\"Granted\"] = 3] = \"Granted\";\n})(Status = exports.Status || (exports.Status = {}));\nfunction status() {\n return __awaiter(this, void 0, void 0, function* () {\n // Does the browser and environment have all the support needed for web push\n if (!supported()) {\n return Status.Unsupported;\n }\n // If the user has explicitly soft-disabled notifications, then don't show bar\n if (yield softDisabled()) {\n return Status.Denied;\n }\n // If the user has already either hard enabled or hard disabled notifications then don't show the bar\n const permission = yield hardPermission();\n switch (permission) {\n case \"denied\":\n return Status.Denied;\n case \"granted\":\n return Status.Granted;\n default:\n return Status.Prompt;\n }\n });\n}\nexports.status = status;\nfunction supported() {\n return \"serviceWorker\" in navigator\n && \"PushManager\" in window\n && \"Notification\" in window;\n}\nexports.supported = supported;\nfunction trySubscribe(userId) {\n return __awaiter(this, void 0, void 0, function* () {\n // Register a service worker if it hasn't already been done\n let registration = yield registerServiceWorker();\n if (registration == null) {\n return false;\n }\n // Ensure the service worker is updated to the latest version\n registration.update();\n // When a notifcation is clicked the service worker sends us a message\n // with the chat to select\n navigator.serviceWorker.addEventListener(\"message\", event => {\n if (event.data.type === \"NOTIFICATION_CLICKED\") {\n store_1.default.dispatch(gotoChat_1.gotoChatById(event.data.chatId));\n }\n });\n // Only proceed if the user hasn't explicitly soft-disabled notifications\n if (yield softDisabled()) {\n return false;\n }\n // Only proceed if the user has granted hard permission to send notifications\n const permission = yield hardPermission();\n if (permission !== \"granted\") {\n return false;\n }\n // Check if the user has subscribed already\n let pushSubscription = yield registration.pushManager.getSubscription();\n if (pushSubscription) {\n // Check if the subscription has already been pushed to the notifications canister\n if (yield service_1.default.subscriptionExists(userId, extract_p256dh_key(pushSubscription))) {\n return true;\n }\n }\n else {\n // Subscribe the user to webpush notifications\n pushSubscription = yield subscribeUserToPush(registration);\n if (pushSubscription == null) {\n return false;\n }\n }\n // Add the subscription to the user record on the notifications canister\n try {\n yield service_1.default.pushSubscription(userId, pushSubscription);\n return true;\n }\n catch (e) {\n console.log(e);\n return false;\n }\n });\n}\nexports.trySubscribe = trySubscribe;\nfunction askForPermission() {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield new Promise(function (resolve, reject) {\n const permissionResult = Notification.requestPermission(function (res) {\n resolve(res);\n });\n if (permissionResult) {\n permissionResult.then(resolve, reject);\n }\n });\n return result;\n });\n}\nexports.askForPermission = askForPermission;\n// TODO: need to store in local storage\nlet _softDisabled = false;\nfunction softDisabled() {\n return __awaiter(this, void 0, void 0, function* () {\n return _softDisabled;\n });\n}\nexports.softDisabled = softDisabled;\nfunction setSoftDisabled(disabled) {\n return __awaiter(this, void 0, void 0, function* () {\n _softDisabled = disabled;\n });\n}\nexports.setSoftDisabled = setSoftDisabled;\nfunction close(chatId) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n let registration = yield registerServiceWorker();\n if (registration != null) {\n let notifications = yield registration.getNotifications();\n for (let notification of notifications) {\n if (((_a = notification.data) === null || _a === void 0 ? void 0 : _a.chatId) === chatId) {\n notification.close();\n }\n }\n }\n });\n}\nexports.close = close;\nfunction unregister() {\n return __awaiter(this, void 0, void 0, function* () {\n let registration = yield registerServiceWorker();\n if (registration == null) {\n return false;\n }\n return registration.unregister();\n });\n}\nexports.unregister = unregister;\nfunction registerServiceWorker() {\n return __awaiter(this, void 0, void 0, function* () {\n // Does the browser have all the support needed for web push\n if (!supported()) {\n return null;\n }\n try {\n const sw_path = process.env.WEBPUSH_SERVICE_WORKER_PATH;\n return yield navigator.serviceWorker.register(sw_path);\n }\n catch (e) {\n console.log(e);\n return null;\n }\n });\n}\nfunction hardPermission() {\n return __awaiter(this, void 0, void 0, function* () {\n if (navigator.permissions) {\n let result = yield navigator.permissions.query({ name: \"notifications\" });\n switch (result.state) {\n case \"prompt\":\n return \"default\";\n case \"denied\":\n return \"denied\";\n case \"granted\":\n return \"granted\";\n }\n }\n return Notification.permission;\n });\n}\nfunction subscribeUserToPush(registration) {\n return __awaiter(this, void 0, void 0, function* () {\n const subscribeOptions = {\n userVisibleOnly: true,\n applicationServerKey: base64.toUint8Array(constants_1.PUBLIC_VAPID_KEY),\n };\n try {\n let pushSubscription = yield registration.pushManager.subscribe(subscribeOptions);\n return pushSubscription;\n }\n catch (e) {\n console.log(e);\n return null;\n }\n });\n}\nfunction extract_p256dh_key(subscription) {\n const json = subscription.toJSON();\n const key = json.keys[\"p256dh\"];\n return key;\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst immer_1 = __importDefault(require(\"immer\"));\nconst logout_1 = require(\"../actions/signin/logout\");\nconst selectTheme_1 = require(\"../actions/app/selectTheme\");\nconst SelectedThemeCache_1 = __importDefault(require(\"../domain/SelectedThemeCache\"));\nconst leaveGroup_1 = require(\"../services/chats/leaveGroup\");\nconst theme_1 = require(\"../domain/model/theme\");\nconst viewMode_1 = require(\"../domain/model/viewMode\");\nconst Alert_1 = require(\"../components/modals/Alert\");\nconst leaveGroup_2 = require(\"../actions/chats/leaveGroup\");\nconst notifySessionExpired_1 = require(\"../actions/signin/notifySessionExpired\");\nconst createGroupChat_1 = require(\"../actions/chats/createGroupChat\");\nconst getCurrentUser_1 = require(\"../actions/users/getCurrentUser\");\nconst switchViewMode_1 = require(\"../actions/app/switchViewMode\");\nconst changeSidePanel_1 = require(\"../actions/app/changeSidePanel\");\nconst gotoChat_1 = require(\"../actions/chats/gotoChat\");\nconst createGroupChat_2 = require(\"../actions/chats/createGroupChat\");\nconst gotoUser_1 = require(\"../actions/chats/gotoUser\");\nconst panels_1 = require(\"../domain/model/panels\");\nconst gotoHome_1 = require(\"../actions/app/gotoHome\");\nconst getAllChats_1 = require(\"../actions/chats/getAllChats\");\nconst modalSpinner_1 = require(\"../actions/app/modalSpinner\");\nconst initialState = {\n sessionExpired: false,\n selectedTheme: (_a = SelectedThemeCache_1.default.tryGet()) !== null && _a !== void 0 ? _a : theme_1.SelectedTheme.SystemDefault,\n viewMode: viewMode_1.ViewMode.Desktop,\n panelState: {\n leftPanel: panels_1.LeftPanelType.Chats,\n middlePanel: panels_1.MiddlePanelType.Messages,\n rightPanel: panels_1.RightPanelType.None\n },\n modalSpinner: false,\n};\nexports.default = immer_1.default((state, event) => {\n switch (event.type) {\n case selectTheme_1.THEME_SELECTED: {\n const selectedTheme = event.payload;\n state.selectedTheme = selectedTheme;\n SelectedThemeCache_1.default.set(selectedTheme);\n break;\n }\n case leaveGroup_2.LEAVE_GROUP_FAILED: {\n let text;\n if (event.payload.result === leaveGroup_1.LeaveGroupResult.LastAdminCannotLeave) {\n text = \"You can't leave the group because you are the only administrator\";\n }\n else {\n text = \"Unexpected error - please refresh the page\";\n }\n Alert_1.alertDialog({\n title: \"Failed to leave group\",\n text\n });\n break;\n }\n case logout_1.USER_LOGGED_OUT: {\n return initialState;\n }\n case notifySessionExpired_1.SESSION_EXPIRED: {\n return Object.assign(Object.assign({}, initialState), { sessionExpired: true });\n }\n case notifySessionExpired_1.SESSION_EXPIRY_ACKNOWLEDGED: {\n state.sessionExpired = false;\n break;\n }\n case createGroupChat_2.CREATE_GROUP_CHAT_REQUESTED:\n case gotoUser_1.DIRECT_CHAT_CREATED: {\n state.panelState.rightPanel = panels_1.RightPanelType.None;\n if (state.viewMode === viewMode_1.ViewMode.Mobile) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.Messages;\n state.panelState.leftPanel = panels_1.LeftPanelType.None;\n }\n break;\n }\n case createGroupChat_1.CREATE_GROUP_CHAT_FAILED: {\n let text;\n switch (event.payload.response.kind) {\n case \"subjectTooLong\":\n text = `The group name must be at most ${event.payload.response.result} characters long`;\n break;\n case \"subjectTooShort\":\n text = `The group name must be at least ${event.payload.response.result} characters long`;\n break;\n case \"tooManyParticipants\":\n text = `You can only have ${event.payload.response.result} participants in a group`;\n break;\n default:\n text = \"Unexpected error - please refresh the page\";\n break;\n }\n Alert_1.alertDialog({\n title: \"Create group chat failed\",\n text\n });\n break;\n }\n case getCurrentUser_1.GET_CURRENT_USER_FAILED:\n case getCurrentUser_1.GET_CURRENT_USER_SUCCEEDED: {\n state.sessionExpired = false;\n break;\n }\n case switchViewMode_1.SWITCH_VIEW_MODE_REQUESTED: {\n const { viewMode, isChatSelected } = event.payload;\n state.viewMode = viewMode;\n if (viewMode === viewMode_1.ViewMode.Desktop) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.Messages;\n state.panelState.leftPanel = panels_1.LeftPanelType.Chats;\n }\n else if (viewMode === viewMode_1.ViewMode.Mobile) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.None;\n state.panelState.leftPanel = panels_1.LeftPanelType.None;\n if (state.panelState.rightPanel === panels_1.RightPanelType.None) {\n if (isChatSelected) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.Messages;\n }\n else {\n state.panelState.leftPanel = panels_1.LeftPanelType.Chats;\n }\n }\n }\n break;\n }\n case gotoHome_1.GOTO_HOME: {\n state.panelState.leftPanel = panels_1.LeftPanelType.Chats;\n state.panelState.rightPanel = panels_1.RightPanelType.None;\n if (state.viewMode === viewMode_1.ViewMode.Mobile) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.None;\n }\n break;\n }\n case getAllChats_1.GET_ALL_CHATS_SUCCEEDED: {\n const { selectedChatIndex } = event.payload;\n if (state.viewMode === viewMode_1.ViewMode.Mobile) {\n if (selectedChatIndex != null) {\n state.panelState.leftPanel = panels_1.LeftPanelType.None;\n state.panelState.middlePanel = panels_1.MiddlePanelType.Messages;\n }\n }\n break;\n }\n case changeSidePanel_1.LEFT_PANEL_CHANGED: {\n state.panelState.leftPanel = event.payload;\n if (state.viewMode === viewMode_1.ViewMode.Mobile) {\n state.panelState.rightPanel = panels_1.RightPanelType.None;\n if (state.panelState.leftPanel === panels_1.LeftPanelType.None) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.Messages;\n }\n else {\n state.panelState.middlePanel = panels_1.MiddlePanelType.None;\n }\n }\n break;\n }\n case changeSidePanel_1.RIGHT_PANEL_CHANGED: {\n state.panelState.rightPanel = event.payload;\n if (state.viewMode === viewMode_1.ViewMode.Mobile) {\n state.panelState.leftPanel = panels_1.LeftPanelType.None;\n if (state.panelState.rightPanel === panels_1.RightPanelType.None) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.Messages;\n }\n else {\n state.panelState.middlePanel = panels_1.MiddlePanelType.None;\n }\n }\n break;\n }\n case gotoChat_1.GOTO_CHAT: {\n const { chatIndex } = event.payload;\n state.panelState.rightPanel = panels_1.RightPanelType.None;\n if (chatIndex != null && state.viewMode === viewMode_1.ViewMode.Mobile) {\n state.panelState.middlePanel = panels_1.MiddlePanelType.Messages;\n state.panelState.leftPanel = panels_1.LeftPanelType.None;\n }\n break;\n }\n case modalSpinner_1.START_SPINNING: {\n state.modalSpinner = true;\n break;\n }\n case modalSpinner_1.STOP_SPINNING: {\n state.modalSpinner = false;\n break;\n }\n }\n}, initialState);\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst immer_1 = __importDefault(require(\"immer\"));\nconst chatFunctions = __importStar(require(\"../domain/model/chats\"));\nconst historyFunctions = __importStar(require(\"../domain/historyFunctions\"));\nconst setFunctions = __importStar(require(\"../utils/setFunctions\"));\nconst viewMode_1 = require(\"../domain/model/viewMode\");\nconst constants_1 = require(\"../constants\");\nconst gotoChat_1 = require(\"../actions/chats/gotoChat\");\nconst gotoUser_1 = require(\"../actions/chats/gotoUser\");\nconst getUpdatedChats_1 = require(\"../actions/chats/getUpdatedChats\");\nconst receiveP2PMessage_1 = require(\"../actions/chats/receiveP2PMessage\");\nconst logout_1 = require(\"../actions/signin/logout\");\nconst notifySessionExpired_1 = require(\"../actions/signin/notifySessionExpired\");\nconst switchViewMode_1 = require(\"../actions/app/switchViewMode\");\nconst createGroupChat_1 = require(\"../actions/chats/createGroupChat\");\nconst getAllChats_1 = require(\"../actions/chats/getAllChats\");\nconst getMessages_1 = require(\"../actions/chats/getMessages\");\nconst getMessagesById_1 = require(\"../actions/chats/getMessagesById\");\nconst sendMessage_1 = require(\"../actions/chats/sendMessage\");\nconst addParticipants_1 = require(\"../actions/chats/addParticipants\");\nconst removeParticipant_1 = require(\"../actions/chats/removeParticipant\");\nconst markMessagesAsRead_1 = require(\"../actions/chats/markMessagesAsRead\");\nconst markMessagesAsReadServerSync_1 = require(\"../actions/chats/markMessagesAsReadServerSync\");\nconst userTyping_1 = require(\"../actions/chats/userTyping\");\nconst replyToMessage_1 = require(\"../actions/chats/replyToMessage\");\nconst leaveGroup_1 = require(\"../actions/chats/leaveGroup\");\nconst deselectMessage_1 = require(\"../actions/chats/deselectMessage\");\nconst blockUser_1 = require(\"../actions/chats/blockUser\");\nconst toggleNotifications_1 = require(\"../actions/chats/toggleNotifications\");\nconst gotoHome_1 = require(\"../actions/app/gotoHome\");\nconst initialState = {\n chats: [],\n selectedChatIndex: null,\n chatsSyncedUpTo: null,\n runUpdateChatsTask: false,\n blockedUsers: []\n};\nexports.default = immer_1.default((state, event) => {\n var _a, _b, _c, _d, _e;\n maintainScrollOfSelectedChat(state);\n switch (event.type) {\n case gotoHome_1.GOTO_HOME: {\n if (state.selectedChatIndex != null) {\n const prevChat = state.chats[state.selectedChatIndex];\n chatFunctions.saveDraftMessage(prevChat);\n chatFunctions.freeMediaData(prevChat);\n }\n state.selectedChatIndex = null;\n break;\n }\n case gotoChat_1.GOTO_CHAT: {\n const { chatIndex, messageId, missingMessages, fromHistory } = event.payload;\n const hasChanged = state.selectedChatIndex == chatIndex;\n if (state.selectedChatIndex != null && hasChanged) {\n const prevChat = state.chats[state.selectedChatIndex];\n chatFunctions.saveDraftMessage(prevChat);\n chatFunctions.freeMediaData(prevChat);\n }\n if (!fromHistory) {\n historyFunctions.pushOrReplaceChat(state.chats[chatIndex].chatId, (_b = (_a = history === null || history === void 0 ? void 0 : history.state) === null || _a === void 0 ? void 0 : _a.chatId) !== null && _b !== void 0 ? _b : false);\n }\n state.selectedChatIndex = chatIndex;\n const chat = state.chats[state.selectedChatIndex];\n if (chatFunctions.isConfirmedChat(chat)) {\n chat.messageToSelect = messageId;\n if (missingMessages.length > 0) {\n chatFunctions.addMessages(chat, missingMessages, true);\n }\n if (hasChanged) {\n if (chat.maxLocalMessageId) {\n const minMessageIdOnServer = chatFunctions.getMinMessageIdOnServer(chat);\n const minLocalMessageId = chatFunctions.getMinMessageId(chat.messages);\n const minLocalMessageIdRequired = Math.max(((_c = chat.maxLocalMessageId) !== null && _c !== void 0 ? _c : 0) + 1 - constants_1.PAGE_SIZE, minMessageIdOnServer);\n if (minLocalMessageId !== minLocalMessageIdRequired) {\n chatFunctions.extendMessagesRangeDownTo(chat, minLocalMessageIdRequired, true);\n chatFunctions.queueMissingMessagesForDownload(chat);\n }\n }\n chatFunctions.restoreDraftMessage(chat);\n }\n }\n break;\n }\n case createGroupChat_1.CREATE_GROUP_CHAT_REQUESTED: {\n const { chatId, subject, users } = event.payload;\n const newChat = chatFunctions.newUnconfirmedGroupChat(chatId, subject, users);\n state.chats.unshift(newChat);\n selectChatAndPushToHistory(state, 0);\n break;\n }\n case createGroupChat_1.CREATE_GROUP_CHAT_SUCCEEDED: {\n const { chat } = event.payload;\n const chatIndex = state.chats.findIndex(c => c.kind === constants_1.UNCONFIRMED_GROUP_CHAT && c.chatId === chat.chatId);\n state.chats[chatIndex] = chat;\n const newChatIndex = chatFunctions.sortChatsAndReturnSelectedIndex(state.chats, state.selectedChatIndex);\n selectChatAndPushToHistory(state, newChatIndex);\n break;\n }\n case createGroupChat_1.CREATE_GROUP_CHAT_FAILED: {\n const { chatId } = event.payload;\n const chatIndex = state.chats.findIndex(c => c.kind === constants_1.UNCONFIRMED_GROUP_CHAT && c.chatId === chatId);\n state.chats.splice(chatIndex, 1);\n selectChatAndPushToHistory(state, 0);\n break;\n }\n case gotoUser_1.DIRECT_CHAT_CREATED: {\n const { chat } = event.payload;\n state.chats.unshift(chat);\n selectChatAndPushToHistory(state, 0);\n break;\n }\n case getAllChats_1.GET_ALL_CHATS_SUCCEEDED: {\n const { chats, latestUpdateTimestamp, selectedChatIndex, blockedUsers } = event.payload;\n const historicalChatId = (_e = (_d = history === null || history === void 0 ? void 0 : history.state) === null || _d === void 0 ? void 0 : _d.chatId) !== null && _e !== void 0 ? _e : null;\n // If the path exists but it does not match a known chatId \n // then replace the path with \"/\"\n if (document.location.pathname.length > 0 && selectedChatIndex == null) {\n historyFunctions.replaceLatestWithHome();\n }\n if (selectedChatIndex != null) {\n if (historicalChatId == null) {\n // If there is a selected chat and there is no existing history (or it is already \"/\") \n // then replace the path with \"/\"\n historyFunctions.replaceLatestWithHome();\n }\n const chatId = chats[selectedChatIndex].chatId;\n if (historicalChatId != chatId) {\n // If the selected chat is different to the current chat in the history \n // then push the chatId as a new path\n historyFunctions.pushOrReplaceChat(chatId, false);\n }\n }\n return {\n chats,\n selectedChatIndex,\n chatsSyncedUpTo: latestUpdateTimestamp,\n runUpdateChatsTask: true,\n blockedUsers\n };\n }\n case getMessages_1.GET_MESSAGES_REQUESTED: {\n const { chatId, fromId, count } = event.payload;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n const messageIds = [];\n for (let i = fromId; i < fromId + count; i++) {\n messageIds.push(i);\n }\n setFunctions.unionWith(chat.messagesDownloading, messageIds);\n break;\n }\n case getMessages_1.GET_MESSAGES_SUCCEEDED: {\n const { request, result } = event.payload;\n const [chat, index] = chatFunctions.getConfirmedChat(state.chats, request.chatId);\n const messageIds = [];\n for (let i = request.fromId; i < request.fromId + request.count; i++) {\n messageIds.push(i);\n }\n setFunctions.exceptWith(chat.messagesDownloading, messageIds);\n chatFunctions.addMessages(chat, result.messages, index === state.selectedChatIndex);\n const newChatIndex = chatFunctions.sortChatsAndReturnSelectedIndex(state.chats, state.selectedChatIndex);\n state.selectedChatIndex = newChatIndex;\n break;\n }\n case getMessages_1.GET_MESSAGES_FAILED: {\n const { chatId, fromId, count } = event.payload;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n const messageIds = [];\n for (let i = fromId; i < fromId + count; i++) {\n messageIds.push(i);\n }\n setFunctions.exceptWith(chat.messagesDownloading, messageIds);\n break;\n }\n case getMessagesById_1.GET_MESSAGES_BY_ID_REQUESTED: {\n const { chatId, messageIds } = event.payload;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n setFunctions.unionWith(chat.messagesDownloading, messageIds);\n break;\n }\n case getMessagesById_1.GET_MESSAGES_BY_ID_SUCCEEDED: {\n const { request, result } = event.payload;\n const [chat, index] = chatFunctions.getConfirmedChat(state.chats, request.chatId);\n setFunctions.exceptWith(chat.messagesDownloading, request.messageIds);\n chatFunctions.addMessages(chat, result.messages, index === state.selectedChatIndex);\n const newChatIndex = chatFunctions.sortChatsAndReturnSelectedIndex(state.chats, state.selectedChatIndex);\n state.selectedChatIndex = newChatIndex;\n break;\n }\n case getMessagesById_1.GET_MESSAGES_BY_ID_FAILED: {\n const { chatId, messageIds } = event.payload;\n const chat = chatFunctions.getConfirmedChat(state.chats, chatId)[0];\n setFunctions.exceptWith(chat.messagesDownloading, messageIds);\n break;\n }\n case getUpdatedChats_1.GET_UPDATED_CHATS_SUCCEEDED: {\n const { chats, latestUpdateTimestamp, blockedUsers } = event.payload;\n if (!chats.length) {\n return;\n }\n const unconfirmedGroupChat = state.chats.find(c => c.kind === constants_1.UNCONFIRMED_GROUP_CHAT);\n for (const updatedChat of chats) {\n const filter = {\n chatId: updatedChat.chatId,\n userId: chatFunctions.isDirectChat(updatedChat) ? updatedChat.them : undefined\n };\n let [currentChat, index] = chatFunctions.tryFindChat(state.chats, filter);\n if (currentChat) {\n const isSelectedChat = index === state.selectedChatIndex;\n state.chats[index] = chatFunctions.mergeUpdates(currentChat, updatedChat, isSelectedChat);\n }\n else if (!(unconfirmedGroupChat && chatFunctions.isGroupChat(updatedChat) && unconfirmedGroupChat.subject === updatedChat.subject)) {\n state.chats.push(updatedChat);\n }\n }\n const newChatIndex = chatFunctions.sortChatsAndReturnSelectedIndex(state.chats, state.selectedChatIndex);\n if (newChatIndex != null && newChatIndex >= 0) {\n selectChatAndPushToHistory(state, newChatIndex);\n }\n state.chatsSyncedUpTo = latestUpdateTimestamp;\n state.blockedUsers = blockedUsers;\n break;\n }\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ: {\n const { chatId, messageIds } = event.payload;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n chatFunctions.markMessagesAsReadLocally(chat, messageIds);\n break;\n }\n case markMessagesAsRead_1.MARK_ALL_MESSAGES_AS_READ: {\n const { chatId } = event.payload;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n chatFunctions.markMessagesAsReadLocally(chat, chat.unreadMessageIds);\n break;\n }\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ_BY_CLIENT_ID: {\n const { chatId, clientMessageIds } = event.payload;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n chatFunctions.markMessagesAsReadByClientIdLocally(chat, clientMessageIds);\n break;\n }\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ_REMOTELY: {\n const { userId, messageIds } = event.payload;\n const [chat] = chatFunctions.getChatByUserId(state.chats, userId);\n if (chatFunctions.isConfirmedChat(chat)) {\n chatFunctions.markMessagesAsReadRemotely(chat, messageIds);\n }\n break;\n }\n case markMessagesAsRead_1.MARK_MESSAGES_AS_READ_BY_CLIENT_ID_REMOTELY: {\n const { userId, clientMessageIds } = event.payload;\n const [chat] = chatFunctions.getChatByUserId(state.chats, userId);\n if (chatFunctions.isConfirmedChat(chat)) {\n chatFunctions.markMessagesAsReadByClientIdRemotely(chat, clientMessageIds);\n }\n break;\n }\n case markMessagesAsReadServerSync_1.MARK_MESSAGES_AS_READ_SERVER_SYNC_SUCCEEDED: {\n const { chatId, fromId, toId } = event.payload.request;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n chatFunctions.markMessagesAsReadOnServer(chat, fromId, toId);\n break;\n }\n case receiveP2PMessage_1.RECEIVE_P2P_MESSAGE: {\n const { chatId, message } = event.payload;\n const [chat] = chatFunctions.tryGetChat(state.chats, chatId);\n // Chat may not exist locally yet\n if (chat) {\n chatFunctions.addP2PMessage(chat, message);\n const newChatIndex = chatFunctions.sortChatsAndReturnSelectedIndex(state.chats, state.selectedChatIndex);\n selectChatAndPushToHistory(state, newChatIndex);\n }\n break;\n }\n case userTyping_1.REMOTE_USER_TYPING: {\n const { chatId, userId } = event.payload;\n const [chat] = chatFunctions.tryGetChat(state.chats, chatId);\n // Chat may not exist locally yet\n if (chat) {\n if (chatFunctions.isDirectChat(chat)) {\n chat.themTyping = !state.blockedUsers.includes(chat.them);\n }\n else {\n setFunctions.add(chat.participantsTyping, userId);\n }\n }\n break;\n }\n case userTyping_1.REMOTE_USER_STOPPED_TYPING: {\n const { chatId, userId } = event.payload;\n const [chat] = chatFunctions.tryGetChat(state.chats, chatId);\n // Chat may not exist locally yet\n if (chat) {\n if (chatFunctions.isDirectChat(chat)) {\n chat.themTyping = false;\n }\n else {\n setFunctions.remove(chat.participantsTyping, userId);\n }\n }\n break;\n }\n case sendMessage_1.SEND_MESSAGE_REQUESTED: {\n const payload = event.payload;\n const [chat, index] = chatFunctions.getChat(state.chats, payload.chat.chatId);\n chatFunctions.addUnconfirmedMessage(chat, payload.clientMessageId, payload.content, payload.repliesTo);\n chat.replyContext = null;\n state.chats.splice(index, 1);\n state.chats.unshift(chat);\n selectChatAndPushToHistory(state, 0);\n break;\n }\n case sendMessage_1.SEND_MESSAGE_SUCCEEDED: {\n const updatedChat = event.payload.chat;\n // SEND_MESSAGE_SUCCEEDED will never happen on a NewGroupChat since messages need to be sent using either a\n // userId or a chatId and a NewGroupChat has neither.\n let [chat, index] = chatFunctions.getChat(state.chats, updatedChat.chatId);\n state.chats[index] = chatFunctions.mergeUpdates(chat, updatedChat, index === state.selectedChatIndex);\n const newChatIndex = chatFunctions.sortChatsAndReturnSelectedIndex(state.chats, state.selectedChatIndex);\n selectChatAndPushToHistory(state, newChatIndex);\n break;\n }\n case sendMessage_1.SEND_MESSAGE_FAILED: {\n const { chatId, clientMessageId } = event.payload;\n const [chat, _index] = chatFunctions.getChat(state.chats, chatId);\n const messageIndex = chat.messages.findIndex(m => m.kind !== \"remote\" && m.clientMessageId === clientMessageId);\n if (messageIndex >= 0) {\n chat.messages.splice(messageIndex, 1);\n }\n break;\n }\n case addParticipants_1.ADD_PARTICIPANTS_SUCCEEDED: {\n const { chatId, users } = event.payload;\n const [chat] = chatFunctions.getChat(state.chats, chatId);\n if (chat.kind === constants_1.CONFIRMED_GROUP_CHAT) {\n // Add the participants immediately and remove them if the call fails\n setFunctions.unionWith(chat.participants, users);\n }\n break;\n }\n case removeParticipant_1.REMOVE_PARTICIPANT_REQUESTED: {\n const { chatId, userId } = event.payload;\n const [chat] = chatFunctions.getChat(state.chats, chatId);\n if (chat.kind === constants_1.CONFIRMED_GROUP_CHAT) {\n // Remove the participant immediately but add them back if the call fails\n setFunctions.remove(chat.participants, userId);\n }\n break;\n }\n case removeParticipant_1.REMOVE_PARTICIPANT_FAILED: {\n const { chatId, userId } = event.payload;\n const [chat] = chatFunctions.getChat(state.chats, chatId);\n if (chat.kind === constants_1.CONFIRMED_GROUP_CHAT) {\n // Removing the participant failed so add them back to the chat\n setFunctions.add(chat.participants, userId);\n }\n break;\n }\n case notifySessionExpired_1.SESSION_EXPIRED:\n case logout_1.USER_LOGGED_OUT: {\n return initialState;\n }\n case replyToMessage_1.REPLY_TO_MESSAGE_SELECTED: {\n const { replyContext, privateChatId } = event.payload;\n const chatId = privateChatId !== null && privateChatId !== void 0 ? privateChatId : replyContext.chatId;\n const [chat] = chatFunctions.getChat(state.chats, chatId);\n chat.replyContext = replyContext;\n break;\n }\n case replyToMessage_1.REPLY_TO_MESSAGE_CANCELLED: {\n const { chatId } = event.payload;\n const [chat] = chatFunctions.getChat(state.chats, chatId);\n chat.replyContext = null;\n break;\n }\n case deselectMessage_1.DESELECT_MESSAGE: {\n const { chatId } = event.payload;\n const [chat] = chatFunctions.getConfirmedChat(state.chats, chatId);\n if (chat) {\n chat.messageToSelect = null;\n }\n break;\n }\n case leaveGroup_1.LEAVE_GROUP_SUCCEEDED: {\n const { chatId } = event.payload;\n const [chat] = chatFunctions.getChat(state.chats, chatId);\n if (chat.kind === constants_1.CONFIRMED_GROUP_CHAT) {\n chatFunctions.removeChat(state.chats, chatId);\n const newChatIndex = state.chats.length\n ? 0\n : null;\n if (newChatIndex != null) {\n selectChatAndPushToHistory(state, newChatIndex);\n }\n else {\n history.back();\n }\n }\n break;\n }\n case switchViewMode_1.SWITCH_VIEW_MODE_REQUESTED: {\n const { viewMode } = event.payload;\n if (viewMode === viewMode_1.ViewMode.Desktop) {\n if (state.selectedChatIndex == null && state.chats.length > 0) {\n selectChatAndPushToHistory(state, 0);\n }\n }\n break;\n }\n case blockUser_1.USER_BLOCKED: {\n const { userId } = event.payload;\n setFunctions.add(state.blockedUsers, userId);\n break;\n }\n case blockUser_1.USER_UNBLOCKED: {\n const { userId } = event.payload;\n setFunctions.remove(state.blockedUsers, userId);\n break;\n }\n case toggleNotifications_1.NOTIFICATIONS_MUTED:\n case toggleNotifications_1.NOTIFICATIONS_UNMUTED: {\n const { chatId } = event.payload;\n const [chat] = chatFunctions.getChat(state.chats, chatId);\n if (chat.kind === constants_1.CONFIRMED_GROUP_CHAT || chat.kind === constants_1.CONFIRMED_DIRECT_CHAT) {\n chat.muted = event.type === toggleNotifications_1.NOTIFICATIONS_MUTED;\n }\n break;\n }\n }\n}, initialState);\nfunction maintainScrollOfSelectedChat(state) {\n if (state.selectedChatIndex !== null) {\n chatFunctions.maintainScroll(state.chats[state.selectedChatIndex]);\n }\n}\nfunction selectChatAndPushToHistory(state, index) {\n var _a;\n const id = (_a = state.chats[index]) === null || _a === void 0 ? void 0 : _a.chatId;\n if (id) {\n const replace = state.selectedChatIndex != null;\n historyFunctions.pushOrReplaceChat(id, replace);\n state.selectedChatIndex = index;\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redux_1 = require(\"redux\");\nconst chatsReducer_1 = __importDefault(require(\"./chatsReducer\"));\nconst usersReducer_1 = __importDefault(require(\"./usersReducer\"));\nconst appReducer_1 = __importDefault(require(\"./appReducer\"));\nconst rootReducer = redux_1.combineReducers({\n appState: appReducer_1.default,\n usersState: usersReducer_1.default,\n chatsState: chatsReducer_1.default\n});\nexports.default = rootReducer;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UserRegistrationStatus = void 0;\nconst immer_1 = __importDefault(require(\"immer\"));\nconst dateFunctions = __importStar(require(\"../utils/dateFunctions\"));\nconst setFunctions = __importStar(require(\"../utils/setFunctions\"));\nconst constants_1 = require(\"../constants\");\nconst gotoUser_1 = require(\"../actions/chats/gotoUser\");\nconst getAllChats_1 = require(\"../actions/chats/getAllChats\");\nconst getUpdatedChats_1 = require(\"../actions/chats/getUpdatedChats\");\nconst markRemoteUserOnline_1 = require(\"../actions/users/markRemoteUserOnline\");\nconst logout_1 = require(\"../actions/signin/logout\");\nconst notifySessionExpired_1 = require(\"../actions/signin/notifySessionExpired\");\nconst getCurrentUser_1 = require(\"../actions/users/getCurrentUser\");\nconst getUsers_1 = require(\"../actions/users/getUsers\");\nconst registerUser_1 = require(\"../actions/users/registerUser\");\nconst updateMinutesSinceLastOnline_1 = require(\"../actions/users/updateMinutesSinceLastOnline\");\nconst setProfileImage_1 = require(\"../actions/users/setProfileImage\");\nvar UserRegistrationStatus;\n(function (UserRegistrationStatus) {\n UserRegistrationStatus[UserRegistrationStatus[\"Unknown\"] = 0] = \"Unknown\";\n UserRegistrationStatus[UserRegistrationStatus[\"NotRegistered\"] = 1] = \"NotRegistered\";\n UserRegistrationStatus[UserRegistrationStatus[\"Registered\"] = 2] = \"Registered\";\n})(UserRegistrationStatus = exports.UserRegistrationStatus || (exports.UserRegistrationStatus = {}));\nconst initialState = {\n userRegistrationStatus: UserRegistrationStatus.Unknown,\n me: null,\n unknownUserIds: [],\n userDictionary: {},\n usersSyncedUpTo: null\n};\nexports.default = immer_1.default((state, event) => {\n var _a, _b, _c;\n switch (event.type) {\n case gotoUser_1.DIRECT_CHAT_CREATED: {\n const { user } = event.payload;\n const unknownUserIds = state.unknownUserIds;\n const userDictionary = state.userDictionary;\n setFunctions.remove(unknownUserIds, user.userId);\n if (!userDictionary.hasOwnProperty(user.userId)) {\n userDictionary[user.userId] = user;\n }\n break;\n }\n case getAllChats_1.GET_ALL_CHATS_SUCCEEDED:\n case getUpdatedChats_1.GET_UPDATED_CHATS_SUCCEEDED: {\n const { chats } = event.payload;\n const unknownUserIds = state.unknownUserIds;\n const userDictionary = state.userDictionary;\n const myUserId = state.me.userId;\n for (const chat of chats) {\n if (chat.kind === constants_1.CONFIRMED_DIRECT_CHAT) {\n if (!userDictionary.hasOwnProperty(chat.them)) {\n setFunctions.add(unknownUserIds, chat.them);\n }\n }\n else if (chat.kind === constants_1.CONFIRMED_GROUP_CHAT) {\n chat.participants.forEach((p) => {\n if (p !== myUserId && !userDictionary.hasOwnProperty(p)) {\n setFunctions.add(unknownUserIds, p);\n }\n });\n }\n }\n break;\n }\n case getCurrentUser_1.GET_CURRENT_USER_SUCCEEDED: {\n state.userRegistrationStatus = UserRegistrationStatus.Registered;\n state.me = Object.assign(Object.assign({}, event.payload), { imageBlobUrl: (_b = (_a = state.me) === null || _a === void 0 ? void 0 : _a.imageBlobUrl) !== null && _b !== void 0 ? _b : null });\n break;\n }\n case getCurrentUser_1.GET_CURRENT_USER_FAILED: {\n state.userRegistrationStatus = UserRegistrationStatus.NotRegistered;\n state.me = null;\n break;\n }\n case getUsers_1.GET_USERS_SUCCEEDED: {\n const { request, result } = event.payload;\n const unknownUserIds = state.unknownUserIds;\n const userDictionary = state.userDictionary;\n for (const user of result.users) {\n setFunctions.remove(unknownUserIds, user.userId);\n userDictionary[user.userId] = user;\n }\n // Only bump the usersSyncedUpTo value if all users were requested\n if (request.users.length === Object.keys(userDictionary).length) {\n state.usersSyncedUpTo = result.timestamp;\n }\n break;\n }\n case markRemoteUserOnline_1.MARK_REMOTE_USER_ONLINE: {\n const userId = event.payload;\n if (state.userDictionary.hasOwnProperty(userId)) {\n const user = state.userDictionary[userId];\n if (user.minutesSinceLastOnline > 0) {\n user.minutesSinceLastOnline = 0;\n user.lastOnline = new Date();\n }\n }\n break;\n }\n case registerUser_1.REGISTER_USER_SUCCEEDED: {\n state.userRegistrationStatus = UserRegistrationStatus.Registered;\n state.me = event.payload;\n break;\n }\n case registerUser_1.REGISTER_USER_FAILED_USER_EXISTS: {\n state.userRegistrationStatus = UserRegistrationStatus.Registered;\n break;\n }\n case registerUser_1.REGISTER_USER_FAILED_USERNAME_EXISTS: {\n state.userRegistrationStatus = UserRegistrationStatus.NotRegistered;\n break;\n }\n case updateMinutesSinceLastOnline_1.UPDATE_MINUTES_SINCE_LAST_ONLINE: {\n for (const value of Object.values(state.userDictionary)) {\n const user = value;\n user.minutesSinceLastOnline = Math.floor(dateFunctions.getMinutesSince(user.lastOnline));\n }\n break;\n }\n case setProfileImage_1.SET_PROFILE_IMAGE_REQUESTED: {\n const { imageId, blobUrl } = event.payload;\n const user = state.me;\n if (user != null) {\n user.imageId = imageId;\n user.imageBlobUrl = blobUrl;\n }\n break;\n }\n case setProfileImage_1.SET_PROFILE_IMAGE_FAILED:\n case setProfileImage_1.SET_PROFILE_IMAGE_DATA_UPLOAD_FAILED: {\n const { userId } = event.payload;\n const user = userId === ((_c = state.me) === null || _c === void 0 ? void 0 : _c.userId)\n ? state.me\n : (state.userDictionary.hasOwnProperty(userId)\n ? state.userDictionary[userId]\n : null);\n URL.revokeObjectURL(user.imageBlobUrl);\n user.imageBlobUrl = null;\n user.imageId = null;\n break;\n }\n case notifySessionExpired_1.SESSION_EXPIRED:\n case logout_1.USER_LOGGED_OUT: {\n return initialState;\n }\n }\n}, initialState);\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst agent_1 = require(\"@dfinity/agent\");\nconst principal_1 = require(\"@dfinity/principal\");\nconst idl_1 = require(\"./chats/candid/idl\");\nconst idl_2 = require(\"./p2p/candid/idl\");\nconst idl_3 = require(\"./userMgmt/candid/idl\");\nconst idl_4 = require(\"./notifications/candid/idl\");\nclass CanisterClientFactory {\n constructor(agent) {\n let chatsId = principal_1.Principal.fromText(process.env.CHATS_CANISTER_ID);\n let p2pId = principal_1.Principal.fromText(process.env.P2P_CANISTER_ID);\n let userMgmtId = principal_1.Principal.fromText(process.env.USER_MGMT_CANISTER_ID);\n let notificationsId = principal_1.Principal.fromText(process.env.NOTIFICATIONS_CANISTER_ID);\n this._chatsActor = this.createActor(agent, chatsId, idl_1.idlFactory);\n this._p2pActor = this.createActor(agent, p2pId, idl_2.idlFactory);\n this._userMgmtActor = this.createActor(agent, userMgmtId, idl_3.idlFactory);\n this._notificationsActor = this.createActor(agent, notificationsId, idl_4.idlFactory);\n }\n get chatsClient() {\n return this._chatsActor;\n }\n get p2pClient() {\n return this._p2pActor;\n }\n get userMgmtClient() {\n return this._userMgmtActor;\n }\n get notificationsClient() {\n return this._notificationsActor;\n }\n static get current() {\n return window.canisterClientFactory;\n }\n static set current(value) {\n window.canisterClientFactory = value;\n }\n createActor(agent, canisterId, factory) {\n return agent_1.Actor.createActor(factory, {\n agent,\n canisterId,\n });\n }\n}\nexports.default = CanisterClientFactory;\nCanisterClientFactory.init = (identity) => __awaiter(void 0, void 0, void 0, function* () {\n if (identity.getPrincipal().isAnonymous()) {\n throw new Error(\"Cannot use the anonymous identity\");\n }\n const agent = new agent_1.HttpAgent({ identity });\n // Fetch root key for certificate validation during development\n if (process.env.NODE_ENV !== \"production\") {\n agent.fetchRootKey();\n }\n CanisterClientFactory.current = new CanisterClientFactory(agent);\n});\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.groupChatFromCandid = exports.directChatFromCandid = exports.chatFromCandid = void 0;\nconst chatFunctions = __importStar(require(\"../../domain/model/chats\"));\nconst localMessage_1 = require(\"./localMessage\");\nconst rangeSet_1 = require(\"./rangeSet\");\nconst timestamp_1 = require(\"./timestamp\");\nconst userId_1 = require(\"./userId\");\nfunction chatFromCandid(value) {\n if (value.hasOwnProperty(\"Direct\")) {\n return directChatFromCandid(value.Direct);\n }\n else if (value.hasOwnProperty(\"Group\")) {\n return groupChatFromCandid(value.Group);\n }\n else {\n throw new Error(\"Unable to convert value to Chat\");\n }\n}\nexports.chatFromCandid = chatFromCandid;\nfunction directChatFromCandid(value) {\n return chatFunctions.newConfirmedDirectChat(value.id, userId_1.fromCandid(value.them), timestamp_1.toDate(value.display_date), timestamp_1.toDate(value.last_updated), value.latest_messages.reverse().map(localMessage_1.fromCandid), rangeSet_1.toArray(value.unread_by_me_message_id_ranges), rangeSet_1.toArray(value.unread_by_them_message_id_ranges), value.muted);\n}\nexports.directChatFromCandid = directChatFromCandid;\nfunction groupChatFromCandid(value) {\n return chatFunctions.newConfirmedGroupChat(value.id, value.subject, value.participants.map(userId_1.fromCandid), timestamp_1.toDate(value.display_date), timestamp_1.toDate(value.last_updated), value.min_visible_message_id, value.latest_messages.reverse().map(localMessage_1.fromCandid), rangeSet_1.toArray(value.unread_by_me_message_id_ranges), rangeSet_1.toArray(value.unread_by_any_message_id_ranges), value.muted);\n}\nexports.groupChatFromCandid = groupChatFromCandid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromCandid = void 0;\nconst messageContent_1 = require(\"./messageContent\");\nconst option_1 = require(\"./option\");\nconst timestamp_1 = require(\"./timestamp\");\nconst userId_1 = require(\"./userId\");\nfunction fromCandid(value) {\n return {\n kind: \"local\",\n id: value.id,\n clientMessageId: value.client_message_id,\n date: timestamp_1.toDate(value.timestamp),\n sender: userId_1.fromCandid(value.sender),\n content: messageContent_1.fromCandid(value.content),\n repliesTo: replyContextFromCandid(value.replies_to)\n };\n}\nexports.fromCandid = fromCandid;\nfunction replyContextFromCandid(value) {\n const option = option_1.fromCandid(value);\n return option\n ? {\n chatId: option.chat_id,\n userId: userId_1.fromCandid(option.user_id),\n messageId: option.message_id,\n content: messageContent_1.fromCandid(option.content)\n }\n : null;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCandid = exports.fromCandid = void 0;\nconst option_1 = require(\"./option\");\nfunction fromCandid(content) {\n if (content.hasOwnProperty(\"Text\")) {\n const inner = content.Text;\n return {\n kind: \"text\",\n text: inner.text\n };\n }\n if (content.hasOwnProperty(\"Media\")) {\n const inner = content.Media;\n return {\n kind: \"media\",\n caption: option_1.fromCandid(inner.caption),\n mimeType: inner.mime_type,\n width: inner.width,\n height: inner.height,\n id: inner.blob_id,\n size: inner.blob_size,\n chunkSize: inner.chunk_size,\n thumbnailData: inner.thumbnail_data,\n blobUrl: null,\n blobDeleted: inner.blob_deleted\n };\n }\n if (content.hasOwnProperty(\"File\")) {\n const inner = content.File;\n return {\n kind: \"file\",\n caption: option_1.fromCandid(inner.caption),\n name: inner.name,\n mimeType: inner.mime_type,\n id: inner.blob_id,\n size: inner.blob_size,\n chunkSize: inner.chunk_size,\n blobDeleted: inner.blob_deleted\n };\n }\n if (content.hasOwnProperty(\"Cycles\")) {\n const inner = content.Cycles;\n return {\n kind: \"cycles\",\n caption: option_1.fromCandid(inner.caption),\n amount: BigInt(inner.amount)\n };\n }\n throw new Error(\"Unrecognised content type - \" + JSON.stringify(content));\n}\nexports.fromCandid = fromCandid;\nfunction toCandid(content) {\n switch (content.kind) {\n case \"text\":\n return {\n Text: {\n text: content.text\n }\n };\n case \"media\":\n return {\n Media: {\n caption: option_1.toCandid(content.caption),\n mime_type: content.mimeType,\n width: content.width,\n height: content.height,\n blob_id: content.id,\n blob_size: content.size,\n chunk_size: content.chunkSize,\n thumbnail_data: content.thumbnailData,\n blob_deleted: content.blobDeleted\n }\n };\n case \"file\":\n return {\n File: {\n caption: option_1.toCandid(content.caption),\n name: content.name,\n mime_type: content.mimeType,\n blob_id: content.id,\n blob_size: content.size,\n chunk_size: content.chunkSize,\n blob_deleted: content.blobDeleted\n }\n };\n case \"cycles\":\n return {\n Cycles: {\n amount: content.amount,\n caption: option_1.toCandid(content.caption)\n }\n };\n }\n}\nexports.toCandid = toCandid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromCandid = void 0;\nconst userId_1 = require(\"./userId\");\nconst option_1 = require(\"./option\");\nfunction fromCandid(myProfile) {\n return {\n userId: userId_1.fromCandid(myProfile.id),\n username: myProfile.username,\n accountBalance: BigInt(myProfile.account_balance),\n imageId: option_1.fromCandid(myProfile.image_id),\n imageBlobUrl: null,\n version: myProfile.version\n };\n}\nexports.fromCandid = fromCandid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCandid = exports.fromCandid = void 0;\nfunction fromCandid(value) {\n return Array.isArray(value) && value.length\n ? value[0]\n : null;\n}\nexports.fromCandid = fromCandid;\nfunction toCandid(value) {\n return value ? [value] : [];\n}\nexports.toCandid = toCandid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromCandid = void 0;\nconst userId_1 = require(\"../candidConverters/userId\");\nfunction fromCandid(connectionDetails) {\n if (connectionDetails.hasOwnProperty(\"Offer\")) {\n const offer = connectionDetails.Offer;\n return {\n kind: \"offer\",\n id: offer.id,\n userId: userId_1.fromCandid(offer.user_id),\n connectionString: offer.connection_string,\n iceCandidates: offer.ice_candidates,\n ageSeconds: offer.age_seconds\n };\n }\n else if (connectionDetails.hasOwnProperty(\"Answer\")) {\n const answer = connectionDetails.Answer;\n return {\n kind: \"answer\",\n id: answer.id,\n offerId: answer.offer_id,\n userId: userId_1.fromCandid(answer.user_id),\n connectionString: answer.connection_string,\n iceCandidates: answer.ice_candidates,\n ageSeconds: answer.age_seconds\n };\n }\n else {\n throw new Error(\"Unrecognised connection details type\");\n }\n}\nexports.fromCandid = fromCandid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toArray = void 0;\nfunction toArray(rangeSet) {\n const array = [];\n for (const range of rangeSet) {\n for (let i = range[0]; i <= range[1]; i++) {\n array.push(i);\n }\n }\n return array;\n}\nexports.toArray = toArray;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCandid = exports.fromCandid = void 0;\nconst messageContent_1 = require(\"./messageContent\");\nconst option_1 = require(\"./option\");\nconst userId_1 = require(\"./userId\");\nfunction fromCandid(value) {\n const option = option_1.fromCandid(value);\n return option\n ? {\n chatId: option.chat_id,\n userId: userId_1.fromCandid(option.user_id),\n messageId: option.message_id,\n content: messageContent_1.fromCandid(option.content)\n }\n : null;\n}\nexports.fromCandid = fromCandid;\nfunction toCandid(repliesTo) {\n const option = repliesTo\n ? {\n chat_id: repliesTo.chatId,\n user_id: userId_1.toCandid(repliesTo.userId),\n message_id: repliesTo.messageId,\n content: messageContent_1.toCandid(repliesTo.content)\n }\n : null;\n return option_1.toCandid(option);\n}\nexports.toCandid = toCandid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCandid = exports.fromCandid = exports.toDate = void 0;\nfunction toDate(value) {\n return new Date(Number(value));\n}\nexports.toDate = toDate;\nfunction fromCandid(value) {\n return Number(value);\n}\nexports.fromCandid = fromCandid;\nfunction toCandid(timestamp) {\n return BigInt(timestamp);\n}\nexports.toCandid = toCandid;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toCandid = exports.fromCandid = void 0;\nconst principal_1 = require(\"@dfinity/principal\");\nfunction fromCandid(value) {\n return value.toString();\n}\nexports.fromCandid = fromCandid;\nfunction toCandid(userId) {\n return principal_1.Principal.fromText(userId);\n}\nexports.toCandid = toCandid;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromCandid = void 0;\nconst userId_1 = require(\"./userId\");\nconst option_1 = require(\"./option\");\nconst dateFunctions = __importStar(require(\"../../utils/dateFunctions\"));\nfunction fromCandid(userSummary) {\n return {\n userId: userId_1.fromCandid(userSummary.id),\n username: userSummary.username,\n usernameLower: userSummary.username.toLowerCase(),\n lastOnline: dateFunctions.addSeconds(new Date(), -userSummary.seconds_since_last_online),\n minutesSinceLastOnline: Math.floor(userSummary.seconds_since_last_online / 60),\n imageId: option_1.fromCandid(userSummary.image_id),\n chatId: userSummary.chat_id,\n version: userSummary.version\n };\n}\nexports.fromCandid = fromCandid;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst userId_1 = require(\"../candidConverters/userId\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId, users) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const candidUserIds = users.map(userId_1.toCandid);\n const response = yield client.add_participants(chatId, candidUserIds);\n if (\"Success\" in response) {\n return {\n kind: \"success\",\n countAdded: response.Success\n };\n }\n else if (\"PartialSuccess\" in response) {\n const result = response.PartialSuccess;\n return {\n kind: \"partialSuccess\",\n countAdded: result.count_added,\n blocked: result.blocked.map(userId_1.fromCandid)\n };\n }\n else if (\"Unauthorized\" in response) {\n return {\n kind: \"unauthorized\"\n };\n }\n else if (\"ChatNotFound\" in response) {\n return {\n kind: \"chatNotFound\"\n };\n }\n else if (\"NotGroupChat\" in response) {\n return {\n kind: \"notGroupChat\"\n };\n }\n else {\n throw new Error(\"Unrecognised 'add_participants' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst userId_1 = require(\"../candidConverters/userId\");\nfunction default_1(userId, unblock) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n yield client.block_user(userId_1.toCandid(userId), unblock);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst chat_1 = require(\"../candidConverters/chat\");\nconst userId_1 = require(\"../candidConverters/userId\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId, subject, users, chatHistoryVisibleToNewJoiners) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const candidUserIds = users.map(userId_1.toCandid);\n const canisterRequest = {\n chat_id: chatId,\n subject,\n participants: candidUserIds,\n chat_history_visible_to_new_joiners: chatHistoryVisibleToNewJoiners\n };\n const response = yield client.create_group_chat(canisterRequest);\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n result: chat_1.groupChatFromCandid(success)\n };\n }\n else if (\"ChatAlreadyExists\" in response) {\n return {\n kind: \"chatAlreadyExists\"\n };\n }\n else if (\"SubjectTooShort\" in response) {\n return {\n kind: \"subjectTooShort\",\n result: response.SubjectTooShort\n };\n }\n else if (\"SubjectTooLong\" in response) {\n return {\n kind: \"subjectTooLong\",\n result: response.SubjectTooLong\n };\n }\n else if (\"TooManyParticipants\" in response) {\n return {\n kind: \"tooManyParticipants\",\n result: response.TooManyParticipants\n };\n }\n else {\n throw new Error(\"Unrecognised 'create_group_chat' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMessagesById = void 0;\nconst localMessage_1 = require(\"../candidConverters/localMessage\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId, fromId, pageSize) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.get_messages(chatId, fromId, pageSize);\n return handleResponse(response);\n });\n}\nexports.default = default_1;\nfunction getMessagesById(chatId, ids) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.get_messages_by_id(chatId, ids);\n return handleResponse(response);\n });\n}\nexports.getMessagesById = getMessagesById;\nfunction handleResponse(response) {\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n result: {\n messages: success.messages.map(localMessage_1.fromCandid),\n latestMessageId: success.latest_message_id\n }\n };\n }\n else if (\"ChatNotFound\" in response) {\n return {\n kind: \"chatNotFound\"\n };\n }\n else {\n throw new Error(\"Unrecognised 'get_messages' response\");\n }\n}\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst chat_1 = require(\"../candidConverters/chat\");\nconst userId_1 = require(\"../candidConverters/userId\");\nconst option_1 = require(\"../candidConverters/option\");\nconst timestamp_1 = require(\"../candidConverters/timestamp\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst httpError_1 = require(\"../../errors/httpError\");\nfunction default_1(request) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const canisterRequest = {\n updated_since: option_1.toCandid(request.updatedSince ? timestamp_1.toCandid(request.updatedSince) : null),\n message_count_for_top_chat: option_1.toCandid(request.messageCountForTopChat)\n };\n let response;\n try {\n response = yield client.get_updates(canisterRequest);\n }\n catch (e) {\n return httpError_1.toHttpError(e);\n }\n if (\"Success\" in response) {\n const success = response.Success;\n const chats = success.chats.map(chat_1.chatFromCandid);\n let latestUpdateTimestamp = null;\n if (success.chats.length) {\n const latestChat = success.chats[0];\n latestUpdateTimestamp = timestamp_1.fromCandid(\"Direct\" in latestChat\n ? latestChat.Direct.last_updated\n : latestChat.Group.last_updated);\n }\n const blockedUsers = success.blocked_users.map(userId_1.fromCandid);\n return {\n kind: \"success\",\n chats,\n blockedUsers,\n latestUpdateTimestamp,\n };\n }\n else {\n throw new Error(\"Unrecognised 'get_chats' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JoinGroupResult = void 0;\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.join_group(chatId);\n if (\"Success\" in response) {\n return JoinGroupResult.Success;\n }\n else if (\"AlreadyInGroup\" in response) {\n return JoinGroupResult.AlreadyInGroup;\n }\n else if (\"UserLimitReached\" in response) {\n return JoinGroupResult.UserLimitReached;\n }\n else if (\"ChatNotFound\" in response) {\n return JoinGroupResult.ChatNotFound;\n }\n else if (\"NotGroupChat\" in response) {\n return JoinGroupResult.NotGroupChat;\n }\n else {\n throw new Error(\"Unrecognised 'join_group' response\");\n }\n });\n}\nexports.default = default_1;\nvar JoinGroupResult;\n(function (JoinGroupResult) {\n JoinGroupResult[JoinGroupResult[\"Success\"] = 0] = \"Success\";\n JoinGroupResult[JoinGroupResult[\"AlreadyInGroup\"] = 1] = \"AlreadyInGroup\";\n JoinGroupResult[JoinGroupResult[\"UserLimitReached\"] = 2] = \"UserLimitReached\";\n JoinGroupResult[JoinGroupResult[\"ChatNotFound\"] = 3] = \"ChatNotFound\";\n JoinGroupResult[JoinGroupResult[\"NotGroupChat\"] = 4] = \"NotGroupChat\";\n})(JoinGroupResult = exports.JoinGroupResult || (exports.JoinGroupResult = {}));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LeaveGroupResult = void 0;\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.leave_group(chatId);\n if (\"Success\" in response) {\n return LeaveGroupResult.Success;\n }\n else if (\"ParticipantNotFound\" in response) {\n return LeaveGroupResult.ParticipantNotFound;\n }\n else if (\"LastAdminCannotLeave\" in response) {\n return LeaveGroupResult.LastAdminCannotLeave;\n }\n else if (\"ChatNotFound\" in response) {\n return LeaveGroupResult.ChatNotFound;\n }\n else if (\"NotGroupChat\" in response) {\n return LeaveGroupResult.NotGroupChat;\n }\n else {\n throw new Error(\"Unrecognised 'leave_group' response\");\n }\n });\n}\nexports.default = default_1;\nvar LeaveGroupResult;\n(function (LeaveGroupResult) {\n LeaveGroupResult[LeaveGroupResult[\"Success\"] = 0] = \"Success\";\n LeaveGroupResult[LeaveGroupResult[\"ParticipantNotFound\"] = 1] = \"ParticipantNotFound\";\n LeaveGroupResult[LeaveGroupResult[\"LastAdminCannotLeave\"] = 2] = \"LastAdminCannotLeave\";\n LeaveGroupResult[LeaveGroupResult[\"ChatNotFound\"] = 3] = \"ChatNotFound\";\n LeaveGroupResult[LeaveGroupResult[\"NotGroupChat\"] = 4] = \"NotGroupChat\";\n})(LeaveGroupResult = exports.LeaveGroupResult || (exports.LeaveGroupResult = {}));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst rangeSet_1 = require(\"../candidConverters/rangeSet\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId, fromId, toId) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.mark_read(chatId, fromId, toId);\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n result: {\n unreadMessageIds: rangeSet_1.toArray(success.unread_message_id_ranges)\n }\n };\n }\n else if (\"ChatNotFound\" in response) {\n return {\n kind: \"chatNotFound\"\n };\n }\n else {\n throw new Error(\"Unrecognised 'mark_read' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RemoveParticipantResponse = void 0;\nconst userId_1 = require(\"../candidConverters/userId\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId, userId) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.remove_participant(chatId, userId_1.toCandid(userId));\n if (\"Success\" in response) {\n return RemoveParticipantResponse.Success;\n }\n else if (\"Unauthorized\" in response) {\n return RemoveParticipantResponse.Unauthorized;\n }\n else if (\"ParticipantNotFound\" in response) {\n return RemoveParticipantResponse.ParticipantNotFound;\n }\n else if (\"CannotRemoveSelfFromChat\" in response) {\n return RemoveParticipantResponse.CannotRemoveSelfFromChat;\n }\n else if (\"ChatNotFound\" in response) {\n return RemoveParticipantResponse.ChatNotFound;\n }\n else if (\"NotGroupChat\" in response) {\n return RemoveParticipantResponse.NotGroupChat;\n }\n else {\n throw new Error(\"Unrecognised 'remove_participant' response\");\n }\n });\n}\nexports.default = default_1;\nvar RemoveParticipantResponse;\n(function (RemoveParticipantResponse) {\n RemoveParticipantResponse[RemoveParticipantResponse[\"Success\"] = 0] = \"Success\";\n RemoveParticipantResponse[RemoveParticipantResponse[\"Unauthorized\"] = 1] = \"Unauthorized\";\n RemoveParticipantResponse[RemoveParticipantResponse[\"ParticipantNotFound\"] = 2] = \"ParticipantNotFound\";\n RemoveParticipantResponse[RemoveParticipantResponse[\"CannotRemoveSelfFromChat\"] = 3] = \"CannotRemoveSelfFromChat\";\n RemoveParticipantResponse[RemoveParticipantResponse[\"ChatNotFound\"] = 4] = \"ChatNotFound\";\n RemoveParticipantResponse[RemoveParticipantResponse[\"NotGroupChat\"] = 5] = \"NotGroupChat\";\n})(RemoveParticipantResponse = exports.RemoveParticipantResponse || (exports.RemoveParticipantResponse = {}));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst localMessage_1 = require(\"../candidConverters/localMessage\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(searchTerm, maxResults) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.search_all_messages(searchTerm, maxResults);\n if (\"Success\" in response) {\n const success = response.Success;\n return {\n kind: \"success\",\n result: {\n matches: success.matches.map((m) => ({\n chatId: m.chat_id,\n message: localMessage_1.fromCandid(m.message)\n }))\n }\n };\n }\n else {\n throw new Error(\"Unrecognised 'search_all_messages' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst messageContent_1 = require(\"../candidConverters/messageContent\");\nconst replyContext_1 = require(\"../candidConverters/replyContext\");\nconst timestamp_1 = require(\"../candidConverters/timestamp\");\nconst userId_1 = require(\"../candidConverters/userId\");\nconst option_1 = require(\"../candidConverters/option\");\nconst chat_1 = require(\"../candidConverters/chat\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst httpError_1 = require(\"../../errors/httpError\");\nfunction default_1(userId, senderName, clientMessageId, content, repliesTo) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const canisterRequest = {\n recipient: userId_1.toCandid(userId),\n sender_name: option_1.toCandid(senderName),\n client_message_id: clientMessageId,\n content: messageContent_1.toCandid(content),\n replies_to: replyContext_1.toCandid(repliesTo)\n };\n let response;\n try {\n response = yield client.send_direct_message(canisterRequest);\n }\n catch (e) {\n return httpError_1.toHttpError(e);\n }\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n result: {\n chat: chat_1.directChatFromCandid(success.chat_summary),\n messageId: success.message_id,\n date: timestamp_1.toDate(success.timestamp)\n }\n };\n }\n else if (\"UserNotFound\" in response) {\n return { kind: \"userNotFound\" };\n }\n else if (\"RecipientNotFound\" in response) {\n return { kind: \"recipientNotFound\" };\n }\n else if (\"BalanceExceeded\" in response) {\n return { kind: \"balanceExceeded\" };\n }\n else if (\"SenderBlocked\" in response) {\n return { kind: \"senderBlocked\" };\n }\n else if (\"RecipientBlocked\" in response) {\n return { kind: \"recipientBlocked\" };\n }\n else {\n throw new Error(\"Unrecognised 'send_direct_message' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst chat_1 = require(\"../candidConverters/chat\");\nconst messageContent_1 = require(\"../candidConverters/messageContent\");\nconst replyContext_1 = require(\"../candidConverters/replyContext\");\nconst option_1 = require(\"../candidConverters/option\");\nconst timestamp_1 = require(\"../candidConverters/timestamp\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst httpError_1 = require(\"../../errors/httpError\");\nfunction default_1(chatId, senderName, clientMessageId, content, repliesTo) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const candidRequest = {\n chat_id: chatId,\n sender_name: option_1.toCandid(senderName),\n client_message_id: clientMessageId,\n content: messageContent_1.toCandid(content),\n replies_to: replyContext_1.toCandid(repliesTo)\n };\n let response;\n try {\n response = yield client.send_message(candidRequest);\n }\n catch (e) {\n return httpError_1.toHttpError(e);\n }\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n result: {\n chat: chat_1.chatFromCandid(success.chat_summary),\n messageId: success.message_id,\n date: timestamp_1.toDate(success.timestamp),\n }\n };\n }\n else if (\"ChatNotFound\" in response) {\n return { kind: \"chatNotFound\" };\n }\n else if (\"SenderBlocked\" in response) {\n return { kind: \"senderBlocked\" };\n }\n else if (\"RecipientBlocked\" in response) {\n return { kind: \"recipientBlocked\" };\n }\n else {\n throw new Error(\"Unrecognised 'send_message' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst createGroupChat_1 = __importDefault(require(\"./createGroupChat\"));\nconst sendDirectMessage_1 = __importDefault(require(\"./sendDirectMessage\"));\nconst sendMessage_1 = __importDefault(require(\"./sendMessage\"));\nconst markRead_1 = __importDefault(require(\"./markRead\"));\nconst addParticipants_1 = __importDefault(require(\"./addParticipants\"));\nconst removeParticipant_1 = __importDefault(require(\"./removeParticipant\"));\nconst getUpdates_1 = __importDefault(require(\"./getUpdates\"));\nconst getMessages_1 = __importStar(require(\"./getMessages\"));\nconst searchAllMessages_1 = __importDefault(require(\"./searchAllMessages\"));\nconst leaveGroup_1 = __importDefault(require(\"./leaveGroup\"));\nconst joinGroup_1 = __importDefault(require(\"./joinGroup\"));\nconst blockUser_1 = __importDefault(require(\"./blockUser\"));\nconst toggleNotifications_1 = __importDefault(require(\"./toggleNotifications\"));\nclass service {\n static createGroupChat(chatId, subject, users, chatHistoryVisibleToNewJoiners) {\n return createGroupChat_1.default(chatId, subject, users, chatHistoryVisibleToNewJoiners);\n }\n static sendDirectMessage(userId, senderName, clientMessageId, content, repliesTo) {\n return sendDirectMessage_1.default(userId, senderName, clientMessageId, content, repliesTo);\n }\n static sendMessage(chatId, senderName, clientMessageId, content, repliesTo) {\n return sendMessage_1.default(chatId, senderName, clientMessageId, content, repliesTo);\n }\n static markRead(chatId, fromId, toId) {\n return markRead_1.default(chatId, fromId, toId);\n }\n static addParticipants(chatId, users) {\n return addParticipants_1.default(chatId, users);\n }\n static removeParticipant(chatId, userId) {\n return removeParticipant_1.default(chatId, userId);\n }\n static leaveGroup(chatId) {\n return leaveGroup_1.default(chatId);\n }\n static joinGroup(chatId) {\n return joinGroup_1.default(chatId);\n }\n static blockUser(userId, unblock) {\n return blockUser_1.default(userId, unblock);\n }\n static getUpdates(request) {\n return getUpdates_1.default(request);\n }\n static getMessages(chatId, fromId, pageSize) {\n return getMessages_1.default(chatId, fromId, pageSize);\n }\n static getMessagesById(chatId, ids) {\n return getMessages_1.getMessagesById(chatId, ids);\n }\n static searchAllMessages(searchTerm, maxResults) {\n return searchAllMessages_1.default(searchTerm, maxResults);\n }\n static toggle_notifications(chatId, mute) {\n return toggleNotifications_1.default(chatId, mute);\n }\n}\nexports.default = service;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(chatId, mute) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n yield client.toggle_notifications(chatId, mute);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CacheManager = void 0;\nconst ImmutableDataCache_1 = require(\"../../utils/ImmutableDataCache\");\nconst CachingDataService_1 = require(\"./CachingDataService\");\nclass CacheManager {\n constructor() {\n this._caches = new Map();\n this._caches.set(CachingDataService_1.DataSource.Avatar, new ImmutableDataCache_1.ImmutableDataCache(CachingDataService_1.DataSource[CachingDataService_1.DataSource.Avatar], {\n maxEntries: 200,\n maxAgeSeconds: 28 * 24 * 60 * 60 // 4 weeks\n }));\n this._caches.set(CachingDataService_1.DataSource.MediaMessage, new ImmutableDataCache_1.ImmutableDataCache(CachingDataService_1.DataSource[CachingDataService_1.DataSource.MediaMessage], {\n maxEntries: 50,\n maxAgeSeconds: 7 * 24 * 60 * 60 // 1 week\n }));\n }\n tryGet(src, key) {\n return __awaiter(this, void 0, void 0, function* () {\n const cache = this._caches.get(src);\n if (!cache) {\n return null;\n }\n return yield cache.tryGet(key);\n });\n }\n put(src, key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n const cache = this._caches.get(src);\n if (!cache) {\n return false;\n }\n return yield cache.put(key, data);\n });\n }\n scavenge() {\n return __awaiter(this, void 0, void 0, function* () {\n for (const cache of this._caches.values()) {\n yield cache.scavenge();\n }\n });\n }\n}\nexports.CacheManager = CacheManager;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataSource = void 0;\nconst CacheManager_1 = require(\"./CacheManager\");\nconst DataService_1 = require(\"./DataService\");\nvar DataSource;\n(function (DataSource) {\n DataSource[DataSource[\"Avatar\"] = 0] = \"Avatar\";\n DataSource[DataSource[\"MediaMessage\"] = 1] = \"MediaMessage\";\n DataSource[DataSource[\"FileMessage\"] = 2] = \"FileMessage\";\n})(DataSource = exports.DataSource || (exports.DataSource = {}));\nclass CachingDataService {\n constructor() {\n this._cache = new CacheManager_1.CacheManager();\n this._service = new DataService_1.DataService();\n }\n getData(src, key, totalBytes, chunkSize) {\n return __awaiter(this, void 0, void 0, function* () {\n let data = yield this._cache.tryGet(src, key);\n if (!data) {\n data = yield this._service.getData(key, totalBytes, chunkSize);\n if (!data) {\n return { kind: \"notFound\" };\n }\n yield this._cache.put(src, key, data);\n }\n return { kind: \"success\", data };\n });\n }\n putData(src, key, data, unchunked) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._cache.put(src, key, data);\n return this._service.putData(key, data, unchunked);\n });\n }\n scavengeCache() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._cache.scavenge();\n });\n }\n}\nconst service = new CachingDataService();\nexports.default = service;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataService = void 0;\nconst async_1 = __importDefault(require(\"async\"));\nconst getChunk_1 = __importDefault(require(\"./getChunk\"));\nconst constants_1 = require(\"../../constants\");\nconst putChunk_1 = __importDefault(require(\"./putChunk\"));\nclass DataService {\n getData(key, totalBytes, chunkSize) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!totalBytes || !chunkSize) {\n const response = yield getChunk_1.default(key, 0);\n switch (response.kind) {\n case \"notFound\":\n return null;\n case \"success\":\n return response.data;\n }\n }\n const bytes = new Uint8Array(totalBytes);\n const chunks = this.getChunkIndexes(totalBytes, chunkSize);\n try {\n yield async_1.default.mapLimit(chunks, 10, (i, callback) => __awaiter(this, void 0, void 0, function* () {\n const response = yield getChunk_1.default(key, i);\n if (response.kind === \"success\") {\n const offset = i * chunkSize;\n bytes.set(response.data, offset);\n callback(null);\n }\n else {\n callback({\n name: \"getDataFailed\",\n message: response.kind,\n });\n }\n }));\n }\n catch (e) {\n console.log(e);\n return null;\n }\n return bytes;\n });\n }\n putData(key, data, unchunked) {\n return __awaiter(this, void 0, void 0, function* () {\n if (unchunked) {\n yield putChunk_1.default(key, 0, data);\n return true;\n }\n const size = data.byteLength;\n const chunks = [];\n for (let byteStart = 0; byteStart < size; byteStart += constants_1.CHUNK_SIZE_BYTES) {\n const byteEnd = Math.min(size, byteStart + constants_1.CHUNK_SIZE_BYTES);\n const slice = data.slice(byteStart, byteEnd);\n chunks.push(slice);\n }\n yield async_1.default.forEachOfLimit(chunks, 10, (c, i, callback) => __awaiter(this, void 0, void 0, function* () {\n const index = i;\n yield putChunk_1.default(key, index, c);\n callback(null);\n }));\n return true;\n });\n }\n getChunkIndexes(totalBytes, chunkSize) {\n const chunks = [];\n let index = 0;\n for (let bytes = 0; bytes < totalBytes; bytes += chunkSize) {\n chunks.push(index++);\n }\n return chunks;\n }\n}\nexports.DataService = DataService;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst option_1 = require(\"../candidConverters/option\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(key, chunkIndex) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.get_chunk(key, chunkIndex);\n const result = option_1.fromCandid(response);\n if (result) {\n return {\n kind: \"success\",\n data: new Uint8Array(result)\n };\n }\n else {\n return {\n kind: \"notFound\"\n };\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(key, index, value) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.chatsClient;\n const response = yield client.put_chunk(key, index, Array.from(value));\n //TODO\n return {\n kind: \"success\"\n };\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst userId_1 = require(\"../candidConverters/userId\");\nfunction default_1(userId, subscription) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.notificationsClient;\n let subscriptionJson = subscription.toJSON();\n const args = {\n user_id: userId_1.toCandid(userId),\n subscription: {\n endpoint: subscriptionJson.endpoint,\n keys: {\n auth: subscriptionJson.keys[\"auth\"],\n p256dh: subscriptionJson.keys[\"p256dh\"],\n }\n }\n };\n yield client.push_subscription(args);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst pushSubscription_1 = __importDefault(require(\"./pushSubscription\"));\nconst subscriptionExists_1 = __importDefault(require(\"./subscriptionExists\"));\nclass service {\n static pushSubscription(userId, subscription) {\n return pushSubscription_1.default(userId, subscription);\n }\n static subscriptionExists(userId, p256dh_key) {\n return subscriptionExists_1.default(userId, p256dh_key);\n }\n}\nexports.default = service;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst userId_1 = require(\"../candidConverters/userId\");\nfunction default_1(userId, p256dh_key) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.notificationsClient;\n const args = {\n user_id: userId_1.toCandid(userId),\n p256dh_key\n };\n const response = yield client.subscription_exists(args);\n return \"Yes\" in response;\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst userId_1 = require(\"../candidConverters/userId\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(request) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.p2pClient;\n const candidRequest = {\n answers: request.answers.map(a => ({\n id: a.id,\n offer_id: a.offerId,\n user_id: userId_1.toCandid(a.userId),\n connection_string: a.connectionString,\n ice_candidates: a.iceCandidates\n }))\n };\n yield client.add_answers(candidRequest);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst userId_1 = require(\"../candidConverters/userId\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(request) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.p2pClient;\n const canisterRequest = {\n offers: request.offers.map(o => ({\n id: o.id,\n user_id: userId_1.toCandid(o.userId),\n connection_string: o.connectionString,\n ice_candidates: o.iceCandidates\n }))\n };\n const response = yield client.add_offers(canisterRequest);\n if (\"Success\" in response) {\n const result = response.Success;\n const counterOffers = result.counter_offers.map(o => ({\n kind: \"offer\",\n id: o.id,\n userId: userId_1.fromCandid(o.user_id),\n connectionString: o.connection_string,\n iceCandidates: o.ice_candidates,\n ageSeconds: o.age_seconds\n }));\n return {\n kind: \"success\",\n counterOffers\n };\n }\n else {\n throw new Error(\"Unrecognised 'add_offer' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst option_1 = require(\"../candidConverters/option\");\nconst p2pConnectionDetails_1 = require(\"../candidConverters/p2pConnectionDetails\");\nconst timestamp_1 = require(\"../candidConverters/timestamp\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(updatedSince) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.p2pClient;\n const candidRequest = option_1.toCandid(updatedSince ? timestamp_1.toCandid(updatedSince) : null);\n const response = yield client.get_connection_details(candidRequest);\n if (\"Success\" in response) {\n const connections = response.Success.connections.map(p2pConnectionDetails_1.fromCandid);\n return {\n kind: \"success\",\n connections,\n timestamp: timestamp_1.fromCandid(response.Success.timestamp)\n };\n }\n else {\n throw new Error(\"Unrecognised 'get_connection_details' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst userId_1 = require(\"../candidConverters/userId\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(request) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.p2pClient;\n const connections = request.connections.map(c => ({\n user_id: userId_1.toCandid(c.userId),\n id: c.id\n }));\n const candidRequest = {\n connections\n };\n return yield client.remove_connection_details(candidRequest);\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst addAnswers_1 = __importDefault(require(\"./addAnswers\"));\nconst addOffers_1 = __importDefault(require(\"./addOffers\"));\nconst getConnectionDetails_1 = __importDefault(require(\"./getConnectionDetails\"));\nconst removeConnectionDetails_1 = __importDefault(require(\"./removeConnectionDetails\"));\nclass service {\n static addOffers(request) {\n return addOffers_1.default(request);\n }\n static addAnswers(request) {\n return addAnswers_1.default(request);\n }\n static getConnectionDetails(updatedSince, deleteAfterRetrieval = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield getConnectionDetails_1.default(updatedSince);\n if (deleteAfterRetrieval && response.connections.length) {\n removeConnectionDetails_1.default({\n connections: response.connections.map(c => ({\n userId: c.userId,\n id: c.id\n }))\n });\n }\n return response;\n });\n }\n static removeConnectionDetails(request) {\n return removeConnectionDetails_1.default(request);\n }\n}\nexports.default = service;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst myProfile_1 = require(\"../candidConverters/myProfile\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst httpError_1 = require(\"../../errors/httpError\");\nfunction default_1() {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n let response;\n try {\n response = yield client.get_current_user();\n }\n catch (e) {\n return httpError_1.toHttpError(e);\n }\n if (\"Success\" in response) {\n const success = response.Success;\n return {\n kind: \"success\",\n myProfile: myProfile_1.fromCandid(success)\n };\n }\n else if (\"UserNotFound\" in response) {\n return {\n kind: \"userNotFound\"\n };\n }\n else {\n throw new Error(\"Unrecognised 'get_current_user' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst userId_1 = require(\"../candidConverters/userId\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst httpError_1 = require(\"../../errors/httpError\");\nfunction default_1(username) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n let response;\n try {\n response = yield client.get_user_id(username);\n }\n catch (e) {\n return httpError_1.toHttpError(e);\n }\n if (\"Success\" in response) {\n return {\n kind: \"success\",\n userId: userId_1.fromCandid(response.Success)\n };\n }\n else if (\"UserNotFound\" in response) {\n return {\n kind: \"userNotFound\"\n };\n }\n else {\n throw new Error(\"Unrecognised 'get_user_id' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst option_1 = require(\"../candidConverters/option\");\nconst timestamp_1 = require(\"../candidConverters/timestamp\");\nconst userId_1 = require(\"../candidConverters/userId\");\nconst userSummary_1 = require(\"../candidConverters/userSummary\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst httpError_1 = require(\"../../errors/httpError\");\nfunction default_1(request) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n const canisterRequest = {\n users: request.users.map(userId_1.toCandid),\n updated_since: option_1.toCandid(request.updatedSince ? timestamp_1.toCandid(request.updatedSince) : null)\n };\n let response;\n try {\n response = yield client.get_users(canisterRequest);\n }\n catch (e) {\n return httpError_1.toHttpError(e);\n }\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n users: success.users.map(userSummary_1.fromCandid),\n timestamp: timestamp_1.fromCandid(success.timestamp)\n };\n }\n else {\n throw new Error(\"Unrecognised 'get_users' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1() {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n yield client.mark_as_online();\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst myProfile_1 = require(\"../candidConverters/myProfile\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nconst httpError_1 = require(\"../../errors/httpError\");\nfunction default_1(username) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n let response;\n try {\n response = yield client.register_user(username);\n }\n catch (e) {\n return httpError_1.toHttpError(e);\n }\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n myProfile: myProfile_1.fromCandid(success)\n };\n }\n else if (\"UserExists\" in response) {\n return {\n kind: \"userExists\"\n };\n }\n else if (\"UsernameTaken\" in response) {\n return {\n kind: \"usernameTaken\"\n };\n }\n else if (\"UserLimitReached\" in response) {\n const userLimit = response.UserLimitReached;\n return {\n kind: \"userLimitReached\",\n userLimit\n };\n }\n else {\n throw new Error(\"Unrecognised 'register_user' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst userSummary_1 = require(\"../candidConverters/userSummary\");\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(request) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n const canisterRequest = {\n search_term: request.search_term,\n max_results: request.max_results\n };\n const response = yield client.search_users(canisterRequest);\n if (\"Success\" in response) {\n let success = response.Success;\n return {\n kind: \"success\",\n users: success.users.map(userSummary_1.fromCandid)\n };\n }\n else {\n throw new Error(\"Unrecognised 'search_users' response\");\n }\n });\n}\nexports.default = default_1;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst registerUser_1 = __importDefault(require(\"./registerUser\"));\nconst updateUsername_1 = __importDefault(require(\"./updateUsername\"));\nconst markAsOnline_1 = __importDefault(require(\"./markAsOnline\"));\nconst getCurrentUser_1 = __importDefault(require(\"./getCurrentUser\"));\nconst getUserId_1 = __importDefault(require(\"./getUserId\"));\nconst getUsers_1 = __importDefault(require(\"./getUsers\"));\nconst searchUsers_1 = __importDefault(require(\"./searchUsers\"));\nconst setProfileImage_1 = __importDefault(require(\"./setProfileImage\"));\nclass service {\n static registerUser(username) {\n return registerUser_1.default(username);\n }\n static updateUsername(username) {\n return __awaiter(this, void 0, void 0, function* () {\n return updateUsername_1.default(username);\n });\n }\n static setProfileImage(imageId) {\n return __awaiter(this, void 0, void 0, function* () {\n return setProfileImage_1.default(imageId);\n });\n }\n static markAsOnline() {\n return __awaiter(this, void 0, void 0, function* () {\n return markAsOnline_1.default();\n });\n }\n static getCurrentUser() {\n return __awaiter(this, void 0, void 0, function* () {\n return getCurrentUser_1.default();\n });\n }\n static getUserId(username) {\n return __awaiter(this, void 0, void 0, function* () {\n return getUserId_1.default(username);\n });\n }\n static getUsers(request) {\n return __awaiter(this, void 0, void 0, function* () {\n return getUsers_1.default(request);\n });\n }\n static searchUsers(request) {\n return __awaiter(this, void 0, void 0, function* () {\n return searchUsers_1.default(request);\n });\n }\n}\nexports.default = service;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetProfileImageResponse = void 0;\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(imageId) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n const response = yield client.set_profile_image(imageId);\n if (\"Success\" in response) {\n return SetProfileImageResponse.Success;\n }\n else if (\"UserNotFound\" in response) {\n return SetProfileImageResponse.UserNotFound;\n }\n else {\n throw new Error(\"Unrecognised 'set_profile_image' response\");\n }\n });\n}\nexports.default = default_1;\nvar SetProfileImageResponse;\n(function (SetProfileImageResponse) {\n SetProfileImageResponse[SetProfileImageResponse[\"Success\"] = 0] = \"Success\";\n SetProfileImageResponse[SetProfileImageResponse[\"UserNotFound\"] = 1] = \"UserNotFound\";\n})(SetProfileImageResponse = exports.SetProfileImageResponse || (exports.SetProfileImageResponse = {}));\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UpdateUsernameResponse = void 0;\nconst CanisterClientFactory_1 = __importDefault(require(\"../CanisterClientFactory\"));\nfunction default_1(username) {\n return __awaiter(this, void 0, void 0, function* () {\n const client = CanisterClientFactory_1.default.current.userMgmtClient;\n const response = yield client.update_username(username);\n if (\"Success\" in response) {\n return UpdateUsernameResponse.Success;\n }\n else if (\"SuccessNoChange\" in response) {\n return UpdateUsernameResponse.SuccessNoChange;\n }\n else if (\"UsernameTaken\" in response) {\n return UpdateUsernameResponse.UsernameTaken;\n }\n else if (\"UserNotFound\" in response) {\n return UpdateUsernameResponse.UserNotFound;\n }\n else {\n throw new Error(\"Unrecognised 'update_username' response\");\n }\n });\n}\nexports.default = default_1;\nvar UpdateUsernameResponse;\n(function (UpdateUsernameResponse) {\n UpdateUsernameResponse[UpdateUsernameResponse[\"Success\"] = 0] = \"Success\";\n UpdateUsernameResponse[UpdateUsernameResponse[\"SuccessNoChange\"] = 1] = \"SuccessNoChange\";\n UpdateUsernameResponse[UpdateUsernameResponse[\"UsernameTaken\"] = 2] = \"UsernameTaken\";\n UpdateUsernameResponse[UpdateUsernameResponse[\"UserNotFound\"] = 3] = \"UserNotFound\";\n})(UpdateUsernameResponse = exports.UpdateUsernameResponse || (exports.UpdateUsernameResponse = {}));\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst tagManagerHeaderScript_html_1 = __importDefault(require(\"../analytics/ga/tagManagerHeaderScript.html\"));\nconst tagManagerBodyScript_html_1 = __importDefault(require(\"../analytics/ga/tagManagerBodyScript.html\"));\nconst authClient = __importStar(require(\"../utils/authClient\"));\nfunction default_1() {\n return __awaiter(this, void 0, void 0, function* () {\n yield authClient.init();\n insertGoogleTagManagerScripts();\n setupBigIntSerialization();\n });\n}\nexports.default = default_1;\nfunction insertGoogleTagManagerScripts() {\n const headerScriptNode = document.createRange().createContextualFragment(tagManagerHeaderScript_html_1.default);\n document.head.appendChild(headerScriptNode);\n const bodyScriptNode = document.createRange().createContextualFragment(tagManagerBodyScript_html_1.default);\n document.body.appendChild(bodyScriptNode);\n}\nfunction setupBigIntSerialization() {\n // Needed for serializing ChatId values\n BigInt.prototype.toJSON = function () { return this.toString(); };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redux_1 = require(\"redux\");\nconst developmentOnly_1 = require(\"redux-devtools-extension/developmentOnly\");\nconst redux_thunk_1 = __importDefault(require(\"redux-thunk\"));\nconst reducers_1 = __importDefault(require(\"./reducers\"));\nconst analyticsMiddleware_1 = __importDefault(require(\"./analytics/analyticsMiddleware\"));\nconst webRtcMiddleware_1 = __importDefault(require(\"./domain/webRtc/webRtcMiddleware\"));\nconst errorMiddleware_1 = __importDefault(require(\"./errors/errorMiddleware\"));\nconst initialState = {};\nconst middleware = [redux_thunk_1.default, webRtcMiddleware_1.default, analyticsMiddleware_1.default, errorMiddleware_1.default];\nconst store = redux_1.createStore(reducers_1.default, initialState, redux_1.compose(developmentOnly_1.composeWithDevTools(redux_1.applyMiddleware(...middleware))));\nexports.default = store;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.darkTheme = exports.lightTheme = void 0;\nconst createMuiTheme_1 = __importDefault(require(\"@material-ui/core/styles/createMuiTheme\"));\nconst colorManipulator_1 = require(\"@material-ui/core/styles/colorManipulator\");\nconst defaultColours = {\n outerBackgroundColor: \"#41398b\",\n textColor: \"#000000\",\n mainPanel: {\n backgroundColor: \"#3dc5ee\"\n },\n header: {\n primaryTextColor: \"#000000\",\n secondaryTextColor: \"#666666\",\n backgroundColor: \"#ededed\"\n },\n footer: {\n mutedColor: \"#444444\",\n iconColor: \"#9b9b9b\",\n backgroundColor: \"#ededed\"\n },\n sidePanel: {\n backgroundColor: \"#ffffff\",\n subHeaderBackgroundColor: \"#f6f6f6\",\n listItemHoverBackgroundColor: \"#f0f0f0\",\n listItemSelectedBackgroundColor: \"#eeeeee\"\n },\n textBox: {\n backgroundColor: \"#ffffff\",\n textColor: \"#111111\"\n },\n messageSentByMe: {\n textColor: \"#ffffff\",\n backgroundColor: \"#d62c7d\",\n highlightedContentBackgroundColor: \"#ea4091\"\n },\n messageSentByElse: {\n textColor: \"#000000\",\n backgroundColor: \"#ffffff\",\n highlightedContentBackgroundColor: \"#e9e9e9\",\n unreadMessageBrightness: 0.90\n },\n dayChangeMarker: {\n textColor: \"#000000\",\n backgroundColor: \"#dddddd\"\n },\n linkColor: \"#d62c7d\",\n buttonColor: \"#d62c7d\",\n icon: {\n color: \"#ffffff\",\n hover: \"rgba(0, 0, 0, 0.08)\",\n backgroundColor: \"#d8d8d8\"\n },\n iconAlt: {\n color: \"#333333\",\n hover: colorManipulator_1.darken(\"#d8d8d8\", 0.1),\n backgroundColor: \"#d8d8d8\"\n },\n green: {\n main: \"#32cd32\",\n contrastText: \"#ffffff\"\n },\n loginRegister: {\n textColor: \"#000000\",\n backgroundColor: \"#ffffff\",\n buttonBackgroundColor: \"#269fd4\",\n buttonTextColor: \"#ffffff\"\n }\n};\nconst darkThemeColors = {\n outerBackgroundColor: \"#000000\",\n textColor: \"#bbbbbb\",\n mainPanel: {\n backgroundColor: \"#111111\"\n },\n header: {\n primaryTextColor: \"#cccccc\",\n secondaryTextColor: \"#a8a8a8\",\n backgroundColor: \"#333333\"\n },\n footer: {\n mutedColor: \"#bbbbbb\",\n iconColor: \"#aaaaaa\",\n backgroundColor: \"#333333\"\n },\n sidePanel: {\n backgroundColor: \"#222222\",\n subHeaderBackgroundColor: \"#383838\",\n listItemHoverBackgroundColor: \"#383838\",\n listItemSelectedBackgroundColor: \"#444444\"\n },\n textBox: {\n backgroundColor: \"#555555\",\n textColor: \"#cccccc\"\n },\n messageSentByMe: {\n textColor: \"#cccccc\",\n backgroundColor: \"#961f57\",\n highlightedContentBackgroundColor: \"#c12871\"\n },\n messageSentByElse: {\n textColor: \"#bbbbbb\",\n backgroundColor: \"#383838\",\n highlightedContentBackgroundColor: \"#494949\",\n unreadMessageBrightness: 1.05\n },\n dayChangeMarker: {\n textColor: \"#444444\",\n backgroundColor: \"#aaaaaa\"\n },\n linkColor: \"#d62c7d\",\n buttonColor: \"#d62c7d\",\n icon: {\n color: \"#777777\",\n hover: \"rgba(255, 255, 255, 0.08)\",\n backgroundColor: \"#222222\"\n },\n iconAlt: {\n color: \"#777777\",\n hover: colorManipulator_1.lighten(\"#222222\", 0.1),\n backgroundColor: \"#222222\"\n },\n green: {\n main: \"#28a428\",\n contrastText: \"#cccccc\"\n },\n loginRegister: {\n textColor: \"#000000\",\n backgroundColor: \"#ffffff\",\n buttonBackgroundColor: \"#3dc5ee\",\n buttonTextColor: \"#ffffff\"\n }\n};\nconst buildOptions = (darkMode) => {\n const colors = darkMode ? darkThemeColors : defaultColours;\n return {\n typography: {\n fontFamily: \"-apple-system,BlinkMacSystemFont,\\\"Segoe UI\\\",Roboto,\\\"Helvetica Neue\\\",Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\"\",\n h6: {\n fontWeight: \"normal\"\n },\n smallest: {\n fontSize: \"0.6875rem\"\n }\n },\n components: {\n MuiButtonBase: {\n defaultProps: {\n disableRipple: true\n }\n },\n MuiLink: {\n defaultProps: {\n color: colors.linkColor\n }\n },\n MuiTypography: {\n defaultProps: {\n variantMapping: {\n body1: \"span\",\n body2: \"span\",\n caption: \"span\"\n }\n }\n }\n },\n breakpoints: {\n values: {\n xs: 0,\n sm: 768,\n md: 960,\n lg: 1400,\n xl: 1920\n }\n },\n avatarSize: {\n sm: 40,\n md: 50\n },\n colors: darkMode ? darkThemeColors : defaultColours,\n palette: {\n mode: darkMode ? \"dark\" : \"light\"\n }\n };\n};\nexports.lightTheme = createMuiTheme_1.default(buildOptions(false));\nexports.darkTheme = createMuiTheme_1.default(buildOptions(true));\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Dimensions {\n constructor(width, height) {\n this._width = 0;\n this._height = 0;\n this._width = width;\n this._height = height;\n }\n get width() {\n return this._width;\n }\n get height() {\n return this._height;\n }\n scaleToFit(maxDimensions) {\n const aspectRatio = this.width / this.height;\n const maxAspectRatio = maxDimensions.width / maxDimensions.height;\n if (this.width <= maxDimensions.width && this.height <= maxDimensions.height) {\n return new Dimensions(this.width, this.height);\n }\n if (aspectRatio > maxAspectRatio) {\n return new Dimensions(maxDimensions.width, Math.floor(maxDimensions.width / aspectRatio));\n }\n else {\n return new Dimensions(Math.floor(maxDimensions.height * aspectRatio), maxDimensions.height);\n }\n }\n}\nexports.default = Dimensions;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImmutableDataCache = void 0;\nconst workbox_expiration_1 = require(\"workbox-expiration\");\nconst DEFAULT_MAX_CACHE_OBJECT_SIZE_BYTES = 2 * 1024 * 1024; // 2MB\nclass ImmutableDataCache {\n constructor(cacheName, config = {}) {\n var _a;\n this._cacheName = cacheName;\n this._expirationManager = new workbox_expiration_1.CacheExpiration(cacheName, {\n maxAgeSeconds: config.maxAgeSeconds,\n maxEntries: config.maxEntries\n });\n this._maxObjectSize = (_a = config.maxObjectSizeBytes) !== null && _a !== void 0 ? _a : DEFAULT_MAX_CACHE_OBJECT_SIZE_BYTES;\n }\n tryGet(key) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const cache = yield this.openCache();\n if (!cache) {\n return null;\n }\n const response = yield cache.match(key);\n if (!response) {\n return null;\n }\n // We are doing this with the assumption that the cached objects are immutable\n yield this._expirationManager.updateTimestamp(key);\n return new Uint8Array(yield response.arrayBuffer());\n }\n catch (e) {\n console.log(e);\n return null;\n }\n });\n }\n put(key, data) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (data.length > this._maxObjectSize) {\n return false;\n }\n const cache = yield this.openCache();\n if (!cache) {\n return false;\n }\n yield cache.put(key, new Response(data));\n yield this._expirationManager.updateTimestamp(key);\n return true;\n }\n catch (e) {\n console.log(e);\n return false;\n }\n });\n }\n scavenge() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._expirationManager.expireEntries();\n });\n }\n openCache() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if (!(\"caches\" in window)) {\n return null;\n }\n return (_a = yield caches.open(this._cacheName)) !== null && _a !== void 0 ? _a : null;\n });\n }\n}\nexports.ImmutableDataCache = ImmutableDataCache;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Stopwatch {\n constructor() {\n this.startTime = performance.now();\n }\n static startNew() {\n return new Stopwatch();\n }\n getElapsedMs() {\n return performance.now() - this.startTime;\n }\n}\nexports.default = Stopwatch;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTimeUntilSessionExpiryMs = exports.init = void 0;\nconst auth_client_1 = require(\"@dfinity/auth-client\");\nconst identity_1 = require(\"@dfinity/identity\");\nlet authClient;\nconst init = () => __awaiter(void 0, void 0, void 0, function* () {\n if (!authClient) {\n authClient = yield auth_client_1.AuthClient.create();\n }\n});\nexports.init = init;\nconst getAuthClient = () => authClient;\nexports.default = getAuthClient;\nfunction getTimeUntilSessionExpiryMs() {\n const identity = authClient === null || authClient === void 0 ? void 0 : authClient.getIdentity();\n if (!(identity instanceof identity_1.DelegationIdentity)) {\n return 0;\n }\n const expiryDateTimestampMs = Number(identity.getDelegation().delegations\n .map(d => d.delegation.expiration)\n .reduce((current, next) => next < current ? next : current) / BigInt(1000000));\n return expiryDateTimestampMs - Date.now();\n}\nexports.getTimeUntilSessionExpiryMs = getTimeUntilSessionExpiryMs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toUint8Array = void 0;\nfunction toUint8Array(base64String) {\n var padding = '='.repeat((4 - base64String.length % 4) % 4);\n var base64 = (base64String + padding)\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n var rawData = window.atob(base64);\n var outputArray = new Uint8Array(rawData.length);\n for (var i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\nexports.toUint8Array = toUint8Array;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dataToBlobUrl = void 0;\nfunction dataToBlobUrl(data, type) {\n const options = type ? { type } : undefined;\n const blob = new Blob([data], options);\n return URL.createObjectURL(blob);\n}\nexports.dataToBlobUrl = dataToBlobUrl;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.round = exports.fromT = exports.toT = exports.fromCurrency = exports.toCurrency = void 0;\nconst GBP_TO_MILLION_CYCLES = 1260000;\nconst USD_TO_MILLION_CYCLES = 692104;\nconst MILLION = 1000000;\nconst MILLION_BIGINT = BigInt(MILLION);\nfunction toCurrency(amount, currency) {\n let rate = exchangeRate(currency);\n return Number(amount / MILLION_BIGINT) / rate;\n}\nexports.toCurrency = toCurrency;\nfunction fromCurrency(amount, currency) {\n let rate = exchangeRate(currency);\n return BigInt(amount * rate) * MILLION_BIGINT;\n}\nexports.fromCurrency = fromCurrency;\nfunction toT(val) {\n return Number(val / MILLION_BIGINT) / MILLION;\n}\nexports.toT = toT;\nfunction fromT(val) {\n return BigInt(val * MILLION) * MILLION_BIGINT;\n}\nexports.fromT = fromT;\n// Rounds to 2 decimal places\n// https://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary\nfunction round(num) {\n return Math.round((num + Number.EPSILON) * 100) / 100;\n}\nexports.round = round;\nfunction exchangeRate(currency) {\n let rate;\n switch (currency) {\n case \"GBP\":\n rate = GBP_TO_MILLION_CYCLES;\n break;\n case \"USD\":\n rate = USD_TO_MILLION_CYCLES;\n break;\n default:\n throw Error(\"Unsupported currency\");\n }\n return rate;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getMinutesSince = exports.areOnSameDay = exports.addSeconds = exports.addDays = exports.getStartOfDay = exports.getStartOfToday = void 0;\nfunction getStartOfToday() {\n return getStartOfDay(new Date());\n}\nexports.getStartOfToday = getStartOfToday;\nfunction getStartOfDay(date) {\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n return new Date(year, month, day);\n}\nexports.getStartOfDay = getStartOfDay;\nfunction addDays(date, days) {\n const copy = new Date(date);\n copy.setDate(date.getDate() + days);\n return copy;\n}\nexports.addDays = addDays;\nfunction addSeconds(date, seconds) {\n const copy = new Date(date);\n copy.setSeconds(date.getSeconds() + seconds);\n return copy;\n}\nexports.addSeconds = addSeconds;\nfunction areOnSameDay(left, right) {\n const dayLeft = left.getDate();\n const dayRight = right.getDate();\n if (dayLeft !== dayRight)\n return false;\n const monthLeft = left.getMonth();\n const monthRight = right.getMonth();\n if (monthLeft !== monthRight)\n return false;\n const yearLeft = left.getFullYear();\n const yearRight = right.getFullYear();\n return yearLeft === yearRight;\n}\nexports.areOnSameDay = areOnSameDay;\nfunction getMinutesSince(date) {\n const now = new Date();\n const diffMillis = now.getTime() - date.getTime();\n return (diffMillis / 1000) / 60;\n}\nexports.getMinutesSince = getMinutesSince;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.containsEmoji = void 0;\nfunction containsEmoji(text) {\n const regex_emoji = /[\\p{Extended_Pictographic}\\u{1F3FB}-\\u{1F3FF}\\u{1F9B0}-\\u{1F9B3}]/u;\n return regex_emoji.test(text);\n}\nexports.containsEmoji = containsEmoji;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.exceptWith = exports.except = exports.unionWith = exports.union = exports.intersectWith = exports.intersect = exports.remove = exports.add = void 0;\nfunction add(array, item) {\n if (array.includes(item)) {\n return false;\n }\n array.push(item);\n return true;\n}\nexports.add = add;\nfunction remove(array, item) {\n const index = array.indexOf(item);\n if (index < 0) {\n return false;\n }\n array.splice(index, 1);\n return true;\n}\nexports.remove = remove;\nfunction intersect(left, right) {\n const clone = left.slice();\n intersectWith(clone, right);\n return clone;\n}\nexports.intersect = intersect;\nfunction intersectWith(left, right) {\n for (let index = left.length - 1; index >= 0; index--) {\n if (!right.includes(left[index])) {\n left.splice(index, 1);\n }\n }\n}\nexports.intersectWith = intersectWith;\nfunction union(left, right) {\n const clone = left.slice();\n unionWith(clone, right);\n return clone;\n}\nexports.union = union;\nfunction unionWith(left, right) {\n return right.filter(x => !left.includes(x)).forEach(x => left.push(x));\n}\nexports.unionWith = unionWith;\nfunction except(left, right) {\n const clone = left.slice();\n exceptWith(clone, right);\n return clone;\n}\nexports.except = except;\nfunction exceptWith(left, right) {\n for (const x of right) {\n const index = left.indexOf(x);\n if (index >= 0) {\n left.splice(index, 1);\n }\n }\n}\nexports.exceptWith = exceptWith;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fromHex = exports.toHex = void 0;\nfunction toHex(n) {\n return BigInt(n).toString(16).padStart(32, \"0\");\n}\nexports.toHex = toHex;\nfunction fromHex(hex) {\n return BigInt(\"0x\" + hex);\n}\nexports.fromHex = fromHex;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapURLsInAnchorTags = exports.extractQueryStringAsObject = exports.removeFragment = void 0;\n// Taken from https://stackoverflow.com/a/13824103\nfunction removeFragment() {\n window.location.replace(\"#\");\n // slice off the remaining \"#\" in HTML5:\n if (typeof window.history.replaceState === \"function\") {\n history.replaceState({}, \"\", window.location.href.slice(0, -1));\n }\n}\nexports.removeFragment = removeFragment;\nfunction extractQueryStringAsObject() {\n const search = location.search.substring(1);\n return search.length\n ? JSON.parse('{\"' + decodeURI(search).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}')\n : {};\n}\nexports.extractQueryStringAsObject = extractQueryStringAsObject;\n// Blacklisted completely\n// \" < \\s\n//\n// Blacklisted from end\n// . , ( ) [ ] { } ! @ + : %\nfunction wrapURLsInAnchorTags(text, new_window) {\n const url_pattern = /(ftp|http|https):\\/\\/[^\\\"<\\s]+[^\\\"<\\s.,\\(\\)\\[\\]\\{\\}!@+:%]/g;\n const target = (new_window === true || new_window == null) ? '_blank' : '';\n return text.replace(url_pattern, function (url) {\n return '
' + url + '';\n });\n}\nexports.wrapURLsInAnchorTags = wrapURLsInAnchorTags;\n;\n","export const idlFactory = ({ IDL }) => {\n const ChatId = IDL.Nat;\n const UserId = IDL.Principal;\n const AddParticipantsResponse = IDL.Variant({\n 'PartialSuccess' : IDL.Record({\n 'count_added' : IDL.Nat32,\n 'blocked' : IDL.Vec(UserId),\n }),\n 'ChatNotFound' : IDL.Null,\n 'NotGroupChat' : IDL.Null,\n 'Success' : IDL.Nat32,\n 'Unauthorized' : IDL.Null,\n });\n const CreateGroupChatRequest = IDL.Record({\n 'participants' : IDL.Vec(UserId),\n 'subject' : IDL.Text,\n 'chat_history_visible_to_new_joiners' : IDL.Bool,\n 'chat_id' : ChatId,\n });\n const Timestamp = IDL.Nat64;\n const FileContent = IDL.Record({\n 'blob_size' : IDL.Nat32,\n 'blob_id' : IDL.Text,\n 'name' : IDL.Text,\n 'mime_type' : IDL.Text,\n 'caption' : IDL.Opt(IDL.Text),\n 'chunk_size' : IDL.Nat32,\n 'blob_deleted' : IDL.Bool,\n });\n const TextContent = IDL.Record({ 'text' : IDL.Text });\n const MediaContent = IDL.Record({\n 'height' : IDL.Nat32,\n 'blob_size' : IDL.Nat32,\n 'blob_id' : IDL.Text,\n 'mime_type' : IDL.Text,\n 'thumbnail_data' : IDL.Text,\n 'caption' : IDL.Opt(IDL.Text),\n 'width' : IDL.Nat32,\n 'chunk_size' : IDL.Nat32,\n 'blob_deleted' : IDL.Bool,\n });\n const CyclesContent = IDL.Record({\n 'caption' : IDL.Opt(IDL.Text),\n 'amount' : IDL.Nat,\n });\n const MessageContent = IDL.Variant({\n 'File' : FileContent,\n 'Text' : TextContent,\n 'Media' : MediaContent,\n 'Cycles' : CyclesContent,\n });\n const ReplyContext = IDL.Record({\n 'content' : MessageContent,\n 'user_id' : UserId,\n 'chat_id' : ChatId,\n 'message_id' : IDL.Nat32,\n });\n const Message = IDL.Record({\n 'id' : IDL.Nat32,\n 'content' : MessageContent,\n 'sender' : UserId,\n 'timestamp' : Timestamp,\n 'replies_to' : IDL.Opt(ReplyContext),\n 'client_message_id' : IDL.Text,\n });\n const GroupChatSummary = IDL.Record({\n 'id' : ChatId,\n 'participants' : IDL.Vec(UserId),\n 'subject' : IDL.Text,\n 'last_updated' : Timestamp,\n 'display_date' : Timestamp,\n 'min_visible_message_id' : IDL.Nat32,\n 'latest_messages' : IDL.Vec(Message),\n 'unread_by_me_message_id_ranges' : IDL.Vec(IDL.Vec(IDL.Nat32)),\n 'unread_by_any_message_id_ranges' : IDL.Vec(IDL.Vec(IDL.Nat32)),\n 'muted': IDL.Bool,\n });\n const CreateGroupChatResponse = IDL.Variant({\n 'SubjectTooLong' : IDL.Nat8,\n 'SubjectTooShort' : IDL.Nat8,\n 'TooManyParticipants' : IDL.Nat8,\n 'ChatAlreadyExists' : IDL.Null,\n 'Success' : GroupChatSummary,\n });\n const DeleteGroupResponse = IDL.Variant({\n 'ChatNotFound' : IDL.Null,\n 'NotGroupChat' : IDL.Null,\n 'Success' : IDL.Null,\n 'Unauthorized' : IDL.Null,\n 'OnlyLastAdminCanDelete' : IDL.Null,\n });\n const GetChatsRequest = IDL.Record({\n 'message_count_for_top_chat' : IDL.Opt(IDL.Nat16),\n 'updated_since' : IDL.Opt(Timestamp),\n });\n const DirectChatSummary = IDL.Record({\n 'id' : ChatId,\n 'them' : UserId,\n 'last_updated' : Timestamp,\n 'display_date' : Timestamp,\n 'unread_by_them_message_id_ranges' : IDL.Vec(IDL.Vec(IDL.Nat32)),\n 'latest_messages' : IDL.Vec(Message),\n 'unread_by_me_message_id_ranges' : IDL.Vec(IDL.Vec(IDL.Nat32)),\n 'muted': IDL.Bool,\n });\n const ChatSummary = IDL.Variant({\n 'Group' : GroupChatSummary,\n 'Direct' : DirectChatSummary,\n });\n const GetChatsResponse = IDL.Variant({ 'Success' : IDL.Vec(ChatSummary) });\n const GetMessagesResult = IDL.Record({\n 'messages' : IDL.Vec(Message),\n 'latest_message_id' : IDL.Nat32,\n });\n const GetMessagesResponse = IDL.Variant({\n 'ChatNotFound' : IDL.Null,\n 'Success' : GetMessagesResult,\n });\n const GetMessagesByIdResponse = IDL.Variant({\n 'ChatNotFound' : IDL.Null,\n 'Success' : GetMessagesResult,\n });\n const GetUpdatesRequest = IDL.Record({\n 'message_count_for_top_chat' : IDL.Opt(IDL.Nat16),\n 'updated_since' : IDL.Opt(Timestamp),\n });\n const GetUpdatesResult = IDL.Record({\n 'chats' : IDL.Vec(ChatSummary),\n 'blocked_users' : IDL.Vec(UserId),\n });\n const GetUpdatesResponse = IDL.Variant({ 'Success' : GetUpdatesResult });\n const JoinGroupResponse = IDL.Variant({\n 'AlreadyInGroup' : IDL.Null,\n 'UserLimitReached' : IDL.Null,\n 'ChatNotFound' : IDL.Null,\n 'NotGroupChat' : IDL.Null,\n 'Success' : IDL.Null,\n });\n const LeaveGroupResponse = IDL.Variant({\n 'ParticipantNotFound' : IDL.Null,\n 'ChatNotFound' : IDL.Null,\n 'NotGroupChat' : IDL.Null,\n 'Success' : IDL.Null,\n 'LastAdminCannotLeave' : IDL.Null,\n });\n const MarkReadResult = IDL.Record({\n 'unread_message_id_ranges' : IDL.Vec(IDL.Vec(IDL.Nat32)),\n });\n const MarkReadResponse = IDL.Variant({\n 'ChatNotFound' : IDL.Null,\n 'Success' : MarkReadResult,\n });\n const RemoveParticipantResponse = IDL.Variant({\n 'CannotRemoveSelfFromChat' : IDL.Null,\n 'ParticipantNotFound' : IDL.Null,\n 'ChatNotFound' : IDL.Null,\n 'NotGroupChat' : IDL.Null,\n 'Success' : IDL.Null,\n 'Unauthorized' : IDL.Null,\n });\n const SearchMessagesMatch = IDL.Record({\n 'message' : Message,\n 'chat_id' : ChatId,\n });\n const SearchAllMessagesResult = IDL.Record({\n 'matches' : IDL.Vec(SearchMessagesMatch),\n });\n const SearchAllMessagesResponse = IDL.Variant({\n 'Success' : SearchAllMessagesResult,\n });\n const SendDirectMessageRequest = IDL.Record({\n 'content' : MessageContent,\n 'recipient' : UserId,\n 'sender_name' : IDL.Opt(IDL.Text),\n 'replies_to' : IDL.Opt(ReplyContext),\n 'client_message_id' : IDL.Text,\n });\n const SendDirectMessageResult = IDL.Record({\n 'timestamp' : Timestamp,\n 'message_id' : IDL.Nat32,\n 'chat_summary' : DirectChatSummary,\n });\n const SendDirectMessageResponse = IDL.Variant({\n 'BalanceExceeded' : IDL.Null,\n 'Success' : SendDirectMessageResult,\n 'RecipientBlocked' : IDL.Null,\n 'InvalidRequest' : IDL.Null,\n 'SenderBlocked' : IDL.Null,\n 'MessageTooLong' : IDL.Nat32,\n 'UserNotFound' : IDL.Null,\n 'RecipientNotFound' : IDL.Null,\n });\n const SendMessageRequest = IDL.Record({\n 'content' : MessageContent,\n 'sender_name' : IDL.Opt(IDL.Text),\n 'chat_id' : ChatId,\n 'replies_to' : IDL.Opt(ReplyContext),\n 'client_message_id' : IDL.Text,\n });\n const SendMessageResult = IDL.Record({\n 'timestamp' : Timestamp,\n 'message_id' : IDL.Nat32,\n 'chat_summary' : ChatSummary,\n });\n const SendMessageResponse = IDL.Variant({\n 'ChatNotFound' : IDL.Null,\n 'Success' : SendMessageResult,\n 'RecipientBlocked' : IDL.Null,\n 'InvalidRequest' : IDL.Null,\n 'SenderBlocked' : IDL.Null,\n 'MessageTooLong' : IDL.Nat32,\n });\n const Stats = IDL.Record({\n 'cycles_balance' : IDL.Int64,\n 'chunk_bytes' : IDL.Nat64,\n 'group_chat_count' : IDL.Nat32,\n 'image_message_count' : IDL.Nat64,\n 'memory_used' : IDL.Nat64,\n 'user_id' : IDL.Principal,\n 'direct_chat_count' : IDL.Nat32,\n 'chunk_count' : IDL.Nat32,\n 'file_message_count' : IDL.Nat64,\n 'cycles_message_count' : IDL.Nat64,\n 'timestamp' : IDL.Nat64,\n 'text_message_count' : IDL.Nat64,\n 'cycles_transferred' : IDL.Nat,\n 'pruneable_message_count' : IDL.Nat32,\n 'video_message_count' : IDL.Nat64,\n });\n return IDL.Service({\n 'add_participants' : IDL.Func(\n [ChatId, IDL.Vec(UserId)],\n [AddParticipantsResponse],\n [],\n ),\n 'block_user' : IDL.Func([UserId, IDL.Bool], [], []),\n 'create_group_chat' : IDL.Func(\n [CreateGroupChatRequest],\n [CreateGroupChatResponse],\n [],\n ),\n 'delete_group' : IDL.Func([ChatId], [DeleteGroupResponse], []),\n 'get_chats' : IDL.Func([GetChatsRequest], [GetChatsResponse], ['query']),\n 'get_chunk' : IDL.Func(\n [IDL.Text, IDL.Nat32],\n [IDL.Opt(IDL.Vec(IDL.Nat8))],\n ['query'],\n ),\n 'get_messages' : IDL.Func(\n [ChatId, IDL.Nat32, IDL.Nat32],\n [GetMessagesResponse],\n ['query'],\n ),\n 'get_messages_by_id' : IDL.Func(\n [ChatId, IDL.Vec(IDL.Nat32)],\n [GetMessagesByIdResponse],\n ['query'],\n ),\n 'get_updates' : IDL.Func(\n [GetUpdatesRequest],\n [GetUpdatesResponse],\n ['query'],\n ),\n 'join_group' : IDL.Func([ChatId], [JoinGroupResponse], []),\n 'leave_group' : IDL.Func([ChatId], [LeaveGroupResponse], []),\n 'mark_read' : IDL.Func(\n [ChatId, IDL.Nat32, IDL.Nat32],\n [MarkReadResponse],\n [],\n ),\n 'put_chunk' : IDL.Func(\n [IDL.Text, IDL.Nat32, IDL.Vec(IDL.Nat8)],\n [IDL.Bool],\n [],\n ),\n 'remove_participant' : IDL.Func(\n [ChatId, UserId],\n [RemoveParticipantResponse],\n [],\n ),\n 'search_all_messages' : IDL.Func(\n [IDL.Text, IDL.Nat8],\n [SearchAllMessagesResponse],\n ['query'],\n ),\n 'send_direct_message' : IDL.Func(\n [SendDirectMessageRequest],\n [SendDirectMessageResponse],\n [],\n ),\n 'send_message' : IDL.Func([SendMessageRequest], [SendMessageResponse], []),\n 'stats' : IDL.Func([], [Stats], ['query']),\n 'toggle_notifications' : IDL.Func([ChatId, IDL.Bool], [], []),\n });\n};\nexport const init = ({ IDL }) => { return []; };\n","export const idlFactory = ({ IDL }) => {\n const InitArgs = IDL.Record({\n 'push_service_principals' : IDL.Vec(IDL.Principal),\n });\n const NotificationsArgs = IDL.Record({\n 'from_notification_index' : IDL.Nat64,\n });\n const CanisterId = IDL.Principal;\n const UserId = CanisterId;\n const Subscription = IDL.Record({\n 'endpoint' : IDL.Text,\n 'keys' : IDL.Record({ 'auth' : IDL.Text, 'p256dh' : IDL.Text }),\n });\n const BlobReference = IDL.Record({\n 'blob_size' : IDL.Nat32,\n 'blob_id' : IDL.Text,\n 'canister_id' : CanisterId,\n 'chunk_size' : IDL.Nat32,\n });\n const FileContent = IDL.Record({\n 'name' : IDL.Text,\n 'mime_type' : IDL.Text,\n 'blob_reference' : IDL.Opt(BlobReference),\n 'caption' : IDL.Opt(IDL.Text),\n });\n const TextContent = IDL.Record({ 'text' : IDL.Text });\n const MediaContent = IDL.Record({\n 'height' : IDL.Nat32,\n 'mime_type' : IDL.Text,\n 'blob_reference' : IDL.Opt(BlobReference),\n 'thumbnail_data' : IDL.Text,\n 'caption' : IDL.Opt(IDL.Text),\n 'width' : IDL.Nat32,\n });\n const CyclesContent = IDL.Record({\n 'caption' : IDL.Opt(IDL.Text),\n 'amount' : IDL.Nat,\n });\n const MessageContent = IDL.Variant({\n 'File' : FileContent,\n 'Text' : TextContent,\n 'Media' : MediaContent,\n 'Cycles' : CyclesContent,\n });\n const MessageId = IDL.Nat;\n const GroupId = CanisterId;\n const EventIndex = IDL.Nat32;\n const DirectMessageReplyContext = IDL.Variant({\n 'Private' : IDL.Record({ 'chat_id' : GroupId, 'event_index' : EventIndex }),\n 'Standard' : IDL.Record({\n 'content' : MessageContent,\n 'sent_by_me' : IDL.Bool,\n 'event_index' : EventIndex,\n }),\n });\n const MessageIndex = IDL.Nat32;\n const DirectMessage = IDL.Record({\n 'content' : MessageContent,\n 'sent_by_me' : IDL.Bool,\n 'message_id' : MessageId,\n 'replies_to' : IDL.Opt(DirectMessageReplyContext),\n 'message_index' : MessageIndex,\n });\n const DirectMessageNotification = IDL.Record({\n 'sender' : UserId,\n 'message' : DirectMessage,\n 'sender_name' : IDL.Text,\n });\n const GroupMessageReplyContext = IDL.Record({\n 'content' : MessageContent,\n 'user_id' : UserId,\n 'message_id' : MessageId,\n 'message_index' : MessageIndex,\n });\n const GroupMessage = IDL.Record({\n 'content' : MessageContent,\n 'sender' : UserId,\n 'message_id' : MessageId,\n 'replies_to' : IDL.Opt(GroupMessageReplyContext),\n 'message_index' : MessageIndex,\n });\n const GroupMessageNotification = IDL.Record({\n 'sender' : UserId,\n 'message' : GroupMessage,\n 'sender_name' : IDL.Text,\n 'chat_id' : GroupId,\n 'group_name' : IDL.Text,\n });\n const V1FileContent = IDL.Record({\n 'blob_size' : IDL.Nat32,\n 'blob_id' : IDL.Text,\n 'name' : IDL.Text,\n 'mime_type' : IDL.Text,\n 'caption' : IDL.Opt(IDL.Text),\n 'chunk_size' : IDL.Nat32,\n 'blob_deleted' : IDL.Bool,\n });\n const V1TextContent = IDL.Record({ 'text' : IDL.Text });\n const V1MediaContent = IDL.Record({\n 'height' : IDL.Nat32,\n 'blob_size' : IDL.Nat32,\n 'blob_id' : IDL.Text,\n 'mime_type' : IDL.Text,\n 'thumbnail_data' : IDL.Text,\n 'caption' : IDL.Opt(IDL.Text),\n 'width' : IDL.Nat32,\n 'chunk_size' : IDL.Nat32,\n 'blob_deleted' : IDL.Bool,\n });\n const V1CyclesContent = IDL.Record({\n 'caption' : IDL.Opt(IDL.Text),\n 'amount' : IDL.Nat,\n });\n const V1MessageContent = IDL.Variant({\n 'File' : V1FileContent,\n 'Text' : V1TextContent,\n 'Media' : V1MediaContent,\n 'Cycles' : V1CyclesContent,\n });\n const TimestampMillis = IDL.Nat64;\n const V1ChatId = IDL.Nat;\n const V1ReplyContext = IDL.Record({\n 'content' : V1MessageContent,\n 'user_id' : UserId,\n 'chat_id' : V1ChatId,\n 'message_id' : IDL.Nat32,\n });\n const V1Message = IDL.Record({\n 'id' : IDL.Nat32,\n 'content' : V1MessageContent,\n 'sender' : UserId,\n 'timestamp' : TimestampMillis,\n 'replies_to' : IDL.Opt(V1ReplyContext),\n 'client_message_id' : IDL.Text,\n });\n const V1GroupMessageNotification = IDL.Record({\n 'sender' : UserId,\n 'message' : V1Message,\n 'sender_name' : IDL.Text,\n 'chat_id' : IDL.Text,\n 'group_name' : IDL.Text,\n });\n const V1DirectMessageNotification = IDL.Record({\n 'chat_id' : IDL.Text,\n 'sender' : UserId,\n 'message' : V1Message,\n 'sender_name' : IDL.Text,\n });\n const Notification = IDL.Variant({\n 'DirectMessageNotification' : DirectMessageNotification,\n 'GroupMessageNotification' : GroupMessageNotification,\n 'V1GroupMessageNotification' : V1GroupMessageNotification,\n 'V1DirectMessageNotification' : V1DirectMessageNotification,\n });\n const NotificationEnvelope = IDL.Record({\n 'notification' : Notification,\n 'recipients' : IDL.Vec(UserId),\n });\n const IndexedNotification = IDL.Record({\n 'value' : NotificationEnvelope,\n 'index' : IDL.Nat64,\n });\n const NotificationsSuccessResult = IDL.Record({\n 'subscriptions' : IDL.Vec(IDL.Tuple(UserId, IDL.Vec(Subscription))),\n 'notifications' : IDL.Vec(IndexedNotification),\n });\n const NotificationsResponse = IDL.Variant({\n 'NotAuthorized' : IDL.Null,\n 'Success' : NotificationsSuccessResult,\n });\n const PushDirectMessageNotificationArgs = IDL.Record({\n 'recipient' : UserId,\n 'notification' : DirectMessageNotification,\n });\n const PushDirectMessageNotificationResponse = IDL.Variant({\n 'Success' : IDL.Null,\n });\n const PushGroupMessageNotificationArgs = IDL.Record({\n 'notification' : GroupMessageNotification,\n 'recipients' : IDL.Vec(UserId),\n });\n const PushGroupMessageNotificationResponse = IDL.Variant({\n 'Success' : IDL.Null,\n });\n const PushSubscriptionArgs = IDL.Record({\n 'subscription' : Subscription,\n 'user_id' : UserId,\n });\n const PushSubscriptionResponse = IDL.Variant({ 'Success' : IDL.Null });\n const PushV1DirectMessageNotificationArgs = IDL.Record({\n 'recipient' : UserId,\n 'notification' : V1DirectMessageNotification,\n });\n const PushV1DirectMessageNotificationResponse = IDL.Variant({\n 'Success' : IDL.Null,\n });\n const PushV1GroupMessageNotificationArgs = IDL.Record({\n 'notification' : V1GroupMessageNotification,\n 'recipients' : IDL.Vec(UserId),\n });\n const PushV1GroupMessageNotificationResponse = IDL.Variant({\n 'Success' : IDL.Null,\n });\n const RemoveNotificationsArgs = IDL.Record({\n 'up_to_notification_index' : IDL.Nat64,\n });\n const RemoveNotificationsResponse = IDL.Variant({\n 'NotAuthorized' : IDL.Null,\n 'Success' : IDL.Null,\n });\n const RemoveSubscriptionsArgs = IDL.Record({\n 'subscriptions_by_user' : IDL.Vec(\n IDL.Record({ 'user_id' : UserId, 'p256dh_keys' : IDL.Vec(IDL.Text) })\n ),\n });\n const RemoveSubscriptionsResponse = IDL.Variant({\n 'NotAuthorized' : IDL.Null,\n 'Success' : IDL.Null,\n });\n const SubscriptionExistsArgs = IDL.Record({\n 'p256dh_key' : IDL.Text,\n 'user_id' : UserId,\n });\n const SubscriptionExistsResponse = IDL.Variant({\n 'No' : IDL.Null,\n 'Yes' : IDL.Null,\n });\n return IDL.Service({\n 'notifications' : IDL.Func(\n [NotificationsArgs],\n [NotificationsResponse],\n ['query'],\n ),\n 'push_direct_message_notification' : IDL.Func(\n [PushDirectMessageNotificationArgs],\n [PushDirectMessageNotificationResponse],\n [],\n ),\n 'push_group_message_notification' : IDL.Func(\n [PushGroupMessageNotificationArgs],\n [PushGroupMessageNotificationResponse],\n [],\n ),\n 'push_subscription' : IDL.Func(\n [PushSubscriptionArgs],\n [PushSubscriptionResponse],\n [],\n ),\n 'push_v1direct_message_notification' : IDL.Func(\n [PushV1DirectMessageNotificationArgs],\n [PushV1DirectMessageNotificationResponse],\n [],\n ),\n 'push_v1group_message_notification' : IDL.Func(\n [PushV1GroupMessageNotificationArgs],\n [PushV1GroupMessageNotificationResponse],\n [],\n ),\n 'remove_notifications' : IDL.Func(\n [RemoveNotificationsArgs],\n [RemoveNotificationsResponse],\n [],\n ),\n 'remove_subscriptions' : IDL.Func(\n [RemoveSubscriptionsArgs],\n [RemoveSubscriptionsResponse],\n [],\n ),\n 'subscription_exists' : IDL.Func(\n [SubscriptionExistsArgs],\n [SubscriptionExistsResponse],\n ['query'],\n ),\n });\n};\nexport const init = ({ IDL }) => {\n const InitArgs = IDL.Record({\n 'push_service_principals' : IDL.Vec(IDL.Principal),\n });\n return [InitArgs];\n};\n","export const idlFactory = ({ IDL }) => {\n const UserId = IDL.Principal;\n const AddAnswerRequest = IDL.Record({\n 'id' : IDL.Text,\n 'connection_string' : IDL.Text,\n 'user_id' : UserId,\n 'ice_candidates' : IDL.Vec(IDL.Text),\n 'offer_id' : IDL.Text,\n });\n const AddAnswersRequest = IDL.Record({\n 'answers' : IDL.Vec(AddAnswerRequest),\n });\n const AddOfferRequest = IDL.Record({\n 'id' : IDL.Text,\n 'connection_string' : IDL.Text,\n 'user_id' : UserId,\n 'ice_candidates' : IDL.Vec(IDL.Text),\n });\n const AddOffersRequest = IDL.Record({ 'offers' : IDL.Vec(AddOfferRequest) });\n const Offer = IDL.Record({\n 'id' : IDL.Text,\n 'connection_string' : IDL.Text,\n 'user_id' : UserId,\n 'ice_candidates' : IDL.Vec(IDL.Text),\n 'age_seconds' : IDL.Nat32,\n });\n const AddOffersResult = IDL.Record({ 'counter_offers' : IDL.Vec(Offer) });\n const AddOffersResponse = IDL.Variant({ 'Success' : AddOffersResult });\n const Timestamp = IDL.Nat64;\n const Answer = IDL.Record({\n 'id' : IDL.Text,\n 'connection_string' : IDL.Text,\n 'user_id' : UserId,\n 'ice_candidates' : IDL.Vec(IDL.Text),\n 'offer_id' : IDL.Text,\n 'age_seconds' : IDL.Nat32,\n });\n const ConnectionDetails = IDL.Variant({ 'Answer' : Answer, 'Offer' : Offer });\n const GetConnectionDetailsResult = IDL.Record({\n 'connections' : IDL.Vec(ConnectionDetails),\n 'timestamp' : Timestamp,\n });\n const GetConnectionDetailsResponse = IDL.Variant({\n 'Success' : GetConnectionDetailsResult,\n });\n const RemoveSingleConnectionRequest = IDL.Record({\n 'id' : IDL.Text,\n 'user_id' : UserId,\n });\n const RemoveConnectionDetailsRequest = IDL.Record({\n 'connections' : IDL.Vec(RemoveSingleConnectionRequest),\n });\n return IDL.Service({\n 'add_answers' : IDL.Func([AddAnswersRequest], [], []),\n 'add_offers' : IDL.Func([AddOffersRequest], [AddOffersResponse], []),\n 'get_connection_details' : IDL.Func(\n [IDL.Opt(Timestamp)],\n [GetConnectionDetailsResponse],\n ['query'],\n ),\n 'remove_connection_details' : IDL.Func(\n [RemoveConnectionDetailsRequest],\n [IDL.Nat32],\n [],\n ),\n });\n};\nexport const init = ({ IDL }) => { return []; };","export const idlFactory = ({ IDL }) => {\n const UserId = IDL.Principal;\n const MyProfile = IDL.Record({\n 'id' : UserId,\n 'username' : IDL.Text,\n 'version' : IDL.Nat32,\n 'image_id' : IDL.Opt(IDL.Text),\n 'account_balance' : IDL.Nat,\n });\n const GetCurrentUserResponse = IDL.Variant({\n 'Success' : MyProfile,\n 'UserNotFound' : IDL.Null,\n });\n const GetUserIdResponse = IDL.Variant({\n 'Success' : UserId,\n 'UserNotFound' : IDL.Null,\n });\n const Timestamp = IDL.Nat64;\n const GetUsersRequest = IDL.Record({\n 'users' : IDL.Vec(UserId),\n 'updated_since' : IDL.Opt(Timestamp),\n });\n const ChatId = IDL.Nat;\n const UserSummary = IDL.Record({\n 'id' : UserId,\n 'username' : IDL.Text,\n 'version' : IDL.Nat32,\n 'image_id' : IDL.Opt(IDL.Text),\n 'seconds_since_last_online' : IDL.Nat32,\n 'chat_id' : ChatId,\n });\n const GetUsersResponse = IDL.Variant({\n 'Success' : IDL.Record({\n 'timestamp' : Timestamp,\n 'users' : IDL.Vec(UserSummary),\n }),\n });\n const RegisterUserResponse = IDL.Variant({\n 'UsernameTaken' : IDL.Null,\n 'UsernameTooShort' : IDL.Nat16,\n 'UserLimitReached' : IDL.Nat64,\n 'UsernameTooLong' : IDL.Nat16,\n 'Success' : MyProfile,\n 'UserExists' : IDL.Null,\n });\n const SearchUsersRequest = IDL.Record({\n 'max_results' : IDL.Nat8,\n 'search_term' : IDL.Text,\n });\n const SearchUsersResponse = IDL.Variant({\n 'Success' : IDL.Record({ 'users' : IDL.Vec(UserSummary) }),\n });\n const SetProfileImageResponse = IDL.Variant({\n 'Success' : IDL.Null,\n 'UserNotFound' : IDL.Null,\n });\n const Stats = IDL.Record({\n 'user_count' : IDL.Nat64,\n 'cycles_balance' : IDL.Int64,\n 'memory_used' : IDL.Nat64,\n 'user_id' : UserId,\n 'timestamp' : IDL.Nat64,\n });\n const TransferCyclesRequest = IDL.Record({\n 'recipient' : UserId,\n 'sender' : UserId,\n 'amount' : IDL.Nat,\n });\n const TransferCyclesResponse = IDL.Variant({\n 'BalanceExceeded' : IDL.Null,\n 'Success' : IDL.Record({ 'new_balance' : IDL.Nat }),\n 'UserNotFound' : IDL.Null,\n 'RecipientNotFound' : IDL.Null,\n });\n const UpdateUsernameResponse = IDL.Variant({\n 'SuccessNoChange' : IDL.Null,\n 'UsernameTaken' : IDL.Null,\n 'UsernameTooShort' : IDL.Nat16,\n 'UsernameTooLong' : IDL.Nat16,\n 'Success' : IDL.Null,\n 'UserNotFound' : IDL.Null,\n });\n return IDL.Service({\n 'get_current_user' : IDL.Func([], [GetCurrentUserResponse], ['query']),\n 'get_user_id' : IDL.Func([IDL.Text], [GetUserIdResponse], ['query']),\n 'get_users' : IDL.Func([GetUsersRequest], [GetUsersResponse], ['query']),\n 'mark_as_online' : IDL.Func([], [], []),\n 'register_user' : IDL.Func([IDL.Text], [RegisterUserResponse], []),\n 'search_users' : IDL.Func(\n [SearchUsersRequest],\n [SearchUsersResponse],\n ['query'],\n ),\n 'set_profile_image' : IDL.Func([IDL.Text], [SetProfileImageResponse], []),\n 'stats' : IDL.Func([], [Stats], ['query']),\n 'transfer_cycles' : IDL.Func(\n [TransferCyclesRequest],\n [TransferCyclesResponse],\n [],\n ),\n 'update_username' : IDL.Func([IDL.Text], [UpdateUsernameResponse], []),\n });\n};\nexport const init = ({ IDL }) => { return []; };","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n// It's empty as some runtime module handles the default behavior\n__webpack_require__.x = x => {};\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// Promise = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t826: 0\n};\n\nvar deferredModules = [\n\t[3829,848]\n];\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\nvar checkDeferredModules = x => {};\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime, executeModules] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0, resolves = [];\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tresolves.push(installedChunks[chunkId][0]);\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\tfor(moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\twhile(resolves.length) {\n\t\tresolves.shift()();\n\t}\n\n\t// add entry modules from loaded chunk to deferred list\n\tif(executeModules) deferredModules.push.apply(deferredModules, executeModules);\n\n\t// run deferred modules when all chunks ready\n\treturn checkDeferredModules();\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkopen_chat_assets\"] = self[\"webpackChunkopen_chat_assets\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));\n\nfunction checkDeferredModulesImpl() {\n\tvar result;\n\tfor(var i = 0; i < deferredModules.length; i++) {\n\t\tvar deferredModule = deferredModules[i];\n\t\tvar fulfilled = true;\n\t\tfor(var j = 1; j < deferredModule.length; j++) {\n\t\t\tvar depId = deferredModule[j];\n\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferredModules.splice(i--, 1);\n\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n\t\t}\n\t}\n\tif(deferredModules.length === 0) {\n\t\t__webpack_require__.x();\n\t\t__webpack_require__.x = x => {};\n\t}\n\treturn result;\n}\nvar startup = __webpack_require__.x;\n__webpack_require__.x = () => {\n\t// reset startup function so it can be called again when more startup code is added\n\t__webpack_require__.x = startup || (x => {});\n\treturn (checkDeferredModules = checkDeferredModulesImpl)();\n};","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"sourceRoot":""}