/* Metro module 15772; source: modules/multi_account/MultiAccountManager.tsx; dependencies: [6, 7, 15, 17, 18, 1878, 11876, 661, 3, 25, 692, 683, 12491, 694, 4860, 2] */ function _fun121187(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#121187, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:6, offset: 0x025407df, size: 380 bytes, params: 8, frame: 20 const env0_0 = require; const closure = getFastConnectUserId; const Object = global.Object; Object.defineProperty(exports, '__esModule', {value: true}); const env0_4 = importDefault(6) /* metro dependency 6 */; const env0_5 = importDefault(7) /* metro dependency 7 */; const env0_6 = importDefault(15) /* metro dependency 15 */; const env0_7 = importDefault(17) /* metro dependency 17 */; const env0_8 = importDefault(18) /* metro dependency 18 */; const userStore = importDefault(1878) /* metro dependency 1878: UserStore */; const multiAccountStore = importDefault(11876) /* metro dependency 11876: MultiAccountStore */; const env0_11 = (require(661) /* metro dependency 661: Constants */).AnalyticEvents; let value = importDefault(3) /* metro dependency 3: Logger */; value = new value('MultiAccountManager'); value = importDefault(4860) /* metro dependency 4860: AutomaticLifecycleManager */; value = _fun121193(value); (require(2) /* metro dependency 2 */).fileFinishedImporting('modules/multi_account/MultiAccountManager.tsx'); exports.default = value; exports.getMultiAccountManagerState = getMultiAccountManagerState; exports.getFastConnectUserId = closure; } function _isNativeReflectConstruct_121188() { // fn#121188, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:193, offset: 0x0254095b, size: 98 bytes, params: 1, frame: 18 var Boolean; var prototype; var valueOf; var call; var Reflect; var construct; var closure; var value; var error; try { Boolean = global.Boolean; prototype = Boolean.prototype; valueOf = prototype.valueOf; call = valueOf.call; Reflect = global.Reflect; construct = Reflect.construct; Boolean = global.Boolean; closure = function() { }; value = Reflect.apply(construct, Reflect, [Boolean, [], closure]); value = Reflect.apply(call, valueOf, [value]); var result = !value; } catch (error) { } return (_isNativeReflectConstruct_121188_isNativeReflectConstruct = function() { return !!result; })(); } function isDiagnosticsEnabled() { // fn#121191, offset: 0x025409bd, size: 14 bytes, params: 1, frame: 2 return env0_18 && true; } function getFastConnectUserId() { // fn#121192, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:506, offset: 0x025409cb, size: 37 bytes, params: 1, frame: 11 return (require(25) /* metro dependency 25: fast_connect */).getLastFastConnectIdentifyUserId(); } function _fun121193(a0) { // fn#121193, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:594, offset: 0x025409f0, size: 97 bytes, params: 2, frame: 16 const closure = MultiAccountManager; env0_8(closure, a0); return env0_5(closure, [{key: '_initialize', value: value_121211}, {key: '_terminate', value: value_121213}]); } function getMultiAccountManagerState() { // fn#121215, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:4722, offset: 0x02541469, size: 52 bytes, params: 1, frame: 3 return {previousUserId: env0_13, expectedUserId: env0_16, switchLocation: env0_17, isSwitchingAccount: env0_18, hasEverConnected: env0_19}; } function MultiAccountManager({onSwitchStart, onSwitchSuccess, onSwitchError, onTokenSet, onLogout}) { // fn#121194, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:606, offset: 0x02540a51, size: 250 bytes, params: 2, frame: 25 var environment; let value = environment.__proto__; env1_4(this, MultiAccountManager); const value3 = env1_7(MultiAccountManager); value = env1_6(this, _isNativeReflectConstruct_121188() ? global.Reflect.construct(value3, [], env1_7(this).constructor) : value3.apply(this, undefined)); value.actions = {LOGOUT: LOGOUT_121195, MULTI_ACCOUNT_SWITCH_START: MULTI_ACCOUNT_SWITCH_START}; value.handleMultiAccountSwitchStart = handleMultiAccountSwitchStart; value.handleConnectionOpen = handleConnectionOpen_121198; value.handleLogout = handleLogout_121210; value.onSwitchStart = onSwitchStart; value.onSwitchSuccess = onSwitchSuccess; value.onSwitchError = onSwitchError; value.onTokenSet = onTokenSet; value.onLogout = onLogout; return value; } function value_121211() { // fn#121211, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:4361, offset: 0x025413e9, size: 69 bytes, params: 1, frame: 15 var environment; const value = environment.__proto__; (importDefault(694) /* metro dependency 694: Dispatcher */).subscribe('CONNECTION_OPEN', _fun121212); this.handleConnectionOpen(); } function value_121213() { // fn#121213, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:4498, offset: 0x0254142e, size: 59 bytes, params: 1, frame: 14 var environment; const value = environment.__proto__; (importDefault(694) /* metro dependency 694: Dispatcher */).unsubscribe('CONNECTION_OPEN', _fun121214); } function MULTI_ACCOUNT_SWITCH_START(a0) { // fn#121196, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:979, owner: MultiAccountManager.MULTI_ACCOUNT_SWITCH_START, offset: 0x02540b4b, size: 23 bytes, params: 2, frame: 11 return env0_0.handleMultiAccountSwitchStart(a0); } function handleMultiAccountSwitchStart(a0) { // fn#121197, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:1050, owner: MultiAccountManager.handleMultiAccountSwitchStart, offset: 0x02540b62, size: 66 bytes, params: 2, frame: 12 const targetUserId = a0.targetUserId; let value = environment.__proto__.__proto__; env2_17 = a0.location; value = require(12491) /* metro dependency 12491: GatewaySocket */; value.setAccountSwitchUserId(a0.targetUserId); } function MultiAccountManagerHandleConnectionOpen() { // fn#121198, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:1156, owner: MultiAccountManager.handleConnectionOpen, offset: 0x02540ba4, size: 379 bytes, params: 1, frame: 18 var environment; var id; var token; var moduleValue2; var setToken; const value = environment.__proto__.__proto__; const currentUser = UserStore.getCurrentUser(); if (currentUser != null) { id = currentUser.id; checkConnectionOpenMismatch(id); if (env2_13 != null) { if (env2_13 !== currentUser.id) { trackAndLogSuccess(currentUser); if (env0_0.onSwitchSuccess != null) { env0_0.onSwitchSuccess(currentUser, env2_15); } } else { trackAndLogFailure(currentUser); if (env0_0.onSwitchError != null) { env0_0.onSwitchError(currentUser); } } } id = currentUser.id; token = (importAll(692) /* metro dependency 692: TokenManager */).getToken(); if (token != null && token !== '') { id = currentUser.id; checkTokenCollisionIntroducedAtWrite(id, token); moduleValue2 = importAll(692) /* metro dependency 692: TokenManager */; setToken = moduleValue2.setToken; id = currentUser.id; Reflect.apply(setToken, moduleValue2, [token, id]); } id = currentUser.id; checkGeneralTokenCollision(id); if (env0_0.onTokenSet != null) { env0_0.onTokenSet(currentUser); } (require(12491) /* metro dependency 12491: GatewaySocket */).setAccountSwitchUserId(null); } } function MultiAccountManagerHandleLogout(a0) { // fn#121210, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:3885, owner: MultiAccountManager.handleLogout, offset: 0x02541302, size: 231 bytes, params: 2, frame: 18 var binding; var log; var object2; if (env0_0.onLogout != null) { env0_0.onLogout(a0); } if (a0.isSwitchingAccount) { binding = env2_14; log = binding.log; object2 = {current_user_id: env2_12, expected_user_id: env2_16}; object2.fast_connect_user_id = getFastConnectUserId(); object2.switch_origin = env2_17; Reflect.apply(log, binding, ['logout from account switch', object2]); if (env0_0.onSwitchStart != null) { env0_0.onSwitchStart(); } env2_15 = !!a0.goHomeAfterSwitching; } else { (importAll(692) /* metro dependency 692: TokenManager */).removeToken(env2_12); } } function checkConnectionOpenMismatch(a0) { // fn#121199, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:1199, owner: MultiAccountManager.handleConnectionOpen.checkConnectionOpenMismatch, offset: 0x02540d1f, size: 315 bytes, params: 2, frame: 20 var r2; var r3; var token; var token2; var object2; var defaultImport; if (isDiagnosticsEnabled()) { token = (importAll(692) /* metro dependency 692: TokenManager */).getToken(a0); token2 = (importAll(692) /* metro dependency 692: TokenManager */).getToken(); r2 = env3_16 != null && a0 !== env3_16; r3 = token != null && token2 != null; r3 = r3 && token !== token2; if (r3) { object2 = {from_user_id: env3_13, to_user_id: env3_16, actual_user_id: a0}; object2.fast_connect_user_id = getFastConnectUserId(); object2.linked_user_ids = MultiAccountStore.getUsers().map(function(a0) { return a0.id; }); object2.has_ever_connected = env3_19; object2.user_token_exists = token != null; object2.main_token_exists = token2 != null; object2.is_token_mismatch = r3; object2.is_user_mismatch = r2; object2.switch_origin = env3_17; env3_14.log('Token mismatch on account switch connection open', object2); defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */; defaultImport.track(AnalyticEvents.MULTI_ACCOUNT_SWITCH_READY_MISMATCH, object2); } else if (r2) { object2 = {from_user_id: env3_13, to_user_id: env3_16, actual_user_id: a0}; object2.fast_connect_user_id = getFastConnectUserId(); object2.linked_user_ids = MultiAccountStore.getUsers().map(_fun121200); object2.has_ever_connected = env3_19; object2.user_token_exists = token != null; object2.main_token_exists = token2 != null; object2.is_token_mismatch = r3; object2.is_user_mismatch = r2; object2.switch_origin = env3_17; env3_14.log('Token mismatch on account switch connection open', object2); defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */; defaultImport.track(AnalyticEvents.MULTI_ACCOUNT_SWITCH_READY_MISMATCH, object2); } } } function trackAndLogSuccess({id}) { // fn#121201, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:1786, owner: MultiAccountManager.handleConnectionOpen.trackAndLogSuccess, offset: 0x02540e5a, size: 183 bytes, params: 2, frame: 15 const object2 = {}; object2.from_user_id = env3_13; object2.to_user_id = env3_16; object2.actual_user_id = id; object2.fast_connect_user_id = getFastConnectUserId(); object2.linked_user_ids = MultiAccountStore.getUsers().map(function(a0) { return a0.id; }); object2.has_ever_connected = env3_19; object2.switch_origin = env3_17; const defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */; const track = defaultImport.track; const MULTI_ACCOUNT_SWITCH_SUCCESS = AnalyticEvents.MULTI_ACCOUNT_SWITCH_SUCCESS; Reflect.apply(track, defaultImport, [MULTI_ACCOUNT_SWITCH_SUCCESS, object2]); if (isDiagnosticsEnabled()) { env3_14.log('Account switch success', object2); } } function trackAndLogFailure({id}) { // fn#121203, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:2164, owner: MultiAccountManager.handleConnectionOpen.trackAndLogFailure, offset: 0x02540f11, size: 183 bytes, params: 2, frame: 15 const object2 = {}; object2.from_user_id = env3_13; object2.to_user_id = env3_16; object2.actual_user_id = id; object2.fast_connect_user_id = getFastConnectUserId(); object2.linked_user_ids = MultiAccountStore.getUsers().map(function(a0) { return a0.id; }); object2.has_ever_connected = env3_19; object2.switch_origin = env3_17; const defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */; const track = defaultImport.track; const MULTI_ACCOUNT_SWITCH_FAILURE = AnalyticEvents.MULTI_ACCOUNT_SWITCH_FAILURE; Reflect.apply(track, defaultImport, [MULTI_ACCOUNT_SWITCH_FAILURE, object2]); if (isDiagnosticsEnabled()) { env3_14.log('Account switch failure', object2); } } function checkTokenCollisionIntroducedAtWrite(a0, a1) { // fn#121205, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:2594, owner: MultiAccountManager.handleConnectionOpen.checkTokenCollisionIntroducedAtWrite, offset: 0x02540fc8, size: 276 bytes, params: 3, frame: 18 var set; var items3; var items2; var users; var object2; var defaultImport; const env0_0 = a0; const env0_1 = a1; if (isDiagnosticsEnabled()) { set = new global.Set(); items3 = []; items2 = []; users = MultiAccountStore.getUsers(); var env0_5 = false; users.forEach(_fun121206); if (items3.length !== 0) { object2 = {from_user_id: env3_13, to_user_id: env3_16, actual_user_id: a0}; object2.fast_connect_user_id = getFastConnectUserId(); object2.linked_user_ids = items2; object2.colliding_user_ids = items3; object2.has_ever_connected = env3_19; object2.is_already_corrupted = env0_5; object2.switch_origin = env3_17; env3_14.log('setToken about to introduce per-user token collision', object2); defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */; defaultImport.track(AnalyticEvents.MULTI_ACCOUNT_SWITCH_TOKEN_COLLISION_WRITE, object2); } } } function checkGeneralTokenCollision(a0) { // fn#121207, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:3214, owner: MultiAccountManager.handleConnectionOpen.checkGeneralTokenCollision, offset: 0x0254116c, size: 115 bytes, params: 2, frame: 14 var environment; var map; const env0_0 = a0; const value = environment.__proto__.__proto__.__proto__; if (isDiagnosticsEnabled()) { var env0_1 = []; map = new global.Map(); MultiAccountStore.getUsers().forEach(_fun121208); map.forEach(_fun121209); } } function _fun121206({id}) { // fn#121206, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:2730, offset: 0x025410dc, size: 144 bytes, params: 2, frame: 14 let binding = env0_4; binding.push(id); const token = (importAll(692) /* metro dependency 692: TokenManager */).getToken(id); if (id !== env0_0 && token === require) { env0_3.push(id); } if (token != null) { binding = env0_2; if (!binding.has(token)) { env0_2.add(token); } } } function _fun121208({id}) { // fn#121208, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:3321, offset: 0x025411df, size: 124 bytes, params: 2, frame: 16 var r3; let binding = env0_1; binding.push(id); const token = (importAll(692) /* metro dependency 692: TokenManager */).getToken(id); if (token != null) { if (token !== '') { binding = env0_2; r3 = binding.get(token) ?? []; r3.push(id); binding = env0_2; binding.set(token, r3); } } } function _fun121209(a0) { // fn#121209, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:15980:3461, offset: 0x0254125b, size: 167 bytes, params: 2, frame: 15 var object2; var value; var defaultImport; if (!(a0.length < 2)) { object2 = {}; value = environment.__proto__.__proto__.__proto__.__proto__; object2.from_user_id = env4_13; object2.to_user_id = env4_16; object2.actual_user_id = env0_0; object2.fast_connect_user_id = getFastConnectUserId(); object2.linked_user_ids = env0_1; object2.colliding_user_ids = a0; object2.has_ever_connected = env4_19; object2.switch_origin = env4_17; env4_14.log('Per-user token collision detected', object2); defaultImport = importDefault(683) /* metro dependency 683: AnalyticsUtils */; defaultImport.track(AnalyticEvents.MULTI_ACCOUNT_SWITCH_TOKEN_COLLISION, object2); } }