// Metro module 5641 (f5642). import { setPromoEmailConsentState } from "../modules/auth/PromoEmailConsentStore"; import AuthenticationStore from "../stores/AuthenticationStore"; import ConsentStore from "../stores/ConsentStore"; import { AbortCodes, DEVICE_TOKEN, DEVICE_VOIP_TOKEN, Endpoints, Routes } from "../Constants"; import { DEVICE_PUSH_VOIP_PROVIDER, getDevicePushProvider } from "../modules/push_notifications/PushNotificationConstants"; import Logger from "../modules/debug/Logger"; import CrossPlatformNativeUtils_native from "../utils/CrossPlatformNativeUtils.native"; import Dispatcher from "../Dispatcher"; import { getRootNavigationRef } from "../modules/main_tabs_v2/RootNavigationRef.native"; import { transitionTo } from "../modules/routing/router_utils"; import ModalActionCreators from "./ModalActionCreators"; import TrackedHTTPUtils from "../utils/TrackedHTTPUtils"; import { NetworkActionNames } from "../_bundle/Module503"; import { rejectWithMigratedError, HTTPResponseError, HTTP } from "../_bundle/sendRequest"; import { V6OrEarlierAPIError, APIError } from "../errors/index"; import { fetchWebAuthnPasswordlessChallenge } from "../modules/webauthn/WebAuthnActionCreators"; import SignalHelpers_native from "../modules/webauthn/SignalHelpers.native"; import { Storage } from "../_bundle/Module595"; import { getToken } from "../_bundle/setSecondaryToken"; import { HermesBuiltin } from "../_hermes/prelude"; let c3481_4, c3481_16, c3481_17, c3481_18, $mk76574 = function() { return (a0) => { c3481_16.error("Error while dispatching LOGOUT", a0); const DiscordErrors = window.DiscordErrors; if (DiscordErrors != null) { DiscordErrors.softCrash(a0); } throw a0; }; }; const handleLogout = function handleLogout(a0, r8 = Routes.DEFAULT_LOGGED_OUT) { CrossPlatformNativeUtils_native.clearNavigationHistory(); Dispatcher.dispatch({ type: "LOGOUT", ...void 0 }).catch($mk76574()); if (r8 != null) { const rootNavigationRef = getRootNavigationRef(); if (rootNavigationRef != null) { ModalActionCreators.popAll(); rootNavigationRef.reset({ index: 0, routes: [{ name: "auth" }] }); } else { transitionTo(r8, { source: a0 }); } } }; c3481_16 = new Logger("AuthenticationActionCreators"); c3481_17 = null; c3481_18 = { MFA: "MFA", SUCCESS: "SUCCESS" }; const r48 = { startSession: (token) => { Dispatcher.wait(() => { Dispatcher.dispatch({ type: "START_SESSION", token }); }); }, login: function login({ login: login2, password, undelete, source: source4, giftCodeSKUId: giftCodeSKUId2, invite, isMultiAccount }) { Dispatcher.dispatch({ type: "LOGIN", isPasswordAttempt: true }); return TrackedHTTPUtils.post({ url: Endpoints.LOGIN, body: { login: login2, password, undelete, login_source: source4, gift_code_sku_id: giftCodeSKUId2 }, retries: 2, oldFormErrors: true, trackedActionData: { event: NetworkActionNames.USER_LOGIN, properties: { invite_code: invite?.code, is_multi_account: isMultiAccount } }, ...isMultiAccount ? { headers: { authorization: "" } } : {}, rejectWithError: rejectWithMigratedError() }).then(({ body }) => { const { mfa, sms, webauthn, ticket: ticket3, token: token6, backup, user_id, required_actions, totp, login_instance_id } = body; Dispatcher.dispatch({ type: "LOGIN_ATTEMPTED", user_id, required_actions }); if (mfa) { Dispatcher.dispatch({ type: "LOGIN_MFA_STEP", ticket: ticket3, sms, webauthn, totp, backup, loginInstanceId: login_instance_id }); } else if (isMultiAccount) { this.switchAccountToken(token6); } else { Dispatcher.dispatch({ type: "LOGIN_SUCCESS", token: token6 }); } }, (a0) => { const v6OrEarlierAPIError = new V6OrEarlierAPIError(a0); if (a0.body != null) { if (a0.body?.suspended_user_token != null) { Dispatcher.dispatch({ type: "LOGIN_SUSPENDED_USER", suspendedUserToken: a0.body?.suspended_user_token }); throw v6OrEarlierAPIError; } } const code2 = a0.body?.code; if (code2 === AbortCodes.ACCOUNT_SCHEDULED_FOR_DELETION && (password != null && password !== "")) { Dispatcher.dispatch({ type: "LOGIN_ACCOUNT_SCHEDULED_FOR_DELETION", credentials: { login: login2, password } }); } else if (code2 === AbortCodes.ACCOUNT_DISABLED && (password != null && password !== "")) { Dispatcher.dispatch({ type: "LOGIN_ACCOUNT_DISABLED", credentials: { login: login2, password } }); } else if (code2 === AbortCodes.PHONE_VERIFICATION_REQUIRED) { Dispatcher.dispatch({ type: "LOGIN_PHONE_IP_AUTHORIZATION_REQUIRED", credentials: { login: login2, password } }); } else { Dispatcher.dispatch({ type: "LOGIN_FAILURE", error: v6OrEarlierAPIError }); } throw v6OrEarlierAPIError; }); }, loginMFAv2: function loginMFAv2(a0) { const { code: code2, ticket: ticket3, source: source4, giftCodeSKUId: giftCodeSKUId2, isMultiAccount: isMultiAccount2, mfaType } = a0; let loginInstanceId = a0.loginInstanceId; const r21 = { url: Endpoints.LOGIN_MFA(mfaType), body: null, retries: 2, oldFormErrors: true, trackedActionData: null, rejectWithError: true }; if (loginInstanceId == null) { loginInstanceId = AuthenticationStore.getLoginInstanceId(); } r21.body = { code: code2, ticket: ticket3, login_source: source4, gift_code_sku_id: giftCodeSKUId2, login_instance_id: loginInstanceId }; r21.trackedActionData = { event: NetworkActionNames.USER_LOGIN_MFA }; return TrackedHTTPUtils.post(r21).then((result) => { if (isMultiAccount2) { this.switchAccountToken(result.body.token); } else { Dispatcher.dispatch({ type: "LOGIN_SUCCESS", token: result.body.token }); } }).catch((error) => { if (error.body != null && error.body.suspended_user_token != null) { Dispatcher.dispatch({ type: "LOGIN_SUSPENDED_USER", suspendedUserToken: error.body.suspended_user_token }); return void 0; } if (error.body?.code === AbortCodes.MFA_INVALID_CODE) { throw new Error(error.body.message); } throw error; }); }, authenticatePasswordless: async function authenticatePasswordless({ authenticateFunc, conditionalMediationAbortController, source, giftCodeSKUId, isMultiAccount: isMultiAccount3 }) { const _this = this; let c25514_2; let c25514_3 = 0; let c29535_0, c29535_1, c29535_2, c29535_3, c29535_5, c29535_4; try { c29535_0 = void 0; c29535_1 = void 0; c29535_2 = void 0; c29535_3 = void 0; if (conditionalMediationAbortController != null) { conditionalMediationAbortController.abort("Starting non-conditional mediation"); } Dispatcher.dispatch({ type: "PASSWORDLESS_START" }); c25514_3 = 1; c29535_0 = await fetchWebAuthnPasswordlessChallenge(); c29535_1 = c29535_0.challenge; c29535_2 = c29535_0.ticket; c29535_3 = await (0, authenticateFunc)(c29535_1); c25514_3 = 2; await _this.loginWebAuthn({ ticket: c29535_2, credential: c29535_3, source, giftCodeSKUId, isMultiAccount: isMultiAccount3 }); c25514_3 = 0; } catch ($e) { const r38 = $e; let r8 = r38; c25514_2 = r38; let r39 = c25514_3; if (r39 !== 0) { while (true) { if (r39 === 1) { try { const r204 = c25514_2; c25514_3 = 0; c29535_5 = r204; Dispatcher.dispatch({ type: "PASSWORDLESS_FAILURE", error: c29535_5 }); throw c29535_5; } catch (r201) { r8 = r201; c25514_2 = r201; r39 = c25514_3; if (r39 === 0) { break; } } } else { try { const r146 = c25514_2; c25514_3 = 1; c29535_4 = r146; if (c29535_4 instanceof APIError && c29535_4.status != null && c29535_4.status >= 400 && c29535_4.status < 500) { await SignalHelpers_native.signalUnknownCredential(c29535_3); } throw c29535_4; } catch (r143) { r8 = r143; c25514_2 = r143; r39 = c25514_3; if (r39 === 0) { break; } } } } } throw r8; } }, loginWebAuthn: function loginWebAuthn({ ticket: ticket3, credential, source: source4, giftCodeSKUId: giftCodeSKUId2, isMultiAccount: isMultiAccount4 }) { return TrackedHTTPUtils.post({ url: Endpoints.WEBAUTHN_CONDITIONAL_UI_LOGIN, body: { credential, ticket: ticket3, source: source4, giftCodeSKUId: giftCodeSKUId2 }, retries: 1, trackedActionData: { event: NetworkActionNames.USER_LOGIN_PASSWORDLESS }, rejectWithError: true }).then(({ body }) => { const token6 = body.token; Dispatcher.dispatch({ type: "LOGIN_ATTEMPTED", user_id: body.user_id, required_actions: body.required_actions }); if (isMultiAccount4) { this.switchAccountToken(token6); } else { Dispatcher.dispatch({ type: "LOGIN_SUCCESS", token: token6 }); } }).catch((error) => { const r1 = error instanceof HTTPResponseError; let r12 = error; if (r1) { if (error.body.suspended_user_token != null) { Dispatcher.dispatch({ type: "LOGIN_SUSPENDED_USER", suspendedUserToken: error.body.suspended_user_token }); return void 0; } r12 = new APIError(error); } throw r12; }); }, loginToken: function loginToken(token2, r4 = true) { let c14964_0 = r4; Dispatcher.dispatch({ type: "LOGIN" }); return new Promise((c25515_0) => { setImmediate(() => { Dispatcher.dispatch({ type: "LOGIN_SUCCESS", token: token2 }); if (c14964_0) { this.startSession(token2); } c25515_0(); }); }); }, oneTimeLogin: async function oneTimeLogin(ticket) { let r110; const _this2 = this; let c25516_2; let c25516_3 = 0; let c29536_0, c29536_1; try { c29536_0 = void 0; Dispatcher.dispatch({ type: "LOGIN" }); c25516_3 = 1; c29536_0 = (await TrackedHTTPUtils.post({ url: Endpoints.ONE_TIME_LOGIN, body: { ticket }, oldFormErrors: true, trackedActionData: { event: NetworkActionNames.USER_ONE_TIME_LOGIN }, rejectWithError: true })).body.token; if (!c29536_0) { throw new Error("No token in response"); } await _this2.loginToken(c29536_0, false); r110 = c29536_0; c25516_3 = 0; } catch ($e) { const r34 = $e; let r8 = r34; c25516_2 = r34; if (c25516_3 !== 0) { while (true) { try { const r119 = c25516_2; c25516_3 = 0; c29536_1 = r119; Dispatcher.dispatch({ type: "LOGIN_FAILURE", error: new V6OrEarlierAPIError(c29536_1) }); throw c29536_1; } catch (r115) { r8 = r115; c25516_2 = r115; if (c25516_3 === 0) { break; } } } } throw r8; } return r110; }, loginReset: (a0) => { Dispatcher.dispatch({ type: "LOGIN_RESET", isMultiAccount: a0 }); }, loginStatusReset: () => { Dispatcher.dispatch({ type: "LOGIN_STATUS_RESET" }); }, logoutInternal: (a0) => { CrossPlatformNativeUtils_native.clearNavigationHistory(); Dispatcher.dispatch({ type: "LOGOUT", ...a0 }).catch($mk76574()); }, logout: function logout(a0) { let r3 = arguments[1]; if (r3 === void 0) { r3 = Routes.DEFAULT_LOGGED_OUT; } const DEFAULT_LOGGED_OUT = r3; const r11 = arguments[2]; let c14966_2 = r11; const r21 = { url: Endpoints.LOGOUT, body: { provider: getDevicePushProvider(), token: Storage.get(DEVICE_TOKEN), voip_provider: DEVICE_PUSH_VOIP_PROVIDER, voip_token: Storage.get(DEVICE_VOIP_TOKEN) }, oldFormErrors: true, trackedActionData: { event: NetworkActionNames.USER_LOGOUT, properties: { logout_source: a0 } } }; let r41 = r11 != null; if (r41) { let authorization = getToken(r11); if (authorization == null) { authorization = ""; } r41 = { headers: { authorization } }; } HermesBuiltin.copyDataProperties(r21, r41); r21.rejectWithError = rejectWithMigratedError(); return TrackedHTTPUtils.post(r21).finally(() => { if (!(c14966_2 != null && c14966_2 !== AuthenticationStore.getId())) { handleLogout(a0, DEFAULT_LOGGED_OUT); } }); }, switchAccountToken: function switchAccountToken(a0) { let goHomeAfterSwitching = arguments[1]; if (goHomeAfterSwitching === void 0) { goHomeAfterSwitching = true; } const token6 = AuthenticationStore.getToken(); c3481_16.log("Switching accounts", { wasLoggedIn: token6 != null, tokenHasChanged: a0 !== token6 }); const r19 = { isSwitchingAccount: true, goHomeAfterSwitching }; CrossPlatformNativeUtils_native.clearNavigationHistory(); Dispatcher.dispatch({ type: "LOGOUT", ...r19 }).catch($mk76574()); return this.loginToken(a0, true).then(() => { const isCorrectToken = a0 === AuthenticationStore.getToken(); c3481_16.log("Switched accounts finished", { isCorrectToken }); return isCorrectToken; }); }, verifySSOToken: function verifySSOToken(c14968_0, r6 = Routes.DEFAULT_LOGGED_OUT) { const DEFAULT_LOGGED_OUT2 = r6; return HTTP.get({ url: Endpoints.ME, oldFormErrors: true, rejectWithError: true }).catch(() => { handleLogout(c14968_0, DEFAULT_LOGGED_OUT2); }); }, verify: async (token3) => { let c25517_1; c25517_1 = void 0; let c29537_0 = await TrackedHTTPUtils.post({ url: Endpoints.VERIFY, body: { token: token3 }, trackedActionData: { event: NetworkActionNames.USER_VERIFY }, rejectWithError: rejectWithMigratedError() }); Dispatcher.dispatch({ type: "LOGIN_SUCCESS", token: c29537_0.body.token }); return c29537_0.body.user_id; }, authorizePayment: (a0) => TrackedHTTPUtils.post({ url: Endpoints.AUTHORIZE_PAYMENT, body: { token: a0 }, trackedActionData: { event: NetworkActionNames.AUTHORIZE_PAYMENT }, rejectWithError: true }), authorizeIPAddress: (a0) => TrackedHTTPUtils.post({ url: Endpoints.AUTHORIZE_IP, body: { token: a0 }, trackedActionData: { event: NetworkActionNames.AUTHORIZE_IP }, rejectWithError: true }), verifyResend: () => TrackedHTTPUtils.post({ url: Endpoints.VERIFY_RESEND, oldFormErrors: true, trackedActionData: { event: NetworkActionNames.USER_VERIFY_RESEND }, rejectWithError: rejectWithMigratedError() }), resetPassword: async (token4, password2, source2) => { let r119; let c25518_2; let c25518_3 = 0; let c29538_0, c29538_1, c29538_2, c29538_3, c29538_4, c29538_5, c29538_6, c29538_7, c29538_8, c29538_9; try { c29538_0 = void 0; c29538_1 = void 0; c29538_2 = void 0; c29538_3 = void 0; c29538_4 = void 0; c29538_5 = void 0; c29538_6 = void 0; c29538_7 = void 0; c29538_8 = void 0; Dispatcher.dispatch({ type: "LOGIN" }); const body = { token: token4, password: password2, source: source2 }; const push_token = Storage.get(DEVICE_TOKEN); const devicePushProvider = getDevicePushProvider(); if (devicePushProvider != null && push_token != null) { body.push_provider = devicePushProvider; body.push_token = push_token; } const push_voip_token = Storage.get(DEVICE_VOIP_TOKEN); if (DEVICE_PUSH_VOIP_PROVIDER != null && push_voip_token != null) { body.push_voip_provider = DEVICE_PUSH_VOIP_PROVIDER; body.push_voip_token = push_voip_token; } c25518_3 = 1; c29538_0 = (await TrackedHTTPUtils.post({ url: Endpoints.RESET_PASSWORD, body, oldFormErrors: true, trackedActionData: { event: NetworkActionNames.USER_RESET_PASSWORD }, rejectWithError: rejectWithMigratedError() })).body; c29538_1 = c29538_0.mfa; c29538_2 = c29538_0.sms; c29538_3 = c29538_0.webauthn; c29538_4 = c29538_0.ticket; c29538_5 = c29538_0.token; c29538_6 = c29538_0.backup; c29538_7 = c29538_0.totp; const r113 = c29538_1; r119 = { result: r113 ? c3481_18.MFA : c3481_18.SUCCESS, sms: c29538_2, webauthn: c29538_3, ticket: c29538_4, token: c29538_5, backup: c29538_6, totp: c29538_7 }; c25518_3 = 0; } catch ($e) { const r28 = $e; let r8 = r28; c25518_2 = r28; if (c25518_3 !== 0) { while (true) { try { const r134 = c25518_2; c25518_3 = 0; c29538_9 = r134; c29538_8 = new V6OrEarlierAPIError(c29538_9); Dispatcher.dispatch({ type: "LOGIN_FAILURE", error: c29538_8 }); throw c29538_8; } catch (r130) { r8 = r130; c25518_2 = r130; if (c25518_3 === 0) { break; } } } } throw r8; } return r119; }, resetPasswordMFAv2: async ({ method, code, ticket: ticket2, password: password3, token: token5, source: source3 }) => { Dispatcher.dispatch({ type: "LOGIN_MFA" }); return (await TrackedHTTPUtils.post({ url: Endpoints.RESET_PASSWORD, body: { code, ticket: ticket2, password: password3, token: token5, source: source3, method }, oldFormErrors: true, trackedActionData: { event: NetworkActionNames.USER_RESET_PASSWORD, properties: { mfa: true } }, rejectWithError: true })).body.token; }, forgotPassword: async (login3) => { let method2; let c25520_2; let c25520_3 = 0; let c29539_0, c29539_1, c29539_2; try { c29539_0 = void 0; c29539_1 = void 0; Dispatcher.dispatch({ type: "FORGOT_PASSWORD_REQUEST" }); c25520_3 = 1; c29539_0 = await TrackedHTTPUtils.post({ url: Endpoints.FORGOT_PASSWORD, body: { login: login3 }, oldFormErrors: true, trackedActionData: { event: NetworkActionNames.FORGOT_PASSWORD }, rejectWithError: rejectWithMigratedError() }); Dispatcher.dispatch({ type: "FORGOT_PASSWORD_SENT" }); method2 = c29539_0.body.method; c25520_3 = 0; } catch ($e) { const r27 = $e; let r8 = r27; c25520_2 = r27; if (c25520_3 !== 0) { while (true) { try { const r93 = c25520_2; c25520_3 = 0; c29539_2 = r93; c29539_1 = new V6OrEarlierAPIError(c29539_2); if (c29539_1.code !== AbortCodes.PHONE_VERIFICATION_REQUIRED) { Dispatcher.dispatch({ type: "LOGIN_FAILURE", error: c29539_1 }); throw c29539_1; } Dispatcher.dispatch({ type: "LOGIN_PASSWORD_RECOVERY_PHONE_VERIFICATION", credentials: { login: login3 } }); } catch (r89) { r8 = r89; c25520_2 = r89; if (c25520_3 === 0) { break; } continue; } return false; } } throw r8; } return method2; }, setFingerprint: (a0) => { Dispatcher.dispatch({ type: "FINGERPRINT", fingerprint: a0 }); }, getExperiments: (a0) => { Dispatcher.dispatch({ type: "EXPERIMENTS_FETCH", withGuildExperiments: a0 }); }, getLocationMetadata: () => { let r25; if (c3481_17 != null) { r25 = c3481_17; } else { clearTimeout(c3481_4); c3481_4 = setTimeout(() => { Dispatcher.dispatch({ type: "SET_CONSENT_REQUIRED", consentRequired: true }); }, 5000); r25 = HTTP.get({ url: Endpoints.AUTH_LOCATION_METADATA, retries: 2, oldFormErrors: true, rejectWithError: true }).then((result) => { clearTimeout(c3481_4); if (ConsentStore.getAuthenticationConsentRequired() == null) { let consentRequired = result == null ? void 0 : result.body?.consent_required; if (consentRequired == null) { consentRequired = true; } Dispatcher.dispatch({ type: "SET_CONSENT_REQUIRED", consentRequired }); } let countryCode = result == null ? void 0 : result.body?.country_code; if (countryCode == null) { countryCode = void 0; } Dispatcher.dispatch({ type: "SET_LOCATION_METADATA", countryCode }); c3481_17 = null; if ((result == null ? void 0 : result.body?.promotional_email_opt_in) != null) { const promotional_email_opt_in = result.body.promotional_email_opt_in; setPromoEmailConsentState({ required: promotional_email_opt_in.required, checked: promotional_email_opt_in.pre_checked, preChecked: promotional_email_opt_in.pre_checked }); } }, () => { clearTimeout(c3481_4); Dispatcher.dispatch({ type: "SET_CONSENT_REQUIRED", consentRequired: true }); c3481_17 = null; }); c3481_17 = r25; } return r25; }, closeSuspendedUser: () => { Dispatcher.dispatch({ type: "CLOSE_SUSPENDED_USER" }); } }; export default r48; export { c3481_18 as PasswordResetResult };