// Metro module 4865 (f4866). import UserSettingsProtoStore from "../user_settings/UserSettingsProtoStore"; import AuthenticationStore from "../../stores/AuthenticationStore"; import CallStore from "../../stores/CallStore"; import ChannelStore from "../../stores/ChannelStore"; import MediaEngineStore from "../../stores/MediaEngineStore"; import RTCConnectionStore from "../../stores/RTCConnectionStore"; import RTCRegionStore from "../../stores/RTCRegionStore"; import SelectedChannelStore from "../../stores/SelectedChannelStore"; import SelfPresenceStore from "../../stores/SelfPresenceStore"; import StreamRTCConnectionStore from "../../stores/StreamRTCConnectionStore"; import { AppStates, RTCConnectionStates } from "../../Constants"; import { UserSettingsTypes } from "../user_settings/UserSettingsConstants"; import * as _GatewaySocketSingleton from "./GatewaySocketSingleton"; import { localPresenceState, localVoiceState } from "./GatewaySocketSingleton"; import dispatchSocketMessage from "./dispatchSocketMessage"; import Logger from "../debug/Logger"; import { Storage } from "../../_bundle/Module595"; import { muteCustomJoinSound } from "../soundboard/SoundboardActionCreators"; import SelectedChannelActionCreators from "../../actions/SelectedChannelActionCreators"; import { isIOS } from "../../utils/PlatformUtils"; import { setIsPaused } from "./PauseGatewaySocket"; import Module12 from "../../_bundle/Module12"; import { decodeStreamKey } from "../go_live/utils/StreamKeyUtils"; import ConnectionState from "./ConnectionState"; import Module589 from "../../_bundle/Module589"; import Dispatcher from "../../Dispatcher"; let DiscordNative, c2996_19, c2996_20, sessionId, c2996_22, state, channelId, handleMediaEngineChange, handleLocalPresenceChange; let _handleConnectionOpen = function _handleConnectionOpen() { const r8 = async (c25303_0) => { let c25303_2; let c29444_0, c29444_1, c29444_2; L37: { L34: { c25303_2 = void 0; c29444_0 = void 0; c29444_1 = void 0; c29444_2 = void 0; c2996_20 = Date.now(); sessionId = c25303_0.sessionId; localPresenceState.handleConnectionOpen(); c29444_0 = {}; const voiceChannelId = SelectedChannelStore.getVoiceChannelId(); c29444_1 = voiceChannelId; if (voiceChannelId != null) { const r17 = Storage.get("discord_watchdog_restart_timestamp"); const r64 = r17 != null && Date.now() - parseInt(r17, 10) < 60000; Storage.remove("discord_watchdog_restart_timestamp"); const r72 = window; const r73 = r72 == null; let r74 = void 0; if (!r73) { const performance2 = r72.performance; const r84 = performance2 == null; r74 = void 0; if (!r84) { const getEntriesByType = performance2.getEntriesByType; const r86 = getEntriesByType == null; r74 = void 0; if (!r86) { const r88 = getEntriesByType.call(performance2, "navigation"); r74 = r88 == null ? void 0 : r88[0]?.type; } } } if (r74 !== "reload" && !r64) { const r101 = DiscordNative == null; let r102 = void 0; if (!r101) { const processUtils = DiscordNative.processUtils; const r105 = processUtils == null; r102 = void 0; if (!r105) { const getLastCrash = processUtils.getLastCrash; r102 = getLastCrash == null ? void 0 : getLastCrash.call(processUtils); } } const rendererCrashReason = (await r102)?.rendererCrashReason; L33: { if (rendererCrashReason == null) { if (c2996_22) { RTCConnectionStore.setLastSessionVoiceChannelId(c29444_1 != null ? c29444_1 : null); SelectedChannelActionCreators.selectVoiceChannel(null); break L33; } } c29444_2 = ChannelStore.getChannel(c29444_1); if (c29444_2 != null) { c29444_0 = { guildId: c29444_2.getGuildId(), channelId: c29444_1 }; muteCustomJoinSound(c29444_1); } } localVoiceState.update(c29444_0, true); c2996_22 = false; channelId = null; break L34; } c29444_2 = ChannelStore.getChannel(c29444_1); if (c29444_2 != null) { c29444_0 = { guildId: c29444_2.getGuildId(), channelId: c29444_1 }; muteCustomJoinSound(c29444_1); } } localVoiceState.update(c29444_0, true); c2996_22 = false; channelId = null; break L37; } return void 0; } }; _handleConnectionOpen = r8; return r8.apply(this, arguments); }; const handleClipsFlags = function handleClipsFlags() { localVoiceState.update(); }; handleMediaEngineChange = function handleMediaEngineChange() { localVoiceState.update(); return false; }; handleLocalPresenceChange = function handleLocalPresenceChange() { localPresenceState.update(); return false; }; DiscordNative = window.DiscordNative; _GatewaySocketSingleton.socket.dispatcher.getDispatchHandler = dispatchSocketMessage; c2996_19 = new Logger("ConnectionStore"); c2996_20 = 0; sessionId = null; c2996_22 = true; state = null; channelId = null; class GatewayConnectionStore extends Module589.Store { static displayName = "GatewayConnectionStore"; initialize() { this.waitFor(AuthenticationStore, CallStore, ChannelStore, MediaEngineStore, RTCConnectionStore, RTCRegionStore, SelectedChannelStore, SelfPresenceStore, StreamRTCConnectionStore, UserSettingsProtoStore); this.syncWith([MediaEngineStore], handleMediaEngineChange); this.syncWith([SelfPresenceStore], handleLocalPresenceChange); } getSocket() { return _GatewaySocketSingleton.socket; } isTryingToConnect() { return !_GatewaySocketSingleton.socket.isClosed(); } isConnected() { return _GatewaySocketSingleton.socket.isSessionEstablished(); } isConnectedOrOverlay() { return _GatewaySocketSingleton.socket.isSessionEstablished() || false; } lastTimeConnectedChanged() { return c2996_20; } } const gatewayConnectionStore = new GatewayConnectionStore(Dispatcher, { START_SESSION: function handleSessionStart() { let r13; if (_GatewaySocketSingleton.socket.isClosed()) { c2996_19.verbose("Socket is reconnecting because of starting new session"); r13 = _GatewaySocketSingleton.socket.connect(); } else { c2996_19.verbose("Socket is not reconnecting during a new session because it is not closed"); r13 = false; } return r13; }, LOGIN_SUCCESS: function handleSessionRefresh() { c2996_19.verbose("session refresh dispatched", { isEstablished: _GatewaySocketSingleton.socket.isSessionEstablished() }); let r20 = !!_GatewaySocketSingleton.socket.isSessionEstablished(); if (r20) { _GatewaySocketSingleton.socket.close(); r20 = _GatewaySocketSingleton.socket.connect(); } return r20; }, LOGOUT: function handleLogout(a0) { if (a0.isSwitchingAccount) { localPresenceState.handleAccountSwitch(); } c2996_19.verbose("Closing socket because of logout"); _GatewaySocketSingleton.socket.close(); }, CLEAR_CACHES: function handleClearCaches(a0) { if (a0.resetSocket) { _GatewaySocketSingleton.socket.close(); _GatewaySocketSingleton.socket.dispatcher.clear(); _GatewaySocketSingleton.socket.connect(); } return false; }, CONNECTION_OPEN: (a0) => { (function handleConnectionOpen() { return _handleConnectionOpen.apply(this, arguments); })(a0); }, CONNECTION_RESUMED: function handleConnectionResumed() { channelId = null; }, CONNECTION_CLOSED: function handleConnectionClosed() { c2996_19.verbose("connection closed dispatched"); c2996_20 = Date.now(); }, RTC_CONNECTION_STATE: function handleRTCConnectionState(a0) { if (a0.state !== RTCConnectionStates.DISCONNECTED) { return false; } if (a0.willReconnect) { if (a0.streamKey != null) { _GatewaySocketSingleton.socket.streamPing(a0.streamKey); } else { _GatewaySocketSingleton.socket.voiceServerPing(); } } }, VOICE_CHANNEL_SELECT: function handleVoiceChannelSelect(a0) { localVoiceState.update({ guildId: a0.guildId, channelId: a0.channelId }); channelId = a0.lockVoiceStateForResume ? a0.channelId != null ? a0.channelId : null : null; if (isIOS() && state === AppStates.BACKGROUND) { if (a0.channelId == null) { _GatewaySocketSingleton.socket.close(true); } else if (_GatewaySocketSingleton.socket.isClosed()) { setIsPaused(false); _GatewaySocketSingleton.socket.connect(); } } return false; }, VOICE_STATE_UPDATES: function handleVoiceStateUpdates(a0) { return a0.voiceStates.reduce((acc, voiceState) => { if (AuthenticationStore.getId() !== voiceState.userId) { return acc; } if (voiceState.sessionId === sessionId) { if (channelId != null) { c2996_19.verbose("Ignoring voice state for own session due to VSU lock on channel:", channelId); return acc; } localVoiceState.setState({ guildId: voiceState.guildId, channelId: voiceState.channelId }); } else { if (voiceState.guildId !== localVoiceState.guildId) { return acc; } localVoiceState.setState({ guildId: null, channelId: null }); } return true; }, false); }, GUILD_DELETE: function handleGuildDelete(a0) { if (a0.guild.id === localVoiceState.guildId) { localVoiceState.setState({ guildId: null, channelId: null }); } }, CHANNEL_DELETE: function handleChannelDelete(a0) { if (a0.channel.id === localVoiceState.channelId) { localVoiceState.setState({ guildId: null, channelId: null }); } }, CALL_DELETE: function handleCallDelete({ channelId: channelId2 }) { if (channelId2 === localVoiceState.channelId) { if (channelId === channelId2) { return false; } localVoiceState.setState({ guildId: null, channelId: null }); } }, APP_STATE_UPDATE: function handleFocus(a0) { if (isIOS()) { L15: { if (AuthenticationStore.isAuthenticated()) { if (state === AppStates.INACTIVE && a0.state === AppStates.BACKGROUND && localVoiceState.channelId == null) { _GatewaySocketSingleton.socket.close(true); break L15; } if (state === AppStates.BACKGROUND && a0.state === AppStates.ACTIVE && _GatewaySocketSingleton.socket.isClosed()) { setIsPaused(false); _GatewaySocketSingleton.socket.connect(); } } } state = a0.state; } else if (a0.state === AppStates.ACTIVE) { setIsPaused(false); if (AuthenticationStore.isAuthenticated()) { _GatewaySocketSingleton.socket.resetBackoff("App state is active"); } } return false; }, GUILD_MEMBERS_REQUEST: function handleGuildMembersRequest(a0) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { if ("userIds" in a0) { Module12(a0.userIds).chunk(100).forEach((item) => { _GatewaySocketSingleton.socket.requestGuildMembers(a0.guildIds, { userIds: item, presences: !!a0.presences }); }); } else { _GatewaySocketSingleton.socket.requestGuildMembers(a0.guildIds, { query: a0.query, limit: a0.limit, presences: !!a0.presences }); } } return false; }, GUILD_SEARCH_RECENT_MEMBERS: function handleGuildSearchRecentMembers({ guildId, query, continuationToken }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { _GatewaySocketSingleton.socket.searchRecentMembers(guildId, { query, continuationToken }); } }, GUILD_SUBSCRIPTIONS_FLUSH: function handleGuildSubscriptionsFlush({ subscriptions }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { _GatewaySocketSingleton.socket.updateGuildSubscriptions(subscriptions); } return false; }, CALL_CONNECT: function handleCallConnect({ channelId: channelId2 }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { _GatewaySocketSingleton.socket.callConnect(channelId2); } return false; }, CALL_CONNECT_MULTIPLE: function handleCallConnectMultiple({ channelIds }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { channelIds.forEach((channelId) => { _GatewaySocketSingleton.socket.callConnect(channelId); }); } return false; }, STREAM_CREATE: handleClipsFlags, STREAM_START: function handleStreamStart({ streamType, guildId, channelId: channelId2 }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { let r24 = guildId != null ? ChannelStore.getChannel(channelId2)?.rtcRegion : CallStore.getCall(channelId2)?.region; if (r24 == null) { r24 = RTCRegionStore.getPreferredRegion(); } _GatewaySocketSingleton.socket.streamCreate(streamType, guildId, channelId2, r24); } return false; }, STREAM_WATCH: function handleStreamWatch({ streamKey, allowMultiple }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { if (!allowMultiple) { let c14477_0 = StreamRTCConnectionStore.getAllActiveStreamKeys().find((item) => decodeStreamKey(item).ownerId === AuthenticationStore.getId()); StreamRTCConnectionStore.getAllActiveStreamKeys().filter((item) => item !== c14477_0).forEach((item) => { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { _GatewaySocketSingleton.socket.streamDelete(item); } }); } _GatewaySocketSingleton.socket.streamWatch(streamKey); } return false; }, STREAM_STOP: function handleStreamStop({ streamKey }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { _GatewaySocketSingleton.socket.streamDelete(streamKey); } localVoiceState.update(); return false; }, STREAM_SET_PAUSED: function handleStreamSetPaused({ streamKey, paused }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { _GatewaySocketSingleton.socket.streamSetPaused(streamKey, paused); } }, PUSH_NOTIFICATION_CLICK: function handlePushNotificationClick() { _GatewaySocketSingleton.socket.expeditedHeartbeat(5000, "user clicked on notification", true); return false; }, REQUEST_FORUM_UNREADS: function handleRequestForumUnreads(a0) { _GatewaySocketSingleton.socket.requestForumUnreads(a0.guildId, a0.channelId, a0.threads); }, REQUEST_SOUNDBOARD_SOUNDS: function handleRequestSoundboardSounds(a0) { _GatewaySocketSingleton.socket.requestSoundboardSounds(a0.guildIds); }, REMOTE_COMMAND: function handleRemoteCommand({ sessionId: sessionId2, payload }) { if (_GatewaySocketSingleton.socket.isSessionEstablished()) { _GatewaySocketSingleton.socket.remoteCommand(sessionId2, payload); } return false; }, RESET_SOCKET: function handleResetSocket(a0) { if (_GatewaySocketSingleton.socket.connectionState !== ConnectionState.WILL_RECONNECT) { _GatewaySocketSingleton.socket.resetSocketAndClearCacheOnError(a0.args); } }, CLIPS_SETTINGS_UPDATE: handleClipsFlags, RUNNING_GAMES_CHANGE: handleClipsFlags, USER_SETTINGS_PROTO_UPDATE: function handleUserSettingsProtoUpdate(a0) { if (a0.settings.type === UserSettingsTypes.PRELOADED_USER_SETTINGS && a0.settings.proto.clips?.allowVoiceRecording != null) { localVoiceState.update(); } } }); export default gatewayConnectionStore;