// Metro module 15 (f16). import "../../../utils/checkEnv"; import { AppState, NativeModules } from "react-native"; import { VERSION_TO_FORCE_RESYNCING_ALL_DATA } from "../../app_database/modules/KvCacheVersionConstants"; import Logger from "../../debug/Logger"; import * as _PlatformUtils from "../../../utils/PlatformUtils"; import Module502 from "../../../_bundle/Module502"; import { getSuperProperties } from "../../../_bundle/Module503"; import { describeConnectionReasons } from "../RequestGatewaySocket"; import { getClientCapabilities } from "../GatewayCapabilities"; import { isCacheEnabled } from "../../cache/isCacheEnabled.native"; import Module12710 from "../../../_bundle/Module12710"; import getCachedUseAltGateway_native from "../getCachedUseAltGateway.native"; import createWebSocket_android from "../createWebSocket.android"; import Module10 from "../../../_bundle/Module10"; import TTITracker from "../../tti_analytics/TTITracker"; let c36_7, c36_8; export function createFastConnectSocket() { if (window.WebSocket != null) { const r12 = _PlatformUtils.isAndroid() ? Module12710.getConstants().supportsZstd : NativeModules.DCDCompressionManager.supportsZstd; const r16 = r12 ? "zstd-stream" : "zlib-stream"; let GATEWAY_ALT_ENDPOINT = window.GLOBAL_ENV.GATEWAY_ALT_ENDPOINT; if (!(getCachedUseAltGateway_native() && GATEWAY_ALT_ENDPOINT != null)) { GATEWAY_ALT_ENDPOINT = window.GLOBAL_ENV.GATEWAY_ENDPOINT; } let c12108_1; const gateway = `${GATEWAY_ALT_ENDPOINT}/?encoding=json&v=${window.GLOBAL_ENV.API_VERSION}&compress=${r16}`; c36_7.log("[FAST CONNECT] " + gateway); let c12108_0 = Date.now(); const webSocket_android = createWebSocket_android(gateway); const r60 = parseFloat(webSocket_android._socketId); if (isNaN(r60)) { c36_7.log("[FAST CONNECT] Unable to create socketId from NaN value ", webSocket_android._socketId); } else { const isAndroid = _PlatformUtils.isAndroid(); if (r12) { if (isAndroid) { Module12710.enableZstdStreamSupport(r60); } else { NativeModules.DCDCompressionManager.enableZstdStreamSupport(r60, 0); } } else if (isAndroid) { Module12710.enableZlibStreamSupport(r60); } else { NativeModules.DCDCompressionManager.enableZlibStreamSupport(r60); } const state = { open: false, gateway, identify: false, messages: [], clientState: null, userId: null }; c12108_1 = state; webSocket_android.onopen = () => { Module10.mark("🌐", "Fastconnect socket opened"); const r9 = Date.now() - c12108_0; c36_7.log(`connected and identified in ${r9}ms didIdentify:${c12108_1.identify}`); c12108_1.open = true; }; const onerror = () => { Module10.mark("🌐", "Fastconnect socket close"); window._ws = null; }; webSocket_android.onerror = onerror; webSocket_android.onclose = onerror; webSocket_android.onmessage = (a0) => { Module10.mark("🌐", "Fastconnect socket message"); c12108_1.messages.push(a0); }; window._ws = { ws: webSocket_android, state }; Module10.mark("🌐", "Fastconnect socket created"); } } else { c36_7.log("Skipping fast_connect because `window.WebSocket` does not exist."); } } c36_7 = new Logger("FAST CONNECT"); c36_7.info("initial app state (import time)", AppState.currentState); c36_8 = null; createFastConnectSocket(); export function closeFastConnectSocket() { if (window._ws != null) { window._ws.ws.close(); window._ws = null; c36_8 = null; } } export function getLastFastConnectIdentifyUserId() { return c36_8; } export function identifyWebSocket() { if (window._ws != null) { TTITracker.beginFastConnect.measure(() => { let installation_id, useChannelObfuscation2; const token = TTITracker.loadFastConnectNativeModule.measure(() => { let r10; if (_PlatformUtils.isAndroid()) { let token = Module502.getConstants().token; if (token == null) { token = null; } r10 = token; } else { r10 = NativeModules.DCDFastConnectManager.token; } return r10; }); if (token != null && token !== "") { const _ws = window._ws; const { ws, state } = _ws; const _socketId = ws._socketId; let r15 = _PlatformUtils.isAndroid() ? Module502.getConstants().userId : NativeModules.DCDFastConnectManager.userId; c36_8 = r15 == null ? null : r15; state.userId = r15 == null ? null : r15; if (r15 == null) { r15 = null; } c36_7.info("prepareIdentify: app state: ", AppState.currentState); if (_PlatformUtils.isAndroid()) { let analyticsInstallation = Module502.getConstants().analyticsInstallation; if (analyticsInstallation == null) { analyticsInstallation = null; } installation_id = analyticsInstallation; } else { installation_id = NativeModules.DCDFastConnectManager.analyticsInstallation; } const properties = { ...getSuperProperties(), client_app_state: AppState.currentState, is_fast_connect: true, gateway_connect_reasons: describeConnectionReasons(), ...installation_id != null ? { installation_id } : {} }; if (_PlatformUtils.isAndroid()) { let useChannelObfuscation = Module502.getConstants().useChannelObfuscation; if (useChannelObfuscation == null) { useChannelObfuscation = false; } useChannelObfuscation2 = useChannelObfuscation; } else { useChannelObfuscation2 = NativeModules.DCDFastConnectManager.useChannelObfuscation; if (useChannelObfuscation2 == null) { useChannelObfuscation2 = false; } } const r62 = { token, properties, capabilities: getClientCapabilities({ useChannelObfuscation: useChannelObfuscation2 }), client_state: { guild_versions: {} } }; const r100 = JSON.stringify({ op: 2, d: r62 }); if (_PlatformUtils.isAndroid()) { let r116 = r15 == null ? void 0 : r15.toString(); if (r116 == null) { r116 = null; } Module502.prepareIdentify(r116, r100, parseFloat(_socketId), isCacheEnabled() ? VERSION_TO_FORCE_RESYNCING_ALL_DATA : void 0); } else { NativeModules.DCDFastConnectManager.prepareIdentify(r15, r100, _socketId, isCacheEnabled() ? VERSION_TO_FORCE_RESYNCING_ALL_DATA : null); } const client_state = r62.client_state; state.identify = true; state.clientState = client_state; } else { c36_7.log("Skipping fast_connect because we could not find a token to connect with."); } }); } else { c36_7.log("Skipping identifyWebSocket because socket is null"); } }