gitextract_vaj6l7zt/ ├── .devcontainer/ │ ├── Dockerfile │ ├── devcontainer.json │ ├── docker-compose.yml │ └── scripts/ │ ├── environment.sh │ ├── node.sh │ └── user.sh ├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── labeler.yml │ └── workflows/ │ ├── baklava-build_and_release.yaml │ ├── dolma-npm_deploy.yaml │ ├── global-label_pr.yml │ ├── global-lint_commit_messages.yaml │ ├── globalkey-npm_deploy.yaml │ ├── kebab-npm_publish.yaml │ ├── kibbeh-e2e_tests.yaml │ ├── kibbeh-lint_and_test.yaml │ ├── kousa-deploy_staging.yaml │ ├── kousa-tests.yaml │ └── shawarma-deploy_staging.yaml ├── .gitignore ├── .husky/ │ ├── .gitignore │ ├── commit-msg │ └── pre-commit ├── .prettierignore ├── .prettierrc.js ├── .vscode/ │ └── settings.json ├── .yarnrc.yml ├── CHANGELOG.md ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CREATE_BOT_ACCOUNT.MD ├── DESIGN_GUIDELINES.md ├── FAQ.md ├── HOW_TO_DEBUG_AUDIO.md ├── HOW_TO_GET_PERMA_BANNED_FROM_DOGEHOUSE.md ├── LICENSE ├── README.md ├── SECURITY.md ├── baklava/ │ ├── .gitignore │ ├── .yarnrc.yml │ ├── README.md │ ├── icons/ │ │ └── icon.icns │ ├── locales/ │ │ └── en/ │ │ └── translate.json │ ├── package.json │ ├── resources/ │ │ ├── overlay/ │ │ │ ├── .gitignore │ │ │ ├── .yarnrc.yml │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ └── index.html │ │ │ └── src/ │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── reportWebVitals.js │ │ └── splash/ │ │ └── splash-screen.html │ ├── scripts/ │ │ ├── generateTranslationTypes.ts │ │ ├── syncTranslations.ts │ │ ├── traverseTranslations.ts │ │ └── tsconfig.json │ ├── settings/ │ │ └── entitlements.mac.plist │ ├── src/ │ │ ├── constants.ts │ │ ├── dev.ts │ │ ├── electron.ts │ │ ├── generated/ │ │ │ └── translationKeys.ts │ │ ├── types.ts │ │ └── utils/ │ │ ├── keybinds.ts │ │ ├── notifications.ts │ │ ├── overlay/ │ │ │ ├── index.ts │ │ │ └── ipc.ts │ │ ├── rpc/ │ │ │ ├── index.ts │ │ │ └── ipc.ts │ │ └── tray.ts │ └── tsconfig.json ├── commitlint.config.js ├── dinner/ │ ├── .eslintrc.json │ ├── .gitignore │ ├── package.json │ ├── src/ │ │ ├── create-accounts.ts │ │ └── play-audio.ts │ └── tsconfig.json ├── docker-compose.local.yml ├── docker-compose.prod.yml ├── docker-compose.yml ├── docs/ │ ├── Architecture/ │ │ └── README.md │ ├── Directory/ │ │ └── README.md │ ├── Elixir Api/ │ │ └── README.MD │ ├── README.MD │ ├── React Front End/ │ │ └── README.MD │ └── Voice Server/ │ └── README.MD ├── dolma/ │ ├── .editorconfig │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── decode.ts │ │ │ ├── encode.ts │ │ │ ├── filterString.ts │ │ │ ├── filterUnitoken.ts │ │ │ └── msgToken.ts │ │ ├── test/ │ │ │ ├── run.ts │ │ │ └── tests/ │ │ │ └── encoding.ts │ │ ├── tokens/ │ │ │ ├── index.ts │ │ │ └── types/ │ │ │ ├── block.ts │ │ │ ├── emoji.ts │ │ │ ├── emote.ts │ │ │ ├── link.ts │ │ │ ├── mention.ts │ │ │ └── text.ts │ │ └── util/ │ │ ├── regex.ts │ │ └── types/ │ │ └── tokenTypes.ts │ └── tsconfig.json ├── globalkey/ │ ├── .gitignore │ ├── Cargo.toml │ ├── README.md │ ├── index.d.ts │ ├── package.json │ ├── src/ │ │ ├── build.rs │ │ └── lib.rs │ └── test.js ├── kebab/ │ ├── .eslintrc.json │ ├── .gitignore │ ├── .prettierrc.js │ ├── README.md │ ├── examples/ │ │ ├── bot/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── chat/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── create-bot/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── mediasoup-audio/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.css │ │ │ │ ├── index.html │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ └── react-chat/ │ │ ├── README.md │ │ ├── package.json │ │ ├── public/ │ │ │ ├── index.html │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ └── react-app-env.d.ts │ │ └── tsconfig.json │ ├── jest.config.js │ ├── package.json │ ├── src/ │ │ ├── README.md │ │ ├── audio/ │ │ │ ├── audioWrapper.ts │ │ │ ├── interface.ts │ │ │ └── mediasoup-client.ts │ │ ├── client/ │ │ │ ├── README.md │ │ │ ├── http/ │ │ │ │ ├── bot.ts │ │ │ │ ├── dev.ts │ │ │ │ ├── endpoint.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── requester/ │ │ │ │ ├── auth.ts │ │ │ │ ├── chat.ts │ │ │ │ ├── index.ts │ │ │ │ ├── misc.ts │ │ │ │ ├── room.ts │ │ │ │ └── user.ts │ │ │ ├── subscriber/ │ │ │ │ ├── index.ts │ │ │ │ └── legacy.ts │ │ │ └── type-util.ts │ │ ├── entities.ts │ │ ├── http/ │ │ │ ├── bot.ts │ │ │ ├── index.ts │ │ │ ├── raw.ts │ │ │ └── wrapper.ts │ │ ├── index.ts │ │ ├── pagination.ts │ │ ├── util/ │ │ │ ├── ast.test.ts │ │ │ ├── ast.ts │ │ │ └── index.ts │ │ └── websocket/ │ │ ├── index.ts │ │ ├── raw.ts │ │ ├── responses.ts │ │ └── wrapper.ts │ └── tsconfig.json ├── kibbeh/ │ ├── .babelrc │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc.js │ ├── .storybook/ │ │ ├── main.js │ │ ├── manager.js │ │ ├── preview-head.html │ │ └── preview.js │ ├── .stylelintrc.json │ ├── README.md │ ├── cypress/ │ │ ├── .gitignore │ │ ├── fixtures/ │ │ │ └── example.json │ │ ├── integration/ │ │ │ ├── create-scheduled-room.ts │ │ │ ├── edit-profile.ts │ │ │ ├── room-creator.ts │ │ │ └── search.ts │ │ ├── plugins/ │ │ │ ├── index.js │ │ │ └── sample_spec.js │ │ ├── support/ │ │ │ ├── commands.ts │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── test-constants.ts │ │ └── tsconfig.json │ ├── cypress.json │ ├── deploy.sh │ ├── next-env.d.ts │ ├── next.config.js │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ ├── locales/ │ │ │ ├── af/ │ │ │ │ └── translation.json │ │ │ ├── am/ │ │ │ │ └── translation.json │ │ │ ├── ar/ │ │ │ │ └── translation.json │ │ │ ├── az/ │ │ │ │ └── translation.json │ │ │ ├── bg/ │ │ │ │ └── translation.json │ │ │ ├── bn/ │ │ │ │ └── translation.json │ │ │ ├── bottom/ │ │ │ │ └── translation.json │ │ │ ├── cs/ │ │ │ │ └── translation.json │ │ │ ├── da/ │ │ │ │ └── translation.json │ │ │ ├── de/ │ │ │ │ └── translation.json │ │ │ ├── de-AT/ │ │ │ │ └── translation.json │ │ │ ├── el/ │ │ │ │ └── translation.json │ │ │ ├── en/ │ │ │ │ └── translation.json │ │ │ ├── en-AU/ │ │ │ │ └── translation.json │ │ │ ├── en-C/ │ │ │ │ ├── GUIDE.md │ │ │ │ └── translation.json │ │ │ ├── en-CODE/ │ │ │ │ └── translation.json │ │ │ ├── en-LOLCAT/ │ │ │ │ └── translation.json │ │ │ ├── en-OWO/ │ │ │ │ └── translation.json │ │ │ ├── en-PIGLATIN/ │ │ │ │ └── translation.json │ │ │ ├── en-PIRATE/ │ │ │ │ └── translation.json │ │ │ ├── eo/ │ │ │ │ └── translation.json │ │ │ ├── es/ │ │ │ │ └── translation.json │ │ │ ├── et/ │ │ │ │ └── translation.json │ │ │ ├── eu/ │ │ │ │ └── translation.json │ │ │ ├── fa/ │ │ │ │ └── translation.json │ │ │ ├── fi/ │ │ │ │ └── translation.json │ │ │ ├── fr/ │ │ │ │ └── translation.json │ │ │ ├── grc/ │ │ │ │ └── translation.json │ │ │ ├── gsw/ │ │ │ │ └── translation.json │ │ │ ├── he/ │ │ │ │ └── translation.json │ │ │ ├── hi/ │ │ │ │ └── translation.json │ │ │ ├── hr/ │ │ │ │ └── translation.json │ │ │ ├── hu/ │ │ │ │ └── translation.json │ │ │ ├── id/ │ │ │ │ └── translation.json │ │ │ ├── is/ │ │ │ │ └── translation.json │ │ │ ├── it/ │ │ │ │ └── translation.json │ │ │ ├── ja/ │ │ │ │ └── translation.json │ │ │ ├── kk/ │ │ │ │ └── translation.json │ │ │ ├── ko/ │ │ │ │ └── translation.json │ │ │ ├── ku/ │ │ │ │ └── translation.json │ │ │ ├── li/ │ │ │ │ └── translation.json │ │ │ ├── lld/ │ │ │ │ └── translation.json │ │ │ ├── lt/ │ │ │ │ └── translation.json │ │ │ ├── lv/ │ │ │ │ └── translation.json │ │ │ ├── nb/ │ │ │ │ └── translation.json │ │ │ ├── ne/ │ │ │ │ └── translation.json │ │ │ ├── nl/ │ │ │ │ └── translation.json │ │ │ ├── pl/ │ │ │ │ └── translation.json │ │ │ ├── pt-BR/ │ │ │ │ └── translation.json │ │ │ ├── pt-PT/ │ │ │ │ └── translation.json │ │ │ ├── ro/ │ │ │ │ └── translation.json │ │ │ ├── ru/ │ │ │ │ └── translation.json │ │ │ ├── sa/ │ │ │ │ └── translation.json │ │ │ ├── si/ │ │ │ │ └── translation.json │ │ │ ├── sk/ │ │ │ │ └── translation.json │ │ │ ├── sl/ │ │ │ │ └── translation.json │ │ │ ├── so/ │ │ │ │ └── translation.json │ │ │ ├── sq/ │ │ │ │ └── translation.json │ │ │ ├── sr/ │ │ │ │ └── translation.json │ │ │ ├── sr-LATIN/ │ │ │ │ └── translation.json │ │ │ ├── sv/ │ │ │ │ └── translation.json │ │ │ ├── ta/ │ │ │ │ └── translation.json │ │ │ ├── te/ │ │ │ │ └── translation.json │ │ │ ├── th/ │ │ │ │ └── translation.json │ │ │ ├── tl/ │ │ │ │ └── translation.json │ │ │ ├── tp/ │ │ │ │ └── translation.json │ │ │ ├── tr/ │ │ │ │ └── translation.json │ │ │ ├── uk/ │ │ │ │ └── translation.json │ │ │ ├── ur/ │ │ │ │ └── translation.json │ │ │ ├── uz/ │ │ │ │ └── translation.json │ │ │ ├── vi/ │ │ │ │ └── translation.json │ │ │ ├── zh-CN/ │ │ │ │ └── translation.json │ │ │ └── zh-TW/ │ │ │ └── translation.json │ │ ├── manifest.json │ │ ├── privacy-policy.html │ │ └── terms.html │ ├── scripts/ │ │ ├── syncTranslations.ts │ │ ├── traverseTranslations.ts │ │ └── tsconfig.json │ ├── src/ │ │ ├── form-fields/ │ │ │ ├── FieldSpacer.tsx │ │ │ └── InputField.tsx │ │ ├── global-stores/ │ │ │ ├── useAccountOverlay.ts │ │ │ ├── useAskForMicStore.ts │ │ │ ├── useAudioTracks.ts │ │ │ ├── useCurrentRoomIdStore.ts │ │ │ ├── useDeafStore.ts │ │ │ ├── useDebugAudio.ts │ │ │ ├── useDownloadAlertStore.ts │ │ │ ├── useElectronMobileStore.ts │ │ │ ├── useEmojiPickerStore.ts │ │ │ ├── useGlobalVolumeStore.ts │ │ │ ├── useHostStore.ts │ │ │ ├── useKeyMapStore.ts │ │ │ ├── useMicPermErrorStore.ts │ │ │ ├── useMuteStore.ts │ │ │ ├── useOverlayStore.ts │ │ │ ├── useProducerStore.ts │ │ │ ├── useRoomChatMentionStore.ts │ │ │ ├── useSocketStatus.ts │ │ │ └── useStatus.ts │ │ ├── globals.d.ts │ │ ├── icons/ │ │ │ ├── BotIcon.tsx │ │ │ ├── DeveloperIcon.tsx │ │ │ ├── LgLogo.tsx │ │ │ ├── Link.tsx │ │ │ ├── LogoIcon.tsx │ │ │ ├── MacCloseIcon.tsx │ │ │ ├── MacMaximizeIcon.tsx │ │ │ ├── MacMinimizeIcon.tsx │ │ │ ├── OutlineGlobe.tsx │ │ │ ├── Share.tsx │ │ │ ├── Smiley.tsx │ │ │ ├── SolidBug.tsx │ │ │ ├── SolidCalendar.tsx │ │ │ ├── SolidCaretRight.tsx │ │ │ ├── SolidChatBubble.tsx │ │ │ ├── SolidCompass.tsx │ │ │ ├── SolidContributor.tsx │ │ │ ├── SolidDeafened.tsx │ │ │ ├── SolidDeafenedOff.tsx │ │ │ ├── SolidDiscord.tsx │ │ │ ├── SolidDogenitro.tsx │ │ │ ├── SolidDownload.tsx │ │ │ ├── SolidFriends.tsx │ │ │ ├── SolidFriendsAdd.tsx │ │ │ ├── SolidFullscreen.tsx │ │ │ ├── SolidGitHub.tsx │ │ │ ├── SolidGoogle.tsx │ │ │ ├── SolidHelp.tsx │ │ │ ├── SolidHome.tsx │ │ │ ├── SolidInstagram.tsx │ │ │ ├── SolidKeyboard.tsx │ │ │ ├── SolidLink.tsx │ │ │ ├── SolidLogOut.tsx │ │ │ ├── SolidMegaphone.tsx │ │ │ ├── SolidMessages.tsx │ │ │ ├── SolidMicrophone.tsx │ │ │ ├── SolidMicrophoneOff.tsx │ │ │ ├── SolidMoon.tsx │ │ │ ├── SolidNew.tsx │ │ │ ├── SolidNotification.tsx │ │ │ ├── SolidPersonAdd.tsx │ │ │ ├── SolidPlus.tsx │ │ │ ├── SolidRocket.tsx │ │ │ ├── SolidSearch.tsx │ │ │ ├── SolidSettings.tsx │ │ │ ├── SolidSimpleMegaphone.tsx │ │ │ ├── SolidStaff.tsx │ │ │ ├── SolidTime.tsx │ │ │ ├── SolidTrash.tsx │ │ │ ├── SolidTwitter.tsx │ │ │ ├── SolidUser.tsx │ │ │ ├── SolidVolume.tsx │ │ │ ├── SolidVolumeOff.tsx │ │ │ ├── SolidWarning.tsx │ │ │ ├── WinCloseIcon.tsx │ │ │ ├── WinMaximizeIcon.tsx │ │ │ ├── WinMinimizeIcon.tsx │ │ │ ├── badges/ │ │ │ │ ├── ContributorBadge.tsx │ │ │ │ ├── StaffBadge.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── constants.ts │ │ │ ├── createChatMessage.ts │ │ │ ├── defaultQueryFn.ts │ │ │ ├── i18n.ts │ │ │ ├── isCurrentRoomId.ts │ │ │ ├── isServer.ts │ │ │ ├── isWebRTCEnabled.ts │ │ │ ├── kFormatter.ts │ │ │ ├── queryClient.ts │ │ │ ├── roomToCurrentRoom.ts │ │ │ ├── showErrorToast.ts │ │ │ ├── tests/ │ │ │ │ ├── constants.test.ts │ │ │ │ └── kFormatter.test.ts │ │ │ └── validateStruct.ts │ │ ├── modules/ │ │ │ ├── admin/ │ │ │ │ ├── AdminPage.tsx │ │ │ │ └── AdminPageForm.tsx │ │ │ ├── auth/ │ │ │ │ ├── WaitForWsAndAuth.tsx │ │ │ │ ├── useSaveTokensFromQueryParams.ts │ │ │ │ ├── useTokenStore.ts │ │ │ │ └── useVerifyLoggedIn.ts │ │ │ ├── dashboard/ │ │ │ │ ├── CreateRoomModal.tsx │ │ │ │ ├── DashboardPage.tsx │ │ │ │ ├── FeedController.tsx │ │ │ │ ├── FollowingOnlineController.tsx │ │ │ │ ├── MinimizedRoomCardController.tsx │ │ │ │ └── ProfileBlockController.tsx │ │ │ ├── debugging/ │ │ │ │ ├── AudioDebugAvatar.tsx │ │ │ │ └── AudioDebugPanel.tsx │ │ │ ├── developer/ │ │ │ │ ├── Bot.tsx │ │ │ │ ├── BotCard.tsx │ │ │ │ ├── BotIcon.tsx │ │ │ │ ├── BotInfo.tsx │ │ │ │ ├── BotsEditPage.tsx │ │ │ │ ├── BotsPage.tsx │ │ │ │ ├── CreateBotModal.tsx │ │ │ │ ├── DeveloperNavButton.tsx │ │ │ │ ├── DeveloperPanel.tsx │ │ │ │ ├── EditBot.tsx │ │ │ │ └── YourBots.tsx │ │ │ ├── display/ │ │ │ │ ├── HeaderController.tsx │ │ │ │ └── TextParser.tsx │ │ │ ├── errors/ │ │ │ │ ├── ErrorToastController.tsx │ │ │ │ └── useErrorToastStore.tsx │ │ │ ├── keyboard-shortcuts/ │ │ │ │ ├── ChatKeybind.tsx │ │ │ │ ├── DeafKeybind.tsx │ │ │ │ ├── InviteKeybind.tsx │ │ │ │ ├── KeybindListener.tsx │ │ │ │ ├── MuteKeybind.tsx │ │ │ │ ├── OverlayKeybind.tsx │ │ │ │ ├── PTTKeybind.tsx │ │ │ │ ├── RequestToSpeakKeybind.tsx │ │ │ │ └── index.ts │ │ │ ├── landing-page/ │ │ │ │ └── LoginPage.tsx │ │ │ ├── language/ │ │ │ │ └── LanguagePage.tsx │ │ │ ├── layouts/ │ │ │ │ ├── DefaultDesktopLayout.tsx │ │ │ │ ├── ElectronHeader.tsx │ │ │ │ ├── FloatingRoomInfo.tsx │ │ │ │ ├── GridPanels.tsx │ │ │ │ ├── MainLayout.tsx │ │ │ │ └── TabletSidebar.tsx │ │ │ ├── room/ │ │ │ │ ├── AudioDebugConsumerSection.tsx │ │ │ │ ├── BlockedFromRoomUsers.tsx │ │ │ │ ├── InviteRoomPage.tsx │ │ │ │ ├── RoomChatController.tsx │ │ │ │ ├── RoomOpenGraphPreview.tsx │ │ │ │ ├── RoomPage.tsx │ │ │ │ ├── RoomPanelController.tsx │ │ │ │ ├── RoomPanelIconBarController.tsx │ │ │ │ ├── RoomSettingModal.tsx │ │ │ │ ├── RoomUsersPanel.tsx │ │ │ │ ├── UserPreviewModal.tsx │ │ │ │ ├── UserPreviewModalProvider.tsx │ │ │ │ ├── ViewScheduledRoomPage.tsx │ │ │ │ ├── VolumeSliderController.tsx │ │ │ │ ├── chat/ │ │ │ │ │ ├── Emote.tsx │ │ │ │ │ ├── EmoteData.ts │ │ │ │ │ ├── RoomChat.tsx │ │ │ │ │ ├── RoomChatInput.tsx │ │ │ │ │ ├── RoomChatList.tsx │ │ │ │ │ ├── RoomChatMentions.tsx │ │ │ │ │ ├── navigateThroughQueriedEmojis.ts │ │ │ │ │ ├── navigateThroughQueriedUsers.ts │ │ │ │ │ ├── useRoomChatMentionStore.ts │ │ │ │ │ └── useRoomChatStore.ts │ │ │ │ ├── mobile/ │ │ │ │ │ └── RoomOverlay.tsx │ │ │ │ ├── useGetRoomByQueryParam.ts │ │ │ │ ├── useResize.ts │ │ │ │ └── useSplitUsersIntoSections.tsx │ │ │ ├── scheduled-rooms/ │ │ │ │ ├── AddToCalendar.tsx │ │ │ │ ├── CopyScheduleRoomLinkButton.tsx │ │ │ │ ├── CreateScheduledRoomModal.tsx │ │ │ │ ├── EditScheduleRoomModalController.tsx │ │ │ │ ├── ScheduledRoomCard.tsx │ │ │ │ ├── ScheduledRoomsList.tsx │ │ │ │ ├── ScheduledRoomsPage.tsx │ │ │ │ ├── copyToClipboard.ts │ │ │ │ └── makeUrls.ts │ │ │ ├── search/ │ │ │ │ ├── SearchBarController.tsx │ │ │ │ └── SearchPage.tsx │ │ │ ├── settings/ │ │ │ │ ├── OverlaySettingsPage.tsx │ │ │ │ ├── PrivacySettingForm.tsx │ │ │ │ ├── PrivacySettingsPage.tsx │ │ │ │ ├── SoundEffectSettingsPage.tsx │ │ │ │ └── VoiceSettingsPage.tsx │ │ │ ├── sound-effects/ │ │ │ │ ├── SoundEffectPlayer.tsx │ │ │ │ └── useSoundEffectStore.ts │ │ │ ├── user/ │ │ │ │ ├── EditProfileModal.tsx │ │ │ │ ├── FollowingController.tsx │ │ │ │ ├── FollowingOnlinePage.tsx │ │ │ │ ├── FollowingPage.tsx │ │ │ │ ├── UserPage.tsx │ │ │ │ ├── UserProfileController.tsx │ │ │ │ └── VerticalUserInfoWithFollowButton.tsx │ │ │ ├── webrtc/ │ │ │ │ ├── WebRtcApp.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── ActiveSpeakerListener.tsx │ │ │ │ │ ├── AudioRender.tsx │ │ │ │ │ └── MicPicker.tsx │ │ │ │ ├── stores/ │ │ │ │ │ ├── useAskForMicStore.ts │ │ │ │ │ ├── useAudioTracks.ts │ │ │ │ │ ├── useConsumerStore.ts │ │ │ │ │ ├── useMicIdStore.ts │ │ │ │ │ ├── useMicPermErrorStore.ts │ │ │ │ │ ├── useProducerStore.ts │ │ │ │ │ ├── useSocketStatus.ts │ │ │ │ │ ├── useStatus.ts │ │ │ │ │ └── useVoiceStore.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils/ │ │ │ │ ├── consumeAudio.ts │ │ │ │ ├── createTransport.ts │ │ │ │ ├── joinRoom.ts │ │ │ │ ├── mergeRoomPermission.ts │ │ │ │ ├── receiveVoice.ts │ │ │ │ └── sendVoice.ts │ │ │ └── ws/ │ │ │ └── WebSocketProvider.tsx │ │ ├── pages/ │ │ │ ├── 404.tsx │ │ │ ├── _app.tsx │ │ │ ├── admin.tsx │ │ │ ├── connection-taken.tsx │ │ │ ├── dash.tsx │ │ │ ├── developer/ │ │ │ │ └── bots/ │ │ │ │ ├── edit/ │ │ │ │ │ └── [username]/ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── download.tsx │ │ │ ├── index.tsx │ │ │ ├── language.tsx │ │ │ ├── logout.tsx │ │ │ ├── overlay-settings.tsx │ │ │ ├── privacy-settings.tsx │ │ │ ├── room/ │ │ │ │ └── [id]/ │ │ │ │ ├── index.tsx │ │ │ │ └── invite.tsx │ │ │ ├── scheduled-room/ │ │ │ │ └── [id].tsx │ │ │ ├── scheduled-rooms.tsx │ │ │ ├── search.tsx │ │ │ ├── sound-effect-settings.tsx │ │ │ ├── u/ │ │ │ │ └── [username]/ │ │ │ │ ├── followers.tsx │ │ │ │ ├── following-online.tsx │ │ │ │ ├── following.tsx │ │ │ │ └── index.tsx │ │ │ └── voice-settings.tsx │ │ ├── shared-components/ │ │ │ ├── ApiPreloadLink.tsx │ │ │ ├── ConfirmModal.tsx │ │ │ └── InvitedToJoinRoomModal.tsx │ │ ├── shared-hooks/ │ │ │ ├── useBoundingClientRect.ts │ │ │ ├── useConn.ts │ │ │ ├── useCurrentRoomFromCache.ts │ │ │ ├── useCurrentRoomId.ts │ │ │ ├── useCurrentRoomInfo.ts │ │ │ ├── useDevices.ts │ │ │ ├── useIntersectionObserver.ts │ │ │ ├── useLeaveRoom.ts │ │ │ ├── useMainWsHandler.tsx │ │ │ ├── useOnClickOutside.tsx │ │ │ ├── usePageVisibility.ts │ │ │ ├── useScreenType.ts │ │ │ ├── useScreenWakeLockStore.ts │ │ │ ├── useSetDeaf.ts │ │ │ ├── useSetMute.ts │ │ │ ├── useTypeSafeMutation.ts │ │ │ ├── useTypeSafePrefetch.ts │ │ │ ├── useTypeSafeQuery.ts │ │ │ ├── useTypeSafeTranslation.ts │ │ │ ├── useTypeSafeUpdateQuery.ts │ │ │ ├── useViewportSize.ts │ │ │ └── useWindowSize.ts │ │ ├── stories/ │ │ │ ├── AccountOverlay.story.tsx │ │ │ ├── BaseDropdownSm.story.tsx │ │ │ ├── BaseOverlay.story.tsx │ │ │ ├── BaseSettingsItem.story.tsx │ │ │ ├── BoxedIcon.story.tsx │ │ │ ├── BubbleText.story.tsx │ │ │ ├── Button.story.tsx │ │ │ ├── ChangeAvatarCard.story.tsx │ │ │ ├── ChangeBannerCard.story.tsx │ │ │ ├── ErrorButtonItem.story.tsx │ │ │ ├── ErrorToast.story.tsx │ │ │ ├── FriendsOnline.story.tsx │ │ │ ├── KeybindCard.story.tsx │ │ │ ├── LeftHeader.story.tsx │ │ │ ├── MessageElement.story.tsx │ │ │ ├── MessagesDropdown.story.tsx │ │ │ ├── MiddleHeader.story.tsx │ │ │ ├── MinimizedRoomCard.story.tsx │ │ │ ├── MobileHeader/ │ │ │ │ ├── PageHeader.story.tsx │ │ │ │ ├── ProfileHeader.story.tsx │ │ │ │ └── SearchHeader.story.tsx │ │ │ ├── MobileNav.story.tsx │ │ │ ├── NativeCheckbox.story.tsx │ │ │ ├── NativeRadio.story.tsx │ │ │ ├── NotificationElement/ │ │ │ │ ├── FollowNotification.story.tsx │ │ │ │ ├── GenericNotification.story.tsx │ │ │ │ ├── LiveNotification.story.tsx │ │ │ │ └── NewRoomNotification.story.tsx │ │ │ ├── NotificationsDropdown.story.tsx │ │ │ ├── ProfileAbout.story.tsx │ │ │ ├── ProfileBlock.story.tsx │ │ │ ├── ProfileHeader.story.tsx │ │ │ ├── ProfileHeaderWrapper.story.tsx │ │ │ ├── ProfileTabs.story.tsx │ │ │ ├── RightHeader.story.tsx │ │ │ ├── RoomAvatar.story.tsx │ │ │ ├── RoomCard.story.tsx │ │ │ ├── RoomCardHeading.story.tsx │ │ │ ├── RoomCardParticipants.story.tsx │ │ │ ├── RoomHeader.story.tsx │ │ │ ├── RoomPanelIconBar.story.tsx │ │ │ ├── RoomSectionHeader.story.tsx │ │ │ ├── Search/ │ │ │ │ ├── GlobalSearch.story.tsx │ │ │ │ ├── SearchBar.story.tsx │ │ │ │ ├── SearchHistory.story.tsx │ │ │ │ ├── SearchOverlay.story.tsx │ │ │ │ └── SearchResult/ │ │ │ │ ├── RoomSearchResult.story.tsx │ │ │ │ └── UserSearchResult.story.tsx │ │ │ ├── SettingsDropdown.story.tsx │ │ │ ├── SettingsIcon.story.tsx │ │ │ ├── SettingsItemButton.story.tsx │ │ │ ├── SettingsWrapper.story.tsx │ │ │ ├── Tag.story.tsx │ │ │ ├── UpcomingRoomCardLg.story.tsx │ │ │ ├── UpcomingRoomsCard.story.tsx │ │ │ ├── UserAvatar/ │ │ │ │ ├── MultipleUsers.story.tsx │ │ │ │ └── SingleUser.story.tsx │ │ │ ├── UserBadge.story.tsx │ │ │ ├── UserBadgeLg.story.tsx │ │ │ ├── UserSummaryCard.story.tsx │ │ │ ├── UserWideButton.story.tsx │ │ │ ├── VerticalUserInfo.story.tsx │ │ │ ├── VolumeIndicator.story.tsx │ │ │ ├── data/ │ │ │ │ └── BaseUser.tsx │ │ │ ├── mobile/ │ │ │ │ ├── FeaturedRoomCardAvatars.story.tsx │ │ │ │ └── FeaturedRoomCardHosts.story.tsx │ │ │ └── utils/ │ │ │ ├── GbFlagIcon.tsx │ │ │ ├── toBoolean.ts │ │ │ ├── toEnum.ts │ │ │ └── toStr.ts │ │ ├── styles/ │ │ │ ├── banner-button.css │ │ │ ├── date-time-picker.css │ │ │ ├── electron-header.css │ │ │ └── globals.css │ │ ├── types/ │ │ │ ├── PageComponent.ts │ │ │ ├── index.d.ts │ │ │ ├── overrides-mui.d.ts │ │ │ ├── user.d.ts │ │ │ ├── util-types.ts │ │ │ └── wakeLock.d.ts │ │ └── ui/ │ │ ├── Banner.tsx │ │ ├── BannerButton.tsx │ │ ├── BaseDropdownSm.tsx │ │ ├── BaseOverlay.tsx │ │ ├── BaseSettingsItem.tsx │ │ ├── BoxedIcon.tsx │ │ ├── BubbleText.tsx │ │ ├── Button.tsx │ │ ├── ButtonLink.tsx │ │ ├── CenterLoader.tsx │ │ ├── ChangeAvatarCard.tsx │ │ ├── ChangeBannerCard.tsx │ │ ├── DropdownController.tsx │ │ ├── DurationTicker.tsx │ │ ├── EmojiPicker.tsx │ │ ├── ErrorButtonItem.tsx │ │ ├── ErrorMessageButton.tsx │ │ ├── ErrorToast.tsx │ │ ├── FeedHeader.tsx │ │ ├── FollowersOnline.tsx │ │ ├── GridPanel.tsx │ │ ├── InfoText.tsx │ │ ├── Input.tsx │ │ ├── InputErrorMsg.tsx │ │ ├── KeybindCard.tsx │ │ ├── LanguageSearch.tsx │ │ ├── LanguageSelector.tsx │ │ ├── MacButton.tsx │ │ ├── MainGrid.tsx │ │ ├── MessageElement.tsx │ │ ├── MessagesDropdown.tsx │ │ ├── MinimizedRoomCard.tsx │ │ ├── Modal.tsx │ │ ├── NativeCheckbox.tsx │ │ ├── NativeRadio.tsx │ │ ├── NativeSelect.tsx │ │ ├── NotificationElement/ │ │ │ ├── FollowNotification.tsx │ │ │ ├── GenericNotification.tsx │ │ │ ├── LiveNotification.tsx │ │ │ ├── NewRoomNotification.tsx │ │ │ └── index.tsx │ │ ├── NotificationsDropdown.tsx │ │ ├── ProfileAbout.tsx │ │ ├── ProfileAdmin.tsx │ │ ├── ProfileBlock.tsx │ │ ├── ProfileHeader.tsx │ │ ├── ProfileHeaderWrapper.tsx │ │ ├── ProfileScheduled.tsx │ │ ├── ProfileTabs.tsx │ │ ├── RoomAvatar.tsx │ │ ├── RoomCard.tsx │ │ ├── RoomCardHeading.tsx │ │ ├── RoomCardParticipants.tsx │ │ ├── RoomHeader.tsx │ │ ├── RoomPanelIconBar.tsx │ │ ├── RoomSectionHeader.tsx │ │ ├── Search/ │ │ │ ├── GlobalSearch.tsx │ │ │ ├── SearchBar.tsx │ │ │ ├── SearchHistory.tsx │ │ │ ├── SearchOverlay.tsx │ │ │ └── SearchResult/ │ │ │ ├── RoomSearchResult.tsx │ │ │ ├── UserSearchResult.tsx │ │ │ └── index.ts │ │ ├── SettingsDropdown.tsx │ │ ├── SettingsIcon.tsx │ │ ├── SettingsItemButton.tsx │ │ ├── SettingsWrapper.tsx │ │ ├── Spinner.tsx │ │ ├── Tag.tsx │ │ ├── Toast.tsx │ │ ├── Twemoji.tsx │ │ ├── UpcomingRoomCardLg.tsx │ │ ├── UpcomingRoomsCard.tsx │ │ ├── UserAvatar/ │ │ │ ├── MultipleUsers.tsx │ │ │ ├── SingleUser.tsx │ │ │ ├── index.ts │ │ │ └── tests/ │ │ │ ├── MultipleUser.spec.tsx │ │ │ ├── SingleUser.spec.tsx │ │ │ └── __snapshots__/ │ │ │ ├── MultipleUser.spec.tsx.snap │ │ │ └── SingleUser.spec.tsx.snap │ │ ├── UserBadge.tsx │ │ ├── UserBadgeLg.tsx │ │ ├── UserProfile.tsx │ │ ├── UserSummaryCard.tsx │ │ ├── UserWideButton.tsx │ │ ├── VerticalUserInfo.tsx │ │ ├── VolumeIndicator.tsx │ │ ├── VolumeSlider.tsx │ │ ├── WinButton.tsx │ │ ├── header/ │ │ │ ├── LeftHeader.tsx │ │ │ ├── MiddleHeader.tsx │ │ │ └── RightHeader.tsx │ │ ├── mobile/ │ │ │ ├── AccountOverlay.tsx │ │ │ ├── FeaturedRoomCardAvatars.tsx │ │ │ ├── FeaturedRoomCardHosts.tsx │ │ │ ├── MobileHeader/ │ │ │ │ ├── PageHeader.tsx │ │ │ │ ├── ProfileHeader.tsx │ │ │ │ ├── SearchHeader.tsx │ │ │ │ └── index.tsx │ │ │ └── MobileNav.tsx │ │ └── tests/ │ │ ├── BaseOverlay.spec.tsx │ │ ├── BoxedIcon.spec.tsx │ │ ├── BubbleText.spec.tsx │ │ ├── Button.spec.tsx │ │ ├── ErrorMessageButton.spec.tsx │ │ ├── ErrorToast.spec.tsx │ │ ├── Input.spec.tsx │ │ ├── InputErrorMsg.spec.tsx │ │ ├── MainGrid.spec.tsx │ │ ├── MessageElement.spec.tsx │ │ ├── MessagesDropdown.spec.tsx │ │ ├── MinimizedRoomCard.spec.tsx │ │ └── __snapshots__/ │ │ ├── BaseOverlay.spec.tsx.snap │ │ ├── BoxedIcon.spec.tsx.snap │ │ ├── BubbleText.spec.tsx.snap │ │ ├── Button.spec.tsx.snap │ │ ├── ErrorMessageButton.spec.tsx.snap │ │ ├── ErrorToast.spec.tsx.snap │ │ ├── Input.spec.tsx.snap │ │ ├── InputErrorMsg.spec.tsx.snap │ │ ├── MainGrid.spec.tsx.snap │ │ ├── MessageElement.spec.tsx.snap │ │ └── MinimizedRoomCard.spec.tsx.snap │ ├── tailwind.config.js │ ├── test-utils.ts │ └── tsconfig.json ├── kousa/ │ ├── .envrc │ ├── .formatter.exs │ ├── .gitignore │ ├── ADDING_TO_MESSAGING_API.md │ ├── ARCHITECTURE.md │ ├── Dockerfile │ ├── README.md │ ├── ROADMAP.md │ ├── config/ │ │ ├── config.exs │ │ ├── dev.exs │ │ ├── prod.exs │ │ ├── releases.exs │ │ └── test.exs │ ├── deploy.sh │ ├── lib/ │ │ ├── beef/ │ │ │ ├── _repo.ex │ │ │ ├── access/ │ │ │ │ ├── rooms.ex │ │ │ │ ├── user_blocks.ex │ │ │ │ └── users.ex │ │ │ ├── follows.ex │ │ │ ├── mutations/ │ │ │ │ ├── rooms.ex │ │ │ │ ├── user_blocks.ex │ │ │ │ └── users.ex │ │ │ ├── queries/ │ │ │ │ ├── rooms.ex │ │ │ │ ├── user_blocks.ex │ │ │ │ └── users.ex │ │ │ ├── room_blocks.ex │ │ │ ├── room_permissions.ex │ │ │ ├── rooms.ex │ │ │ ├── scheduled_rooms.ex │ │ │ ├── schemas/ │ │ │ │ ├── attending_scheduled_room.ex │ │ │ │ ├── follow.ex │ │ │ │ ├── room.ex │ │ │ │ ├── room_block.ex │ │ │ │ ├── room_permission.ex │ │ │ │ ├── scheduled_room.ex │ │ │ │ ├── scheduled_room_cohost.ex │ │ │ │ ├── user.ex │ │ │ │ └── user_block.ex │ │ │ ├── user_blocks.ex │ │ │ └── users.ex │ │ ├── broth/ │ │ │ ├── legacy_handler.ex │ │ │ ├── message/ │ │ │ │ ├── _types/ │ │ │ │ │ ├── chat_token.ex │ │ │ │ │ ├── chat_token_type.ex │ │ │ │ │ ├── operator.ex │ │ │ │ │ ├── relationship.ex │ │ │ │ │ ├── room_auth.ex │ │ │ │ │ └── room_role.ex │ │ │ │ ├── auth/ │ │ │ │ │ └── request.ex │ │ │ │ ├── call.ex │ │ │ │ ├── cast.ex │ │ │ │ ├── chat/ │ │ │ │ │ ├── ban.ex │ │ │ │ │ ├── delete.ex │ │ │ │ │ ├── send.ex │ │ │ │ │ └── unban.ex │ │ │ │ ├── manifest.ex │ │ │ │ ├── misc/ │ │ │ │ │ └── search.ex │ │ │ │ ├── push.ex │ │ │ │ ├── room/ │ │ │ │ │ ├── ban.ex │ │ │ │ │ ├── create.ex │ │ │ │ │ ├── create_scheduled.ex │ │ │ │ │ ├── deafen.ex │ │ │ │ │ ├── delete_scheduled.ex │ │ │ │ │ ├── get_banned_users.ex │ │ │ │ │ ├── get_info.ex │ │ │ │ │ ├── get_invite_list.ex │ │ │ │ │ ├── get_scheduled.ex │ │ │ │ │ ├── get_top.ex │ │ │ │ │ ├── invite.ex │ │ │ │ │ ├── join.ex │ │ │ │ │ ├── leave.ex │ │ │ │ │ ├── mute.ex │ │ │ │ │ ├── set_active_speaker.ex │ │ │ │ │ ├── set_auth.ex │ │ │ │ │ ├── set_role.ex │ │ │ │ │ ├── unban.ex │ │ │ │ │ ├── update.ex │ │ │ │ │ └── update_scheduled.ex │ │ │ │ └── user/ │ │ │ │ ├── admin_update.ex │ │ │ │ ├── ban.ex │ │ │ │ ├── block.ex │ │ │ │ ├── create_bot.ex │ │ │ │ ├── follow.ex │ │ │ │ ├── get_bots.ex │ │ │ │ ├── get_followers.ex │ │ │ │ ├── get_following.ex │ │ │ │ ├── get_info.ex │ │ │ │ ├── get_relationship.ex │ │ │ │ ├── revoke_api_key.ex │ │ │ │ ├── unblock.ex │ │ │ │ ├── unfollow.ex │ │ │ │ └── update.ex │ │ │ ├── message.ex │ │ │ ├── plugs/ │ │ │ │ ├── check_auth.ex │ │ │ │ ├── cors.ex │ │ │ │ └── redirect.ex │ │ │ ├── routes/ │ │ │ │ ├── bot_auth.ex │ │ │ │ ├── dev_only.ex │ │ │ │ ├── discord_auth.ex │ │ │ │ ├── github_auth.ex │ │ │ │ ├── room.ex │ │ │ │ ├── scheduled_room.ex │ │ │ │ ├── stats.ex │ │ │ │ ├── twitter_auth.ex │ │ │ │ └── user.ex │ │ │ ├── socket_handler.ex │ │ │ ├── translator/ │ │ │ │ └── v0_1_0.ex │ │ │ └── translator.ex │ │ ├── broth.ex │ │ ├── kousa/ │ │ │ ├── access_token.ex │ │ │ ├── auth.ex │ │ │ ├── chat.ex │ │ │ ├── discord.ex │ │ │ ├── follow_logic.ex │ │ │ ├── github.ex │ │ │ ├── metrics/ │ │ │ │ └── prometheus.ex │ │ │ ├── refresh_token.ex │ │ │ ├── release.ex │ │ │ ├── room.ex │ │ │ ├── room_block.ex │ │ │ ├── scheduled_room.ex │ │ │ ├── user.ex │ │ │ ├── user_block.ex │ │ │ └── utils/ │ │ │ ├── errors.ex │ │ │ ├── pagination.ex │ │ │ ├── random.ex │ │ │ ├── reg_utils.ex │ │ │ ├── token_utils.ex │ │ │ ├── urls.ex │ │ │ ├── uuid.ex │ │ │ ├── version.ex │ │ │ └── voice_server_utils.ex │ │ ├── kousa.ex │ │ └── onion/ │ │ ├── bot_auth_rate_limit.ex │ │ ├── chat.ex │ │ ├── pub_sub.ex │ │ ├── room_session.ex │ │ ├── stats_cache.ex │ │ ├── supervisors/ │ │ │ ├── room_chat.ex │ │ │ ├── room_session.ex │ │ │ ├── user_session.ex │ │ │ ├── voice_online_rabbit.ex │ │ │ └── voice_rabbit.ex │ │ ├── telemetry.ex │ │ ├── user_session.ex │ │ ├── voice_online_rabbit.ex │ │ └── voice_rabbit.ex │ ├── mix.exs │ ├── priv/ │ │ └── repo/ │ │ └── migrations/ │ │ ├── 20210124203315_most_tables.exs │ │ ├── 20210125155346_more_fields.exs │ │ ├── 20210202143344_has_logged_in.exs │ │ ├── 20210202162325_default_timestamps.exs │ │ ├── 20210210005241_email.exs │ │ ├── 20210210012609_access_token.exs │ │ ├── 20210212141759_bans.exs │ │ ├── 20210214140430_twitter_id.exs │ │ ├── 20210214172930_github_id_nullable.exs │ │ ├── 20210219173153_case_insensitive_unique_username_index.exs │ │ ├── 20210221041850_room_permissions.exs │ │ ├── 20210221233129_voice_server_id.exs │ │ ├── 20210301151808_use_utc_datetime_usec.exs │ │ ├── 20210301162635_last_online_utc_datetime_usec.exs │ │ ├── 20210301200955_scheduled_room.exs │ │ ├── 20210303204515_room_description.exs │ │ ├── 20210304004945_set_timezone_for_now.exs │ │ ├── 20210305031538_scheduled_room_started.exs │ │ ├── 20210321141614_discord_login.exs │ │ ├── 20210424191849_banner_url.exs │ │ ├── 20210425000426_user_bot_api_key.exs │ │ ├── 20210427180800_user_ip.exs │ │ ├── 20210427192138_room_ban_ip.exs │ │ ├── 20210501201857_emails_are_no_longer_unique.exs │ │ ├── 20210504210047_whisper_privacy_setting.exs │ │ ├── 20210504225546_chat_mode.exs │ │ ├── 20210506000509_chat_throttle.exs │ │ └── 20210509055314_admin_update.exs │ └── test/ │ ├── _support/ │ │ ├── deprecations.ex │ │ ├── ecto_sandbox.ex │ │ ├── factory.ex │ │ ├── http_request.ex │ │ ├── message.ex │ │ └── ws_client.ex │ ├── ad_hoc_user_test.exs │ ├── beef/ │ │ ├── follow_test.exs │ │ ├── room_test.exs │ │ ├── rooms_test.exs │ │ ├── scheduled_room_test.exs │ │ ├── user_block_test.exs │ │ ├── user_blocks_test.exs │ │ ├── user_test.exs │ │ └── users_test.exs │ ├── broth/ │ │ ├── _calls/ │ │ │ ├── _THIS DIRECTORY TO BE DEPRECATED │ │ │ ├── create_room_from_scheduled_room_test.exs │ │ │ ├── create_room_test.exs │ │ │ ├── delete_scheduled_room_test.exs │ │ │ ├── edit_profile_test.exs │ │ │ ├── edit_room_test.exs │ │ │ ├── edit_scheduled_room_test.exs │ │ │ ├── fetch_follow_list_test.exs │ │ │ ├── follow_info_test.exs │ │ │ ├── get_blocked_from_room_users_test.exs │ │ │ ├── get_my_following_test.exs │ │ │ ├── get_my_scheduled_rooms_about_to_start_test.exs │ │ │ ├── get_scheduled_rooms_test.exs │ │ │ ├── get_top_public_rooms_test.exs │ │ │ ├── get_user_profile_test.exs │ │ │ ├── join_room_and_get_info_test.exs │ │ │ ├── schedule_room_test.exs │ │ │ ├── search_test.exs │ │ │ └── unban_from_room_test.exs │ │ ├── _casts/ │ │ │ ├── _THIS DIRECTORY TO BE DEPRECATED │ │ │ ├── add_speaker_test.exs │ │ │ ├── ask_to_speak_test.exs │ │ │ ├── auth_test.exs │ │ │ ├── ban_from_room_chat_test.exs │ │ │ ├── ban_test.exs │ │ │ ├── block_from_room_test.exs │ │ │ ├── change_mod_status_test.exs │ │ │ ├── change_room_creator_test.exs │ │ │ ├── delete_room_chat_message_test.exs │ │ │ ├── follow_test.exs │ │ │ ├── invite_to_room_test.exs │ │ │ ├── leave_room_test.exs │ │ │ ├── make_room_public_test.exs │ │ │ ├── mute_test.exs │ │ │ ├── send_room_chat_msg_test.exs │ │ │ ├── set_auto_speaker.exs │ │ │ ├── set_listener_test.exs │ │ │ ├── speaking_change_test.exs │ │ │ └── unban_from_room_chat_test.exs │ │ ├── _message/ │ │ │ ├── auth/ │ │ │ │ └── request_test.exs │ │ │ ├── chat/ │ │ │ │ ├── ban_test.exs │ │ │ │ ├── delete_msg_test.exs │ │ │ │ ├── send_test.exs │ │ │ │ └── unban_test.exs │ │ │ ├── misc/ │ │ │ │ └── search_test.exs │ │ │ ├── room/ │ │ │ │ ├── ban_test.exs │ │ │ │ ├── create_scheduled_test.exs │ │ │ │ ├── create_test.exs │ │ │ │ ├── deafen_test.exs │ │ │ │ ├── delete_scheduled_test.exs │ │ │ │ ├── get_banned_users_test.exs │ │ │ │ ├── get_info_test.exs │ │ │ │ ├── get_invite_list_test.exs │ │ │ │ ├── get_scheduled_test.exs │ │ │ │ ├── get_top_test.exs │ │ │ │ ├── invite_test.exs │ │ │ │ ├── join_test.exs │ │ │ │ ├── leave_test.exs │ │ │ │ ├── mute_test.exs │ │ │ │ ├── set_active_speaker_test.exs │ │ │ │ ├── set_auth_test.exs │ │ │ │ ├── set_role_test.exs │ │ │ │ ├── unban_test.exs │ │ │ │ ├── update_scheduled_test.exs │ │ │ │ └── update_test.exs │ │ │ └── user/ │ │ │ ├── admin_update_test.exs │ │ │ ├── ban_test.exs │ │ │ ├── block_test.exs │ │ │ ├── create_bot_test.exs │ │ │ ├── follow_test.exs │ │ │ ├── get_bots_test.exs │ │ │ ├── get_followers_test.exs │ │ │ ├── get_following_test.exs │ │ │ ├── get_info_test.exs │ │ │ ├── get_relationship_test.exs │ │ │ ├── revoke_api_key_test.exs │ │ │ ├── unblock_test.exs │ │ │ ├── unfollow_test.exs │ │ │ └── update_test.exs │ │ ├── _routes/ │ │ │ └── bot_auth_test.exs │ │ ├── _types/ │ │ │ └── chat_token.exs │ │ ├── auth/ │ │ │ └── request_test.exs │ │ ├── chat/ │ │ │ ├── ban_test.exs │ │ │ ├── delete_test.exs │ │ │ ├── send_test.exs │ │ │ └── unban_test.exs │ │ ├── message_test.exs │ │ ├── misc/ │ │ │ └── search_test.exs │ │ ├── room/ │ │ │ ├── ban_test.exs │ │ │ ├── create_scheduled_test.exs │ │ │ ├── create_test.exs │ │ │ ├── deafen_test.exs │ │ │ ├── delete_scheduled_test.exs │ │ │ ├── get_banned_users_test.exs │ │ │ ├── get_info_test.exs │ │ │ ├── get_invite_list_test.exs │ │ │ ├── get_scheduled_test.exs │ │ │ ├── get_top_test.exs │ │ │ ├── invite_test.exs │ │ │ ├── join_test.exs │ │ │ ├── leave_test.exs │ │ │ ├── mute_test.exs │ │ │ ├── set_active_speaker_test.exs │ │ │ ├── set_auth_test.exs │ │ │ ├── set_role_test.exs │ │ │ ├── unban_test.exs │ │ │ ├── update_scheduled_test.exs │ │ │ └── update_test.exs │ │ └── user/ │ │ ├── admin_update_test.exs │ │ ├── ban_test.exs │ │ ├── block_test.exs │ │ ├── create_bot_test.exs │ │ ├── follow_test.exs │ │ ├── get_bots_test.exs │ │ ├── get_followers_test.exs │ │ ├── get_following_test.exs │ │ ├── get_info_test.exs │ │ ├── get_relationship_test.exs │ │ ├── revoke_api_key_test.exs │ │ ├── unblock_test.exs │ │ ├── unfollow_test.exs │ │ └── update_test.exs │ ├── kousa/ │ │ └── user.ex │ └── test_helper.exs ├── package.json ├── pilaf/ │ ├── .buckconfig │ ├── .eslintrc.js │ ├── .flowconfig │ ├── .gitattributes │ ├── .gitignore │ ├── .prettierrc.js │ ├── .storybook/ │ │ ├── main.js │ │ └── manager.js │ ├── .watchmanconfig │ ├── .yarnrc.yml │ ├── App.tsx │ ├── LICENSE │ ├── README.md │ ├── __tests__/ │ │ └── App-test.js │ ├── android/ │ │ ├── app/ │ │ │ ├── BUCK │ │ │ ├── build.gradle │ │ │ ├── build_defs.bzl │ │ │ ├── debug.keystore │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── debug/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── rice/ │ │ │ │ └── ReactNativeFlipper.java │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── rice/ │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MainApplication.java │ │ │ │ └── SplashActivity.java │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── background_splash.xml │ │ │ ├── layout/ │ │ │ │ └── launch_screen.xml │ │ │ └── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── settings.gradle │ ├── app.json │ ├── babel.config.js │ ├── index.js │ ├── ios/ │ │ ├── Podfile │ │ ├── rice/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Images.xcassets/ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ └── SplashIcon.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ ├── main.m │ │ │ └── rice.entitlements │ │ ├── rice-tvOS/ │ │ │ └── Info.plist │ │ ├── rice-tvOSTests/ │ │ │ └── Info.plist │ │ ├── rice.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── rice-tvOS.xcscheme │ │ │ └── rice.xcscheme │ │ ├── rice.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── riceTests/ │ │ ├── Info.plist │ │ └── riceTests.m │ ├── metro.config.js │ ├── package.json │ ├── react-native.config.js │ ├── src/ │ │ ├── assets/ │ │ │ └── images/ │ │ │ ├── logo.svg~Add font + constant for dogehouse theme colors │ │ │ └── logo.svg~refs/ │ │ │ └── remotes/ │ │ │ └── ben/ │ │ │ └── staging │ │ ├── components/ │ │ │ ├── BaseOverlay.tsx │ │ │ ├── BubbleText.tsx │ │ │ ├── ErrorToast.tsx │ │ │ ├── FeaturedRoomCard.tsx │ │ │ ├── MessageElement.tsx │ │ │ ├── RoomCard.tsx │ │ │ ├── RoomCardHeading.tsx │ │ │ ├── ScrollViewLoadMore.tsx │ │ │ ├── Spinner.tsx │ │ │ ├── Tag.tsx │ │ │ ├── UpcomingRoomCard.tsx │ │ │ ├── UserBadge.tsx │ │ │ ├── UserPreview.tsx │ │ │ ├── accountModal/ │ │ │ │ ├── AccountModalContent.tsx │ │ │ │ └── AccountModalRow.tsx │ │ │ ├── avatars/ │ │ │ │ ├── MultipleUserAvatar.tsx │ │ │ │ ├── RoomAvatar.tsx │ │ │ │ └── SingleUserAvatar.tsx │ │ │ ├── bottomBar/ │ │ │ │ └── CreateRoomButton.tsx │ │ │ ├── buttons/ │ │ │ │ ├── Button.tsx │ │ │ │ ├── IconButton.tsx │ │ │ │ ├── SignInButton.tsx │ │ │ │ └── SigninWithGithub.tsx │ │ │ ├── header/ │ │ │ │ ├── Header.tsx │ │ │ │ ├── HeaderBase.tsx │ │ │ │ ├── ProfileButton.tsx │ │ │ │ ├── RoomHeader.tsx │ │ │ │ ├── SearchHeader.tsx │ │ │ │ └── TitledHeader.tsx │ │ │ ├── minimizedRoomCard/ │ │ │ │ ├── BoxedIcon.tsx │ │ │ │ └── MinimizedRoomCard.tsx │ │ │ ├── notifications/ │ │ │ │ ├── FollowNotification.tsx │ │ │ │ ├── GenericNotification.tsx │ │ │ │ ├── LiveNotification.tsx │ │ │ │ └── NewRoomNotification.tsx │ │ │ ├── report/ │ │ │ │ └── Report.tsx │ │ │ └── search/ │ │ │ ├── RoomSearchResult.tsx │ │ │ ├── SearchHistoryResult.tsx │ │ │ ├── SearchHistoryResultList.tsx │ │ │ ├── SearchResultList.tsx │ │ │ └── UserSearchResult.tsx │ │ ├── constants/ │ │ │ ├── dogeStyle.ts │ │ │ ├── env.ts │ │ │ └── regex.ts │ │ ├── global-stores/ │ │ │ ├── useCurrentRoomIdStore.ts │ │ │ ├── useMicPermErrorStore.ts │ │ │ ├── useMuteStore.ts │ │ │ ├── useProducerStore.ts │ │ │ └── useRoomChatMentionStore.ts │ │ ├── lib/ │ │ │ ├── createChatMessage.ts │ │ │ ├── inCallManagerCenter.ts │ │ │ ├── notificationCenter.ts │ │ │ └── queryClient.ts │ │ ├── modules/ │ │ │ ├── auth/ │ │ │ │ ├── WaitForWsAndAuth.tsx │ │ │ │ ├── useSaveTokensFromQueryParams.ts │ │ │ │ ├── useTokenStore.ts │ │ │ │ └── useVerifyLoggedIn.ts │ │ │ ├── explore/ │ │ │ │ └── ExploreController.tsx │ │ │ ├── feed/ │ │ │ │ └── FeedController.tsx │ │ │ ├── following/ │ │ │ │ ├── FollowersOnline.tsx │ │ │ │ └── FollowingOnlineController.tsx │ │ │ ├── help/ │ │ │ │ └── HelpController.tsx │ │ │ ├── landing/ │ │ │ │ └── LandingController.tsx │ │ │ ├── languages/ │ │ │ │ └── LanguagesController.tsx │ │ │ ├── main/ │ │ │ │ └── MainController.tsx │ │ │ ├── messages/ │ │ │ │ └── MessagesController.tsx │ │ │ ├── notifications/ │ │ │ │ └── NotificationsController.tsx │ │ │ ├── profile/ │ │ │ │ └── ProfileController.tsx │ │ │ ├── reportBug/ │ │ │ │ └── ReportBugController.tsx │ │ │ ├── room/ │ │ │ │ ├── InviteRoomController.tsx │ │ │ │ ├── MinimizedRoomCardController.tsx │ │ │ │ ├── RoomController.tsx │ │ │ │ ├── RoomDescriptionController.tsx │ │ │ │ ├── RoomPanelController.tsx │ │ │ │ ├── RoomUsersPanel.tsx │ │ │ │ ├── UserPreviewModalProvider.tsx │ │ │ │ ├── chat/ │ │ │ │ │ ├── EmoteData.ts │ │ │ │ │ ├── EmotePicker.tsx │ │ │ │ │ ├── RoomChat.tsx │ │ │ │ │ ├── RoomChatControls.tsx │ │ │ │ │ ├── RoomChatInput.tsx │ │ │ │ │ ├── RoomChatList.tsx │ │ │ │ │ ├── RoomChatMentions.tsx │ │ │ │ │ ├── RoomMessage.tsx │ │ │ │ │ ├── useRoomChatMentionStore.ts │ │ │ │ │ └── useRoomChatStore.ts │ │ │ │ ├── useOnRoomPage.tsx │ │ │ │ └── useSplitUsersIntoSections.tsx │ │ │ ├── schedule/ │ │ │ │ └── ScheduleController.tsx │ │ │ ├── search/ │ │ │ │ └── SearchController.tsx │ │ │ ├── settings/ │ │ │ │ └── SettingsController.tsx │ │ │ ├── sound-effect/ │ │ │ │ └── useSoundEffectStore.ts │ │ │ ├── wallet/ │ │ │ │ └── WalletController.tsx │ │ │ ├── webrtc/ │ │ │ │ ├── WebRtcApp.tsx │ │ │ │ ├── components/ │ │ │ │ │ └── MicPicker.tsx │ │ │ │ ├── stores/ │ │ │ │ │ ├── useAskForMicStore.ts │ │ │ │ │ ├── useAudioTracks.ts │ │ │ │ │ ├── useConsumerStore.ts │ │ │ │ │ ├── useMicIdStore.ts │ │ │ │ │ ├── useMicPermErrorStore.ts │ │ │ │ │ ├── useProducerStore.ts │ │ │ │ │ ├── useSocketStatus.ts │ │ │ │ │ ├── useStatus.ts │ │ │ │ │ └── useVoiceStore.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils/ │ │ │ │ ├── consumeAudio.ts │ │ │ │ ├── createTransport.ts │ │ │ │ ├── joinRoom.ts │ │ │ │ ├── mergeRoomPermission.ts │ │ │ │ ├── receiveVoice.ts │ │ │ │ └── sendVoice.ts │ │ │ └── ws/ │ │ │ └── WebSocketProvider.tsx │ │ ├── navigation/ │ │ │ ├── AuthenticationSwitch.tsx │ │ │ ├── LandingPage.tsx │ │ │ ├── MainNavigator.tsx │ │ │ ├── RootNavigation.ts │ │ │ └── mainNavigator/ │ │ │ ├── BottomNavigator.tsx │ │ │ ├── HelpPage.tsx │ │ │ ├── InviteRoomPage.tsx │ │ │ ├── LanguagesPage.tsx │ │ │ ├── MainPage.tsx │ │ │ ├── MessagesPage.tsx │ │ │ ├── NotificationsPage.tsx │ │ │ ├── ProfilePage.tsx │ │ │ ├── ReportBugPage.tsx │ │ │ ├── RoomDescriptionPage.tsx │ │ │ ├── RoomNavigator.tsx │ │ │ ├── RoomPage.tsx │ │ │ ├── SearchPage.tsx │ │ │ ├── SettingsPage.tsx │ │ │ ├── WalletPage.tsx │ │ │ └── bottomNavigator/ │ │ │ ├── ExplorePage.tsx │ │ │ ├── FeedPage.tsx │ │ │ ├── FollowingPage.tsx │ │ │ └── SchedulePage.tsx │ │ ├── pages/ │ │ │ └── CreateRoomPage.tsx │ │ ├── shared-components/ │ │ │ └── ApiPreloadLink.tsx │ │ ├── shared-hooks/ │ │ │ ├── useConn.ts │ │ │ ├── useCurrentRoomInfo.ts │ │ │ ├── useMainWsHandler.tsx │ │ │ ├── useSetMute.ts │ │ │ ├── useTypeSafeMutation.ts │ │ │ ├── useTypeSafePrefetch.ts │ │ │ ├── useTypeSafeQuery.ts │ │ │ └── useTypeSafeUpdateQuery.ts │ │ ├── stories/ │ │ │ └── index.ts │ │ └── types/ │ │ └── util-types.ts │ ├── storybook/ │ │ ├── addons.ts │ │ ├── index.ts │ │ ├── rn-addons.ts │ │ └── stories/ │ │ ├── Button.stories.tsx │ │ ├── CenterView/ │ │ │ └── index.tsx │ │ ├── FeaturedRoomCard.stories.tsx │ │ ├── FollowNotification.stories.tsx │ │ ├── GenericNotification.stories.tsx │ │ ├── LiveNotification.stories.tsx │ │ ├── Message.stories.tsx │ │ ├── MultipleUserAvatar.stories.tsx │ │ ├── NewRoomNotification.stories.tsx │ │ ├── SingleUserAvatar.stories.tsx │ │ └── index.ts │ ├── template.config.js │ └── tokens.ts ├── run.ps1 ├── run.sh ├── scripts/ │ └── trigger-electron-deploy.sh ├── shawarma/ │ ├── .dockerignore │ ├── .eslintrc.json │ ├── Dockerfile │ ├── README.md │ ├── deploy.sh │ ├── package.json │ ├── src/ │ │ ├── MyPeer.ts │ │ ├── MyRoomState.ts │ │ ├── config.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── main.ts │ │ ├── types/ │ │ │ ├── env.d.ts │ │ │ └── index.ts │ │ └── utils/ │ │ ├── closePeer.ts │ │ ├── createConsumer.ts │ │ ├── createTransport.ts │ │ ├── deleteRoom.ts │ │ ├── startMediasoup.ts │ │ └── startRabbit.ts │ └── tsconfig.json └── 🐕.🏠