diff --git a/keyserver/src/responders/user-responders.js b/keyserver/src/responders/user-responders.js --- a/keyserver/src/responders/user-responders.js +++ b/keyserver/src/responders/user-responders.js @@ -30,7 +30,7 @@ import { userSettingsTypes, notificationTypeValues, - logInActionSources, + authActionSources, } from 'lib/types/account-types.js'; import { type ClientAvatar, @@ -453,7 +453,7 @@ calendarQuery: t.maybe(entryQueryInputValidator), deviceTokenUpdateRequest: t.maybe(deviceTokenUpdateRequestInputValidator), platformDetails: tPlatformDetails, - source: t.maybe(t.enums.of(values(logInActionSources))), + source: t.maybe(t.enums.of(values(authActionSources))), // We include `primaryIdentityPublicKey` to avoid breaking // old clients, but we no longer do anything with it. primaryIdentityPublicKey: t.maybe(tRegex(primaryIdentityPublicKeyRegex)), @@ -710,7 +710,7 @@ initialContentEncryptedMessage: t.String, initialNotificationsEncryptedMessage: t.String, doNotRegister: t.Boolean, - source: t.maybe(t.enums.of(values(logInActionSources))), + source: t.maybe(t.enums.of(values(authActionSources))), }); async function keyserverAuthResponder( diff --git a/lib/actions/siwe-actions.js b/lib/actions/siwe-actions.js --- a/lib/actions/siwe-actions.js +++ b/lib/actions/siwe-actions.js @@ -78,7 +78,7 @@ }, userInfos, updatesCurrentAsOf: { [authoritativeKeyserverID()]: response.serverTime }, - logInActionSource: logInActionSources.logInFromNativeSIWE, + authActionSource: logInActionSources.logInFromNativeSIWE, notAcknowledgedPolicies: response.notAcknowledgedPolicies, }; }; diff --git a/lib/actions/user-actions.js b/lib/actions/user-actions.js --- a/lib/actions/user-actions.js +++ b/lib/actions/user-actions.js @@ -307,7 +307,7 @@ const watchedIDs = threadWatcher.getWatchedIDs(); const { - logInActionSource, + authActionSource, calendarQuery, keyserverData, deviceTokenUpdateInput, @@ -335,7 +335,7 @@ keyserverData[keyserverID].initialContentEncryptedMessage, initialNotificationsEncryptedMessage: keyserverData[keyserverID].initialNotificationsEncryptedMessage, - source: logInActionSource, + source: authActionSource, }; } @@ -398,7 +398,7 @@ messagesResult, userInfos, updatesCurrentAsOf, - logInActionSource: keyserverAuthInfo.logInActionSource, + authActionSource: keyserverAuthInfo.authActionSource, notAcknowledgedPolicies: responses[authoritativeKeyserverID()].notAcknowledgedPolicies, preRequestUserInfo, @@ -533,7 +533,7 @@ async logInInfo => { const watchedIDs = threadWatcher.getWatchedIDs(); const { - logInActionSource, + authActionSource, calendarQuery, keyserverIDs: inputKeyserverIDs, ...restLogInInfo @@ -555,7 +555,7 @@ ...restLogInInfo, deviceTokenUpdateRequest: logInInfo.deviceTokenUpdateRequest[keyserverID], - source: logInActionSource, + source: authActionSource, watchedIDs: watchedIDsPerKeyserver[keyserverID] ?? [], calendarQuery: calendarQueryPerKeyserver[keyserverID], platformDetails: getConfig().platformDetails, @@ -621,7 +621,7 @@ messagesResult, userInfos, updatesCurrentAsOf, - logInActionSource: logInInfo.logInActionSource, + authActionSource: logInInfo.authActionSource, notAcknowledgedPolicies: responses[authoritativeKeyserverID()].notAcknowledgedPolicies, }; diff --git a/lib/components/keyserver-connection-handler.js b/lib/components/keyserver-connection-handler.js --- a/lib/components/keyserver-connection-handler.js +++ b/lib/components/keyserver-connection-handler.js @@ -24,7 +24,10 @@ import { IdentityClientContext } from '../shared/identity-client-context.js'; import { OlmSessionCreatorContext } from '../shared/olm-session-creator-context.js'; import type { BaseSocketProps } from '../socket/socket.react.js'; -import { logInActionSources } from '../types/account-types.js'; +import { + logInActionSources, + recoveryActionSources, +} from '../types/account-types.js'; import { genericCookieInvalidation } from '../types/session-types.js'; import { authoritativeKeyserverID } from '../utils/authoritative-keyserver.js'; import { useDispatchActionPromise } from '../utils/redux-promise-utils.js'; @@ -145,7 +148,7 @@ doNotRegister: false, calendarQuery, deviceTokenUpdateInput, - logInActionSource: process.env.BROWSER + authActionSource: process.env.BROWSER ? logInActionSources.keyserverAuthFromWeb : logInActionSources.keyserverAuthFromNative, keyserverData: { @@ -249,7 +252,7 @@ dispatch, cookie, urlPrefix, - logInActionSources.cookieInvalidationResolutionAttempt, + recoveryActionSources.cookieInvalidationResolutionAttempt, keyserverID, ); if (cancelled) { @@ -269,7 +272,7 @@ sessionChange, userStateBeforeRecovery, null, - logInActionSources.cookieInvalidationResolutionAttempt, + recoveryActionSources.cookieInvalidationResolutionAttempt, keyserverID, ); } @@ -288,7 +291,7 @@ genericCookieInvalidation, userStateBeforeRecovery, null, - logInActionSources.cookieInvalidationResolutionAttempt, + recoveryActionSources.cookieInvalidationResolutionAttempt, keyserverID, ); } finally { diff --git a/lib/keyserver-conn/keyserver-conn-types.js b/lib/keyserver-conn/keyserver-conn-types.js --- a/lib/keyserver-conn/keyserver-conn-types.js +++ b/lib/keyserver-conn/keyserver-conn-types.js @@ -1,7 +1,7 @@ // @flow import type { - LogInActionSource, + AuthActionSource, LogInStartingPayload, LogInResult, } from '../types/account-types.js'; @@ -39,7 +39,7 @@ sessionChange: ClientSessionChange, preRequestUserState: ?PreRequestUserState, error: ?string, - logInActionSource: ?LogInActionSource, + authActionSource: ?AuthActionSource, keyserverID: string, ) { dispatch({ @@ -48,7 +48,7 @@ sessionChange, preRequestUserState, error, - logInActionSource, + authActionSource, keyserverID, }, }); diff --git a/lib/keyserver-conn/recovery-utils.js b/lib/keyserver-conn/recovery-utils.js --- a/lib/keyserver-conn/recovery-utils.js +++ b/lib/keyserver-conn/recovery-utils.js @@ -3,7 +3,7 @@ import { type ActionTypes, setNewSession } from './keyserver-conn-types.js'; import type { InitialNotifMessageOptions } from '../shared/crypto-utils.js'; import type { - LogInActionSource, + RecoveryActionSource, LogInStartingPayload, LogInResult, } from '../types/account-types.js'; @@ -44,7 +44,7 @@ dispatch: Dispatch, cookie: ?string, urlPrefix: string, - logInActionSource: LogInActionSource, + recoveryActionSource: RecoveryActionSource, keyserverID: string, getInitialNotificationsEncryptedMessage?: ( keyserverID: string, @@ -73,7 +73,7 @@ sessionChange, null, error, - logInActionSource, + recoveryActionSource, keyserverID, ); }; @@ -134,7 +134,10 @@ promise: Promise, inputStartingPayload: LogInStartingPayload, ) => { - const startingPayload = { ...inputStartingPayload, logInActionSource }; + const startingPayload = { + ...inputStartingPayload, + authActionSource: recoveryActionSource, + }; void dispatch( wrapActionPromise(actionTypes, promise, null, startingPayload), ); @@ -144,7 +147,7 @@ boundCallSingleKeyserverEndpoint, boundCallKeyserverEndpoint, dispatchRecoveryAttempt, - logInActionSource, + recoveryActionSource, keyserverID, getInitialNotificationsEncryptedMessage, ); diff --git a/lib/reducers/calendar-filters-reducer.test.js b/lib/reducers/calendar-filters-reducer.test.js --- a/lib/reducers/calendar-filters-reducer.test.js +++ b/lib/reducers/calendar-filters-reducer.test.js @@ -194,7 +194,7 @@ }, // only updatesCurrentAsOf is relevant to this test updatesCurrentAsOf: { [keyserverToRemove1]: 5, [keyserverToRemove2]: 5 }, - logInActionSource: 'SOCKET_AUTH_ERROR_RESOLUTION_ATTEMPT', + authActionSource: 'SOCKET_AUTH_ERROR_RESOLUTION_ATTEMPT', }; expect( diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js --- a/lib/reducers/message-reducer.js +++ b/lib/reducers/message-reducer.js @@ -75,7 +75,7 @@ import threadWatcher from '../shared/thread-watcher.js'; import { unshimMessageInfos } from '../shared/unshim-utils.js'; import { updateSpecs } from '../shared/updates/update-specs.js'; -import { logInActionSources } from '../types/account-types.js'; +import { recoveryActionSources } from '../types/account-types.js'; import type { Media, Image } from '../types/media-types.js'; import { messageTypes } from '../types/message-types-enum.js'; import { @@ -737,10 +737,10 @@ // then we should keep all local messages in the store // TODO we can't check if the userID changed until ENG-6126 if ( - action.payload.logInActionSource === - logInActionSources.cookieInvalidationResolutionAttempt || - action.payload.logInActionSource === - logInActionSources.socketAuthErrorResolutionAttempt + action.payload.authActionSource === + recoveryActionSources.cookieInvalidationResolutionAttempt || + action.payload.authActionSource === + recoveryActionSources.socketAuthErrorResolutionAttempt ) { const localMessages = Object.values(messageStore.messages).filter( rawMessageInfo => messageID(rawMessageInfo).startsWith(localIDPrefix), diff --git a/lib/shared/session-utils.js b/lib/shared/session-utils.js --- a/lib/shared/session-utils.js +++ b/lib/shared/session-utils.js @@ -7,8 +7,8 @@ sessionIDSelector, } from '../selectors/keyserver-selectors.js'; import { - logInActionSources, - type LogInActionSource, + recoveryActionSources, + type AuthActionSource, } from '../types/account-types.js'; import type { AppState } from '../types/redux-types.js'; import type { @@ -87,12 +87,12 @@ function invalidSessionRecovery( currentReduxState: AppState, actionCurrentUserInfo: ?CurrentUserInfo, - logInActionSource: ?LogInActionSource, + authActionSource: ?AuthActionSource, ): boolean { if ( - logInActionSource !== - logInActionSources.cookieInvalidationResolutionAttempt && - logInActionSource !== logInActionSources.socketAuthErrorResolutionAttempt + authActionSource !== + recoveryActionSources.cookieInvalidationResolutionAttempt && + authActionSource !== recoveryActionSources.socketAuthErrorResolutionAttempt ) { return false; } diff --git a/lib/socket/socket.react.js b/lib/socket/socket.react.js --- a/lib/socket/socket.react.js +++ b/lib/socket/socket.react.js @@ -29,7 +29,7 @@ clientRequestVisualTimeout, clientRequestSocketTimeout, } from '../shared/timeouts.js'; -import { logInActionSources } from '../types/account-types.js'; +import { recoveryActionSources } from '../types/account-types.js'; import type { CompressedData } from '../types/compression-types.js'; import { type PlatformDetails } from '../types/device-types.js'; import type { CalendarQuery } from '../types/entry-types.js'; @@ -494,7 +494,7 @@ this.props.dispatch, cookie, this.props.urlPrefix, - logInActionSources.socketAuthErrorResolutionAttempt, + recoveryActionSources.socketAuthErrorResolutionAttempt, this.props.keyserverID, this.props.getInitialNotificationsEncryptedMessage, ); @@ -511,8 +511,8 @@ }, preRequestUserState: this.initializedWithUserState, error: null, - logInActionSource: - logInActionSources.socketAuthErrorResolutionAttempt, + authActionSource: + recoveryActionSources.socketAuthErrorResolutionAttempt, keyserverID: this.props.keyserverID, }, }); @@ -651,7 +651,7 @@ sessionChange: { cookieInvalidated: false, sessionID }, preRequestUserState: this.initializedWithUserState, error: null, - logInActionSource: undefined, + authActionSource: undefined, keyserverID: this.props.keyserverID, }, }); diff --git a/lib/types/account-types.js b/lib/types/account-types.js --- a/lib/types/account-types.js +++ b/lib/types/account-types.js @@ -95,7 +95,7 @@ +calendarQuery: CalendarQuery, }; -export const logInActionSources = Object.freeze({ +export const recoveryActionSources = Object.freeze({ cookieInvalidationResolutionAttempt: 'COOKIE_INVALIDATION_RESOLUTION_ATTEMPT', appStartCookieLoggedInButInvalidRedux: 'APP_START_COOKIE_LOGGED_IN_BUT_INVALID_REDUX', @@ -104,20 +104,32 @@ socketAuthErrorResolutionAttempt: 'SOCKET_AUTH_ERROR_RESOLUTION_ATTEMPT', sqliteOpFailure: 'SQLITE_OP_FAILURE', sqliteLoadFailure: 'SQLITE_LOAD_FAILURE', + corruptedDatabaseDeletion: 'CORRUPTED_DATABASE_DELETION', + refetchUserDataAfterAcknowledgment: 'REFETCH_USER_DATA_AFTER_ACKNOWLEDGMENT', +}); + +export type RecoveryActionSource = $Values; + +export const logInActionSources = Object.freeze({ logInFromWebForm: 'LOG_IN_FROM_WEB_FORM', logInFromNativeForm: 'LOG_IN_FROM_NATIVE_FORM', logInFromNativeSIWE: 'LOG_IN_FROM_NATIVE_SIWE', - corruptedDatabaseDeletion: 'CORRUPTED_DATABASE_DELETION', - refetchUserDataAfterAcknowledgment: 'REFETCH_USER_DATA_AFTER_ACKNOWLEDGMENT', keyserverAuthFromNative: 'KEYSERVER_AUTH_FROM_NATIVE', keyserverAuthFromWeb: 'KEYSERVER_AUTH_FROM_WEB', }); export type LogInActionSource = $Values; +export const authActionSources = Object.freeze({ + ...recoveryActionSources, + ...logInActionSources, +}); + +export type AuthActionSource = LogInActionSource | RecoveryActionSource; + export type LogInStartingPayload = { +calendarQuery: CalendarQuery, - +logInActionSource?: LogInActionSource, + +authActionSource?: AuthActionSource, }; export type LogInExtraInfo = { @@ -131,7 +143,7 @@ ...LogInExtraInfo, +username: string, +password: string, - +logInActionSource: LogInActionSource, + +authActionSource: AuthActionSource, +keyserverIDs?: $ReadOnlyArray, }; @@ -143,7 +155,7 @@ +deviceTokenUpdateRequest?: ?DeviceTokenUpdateRequest, +platformDetails: PlatformDetails, +watchedIDs: $ReadOnlyArray, - +source?: LogInActionSource, + +source?: AuthActionSource, +primaryIdentityPublicKey?: empty, +signedIdentityKeysBlob?: SignedIdentityKeysBlob, +initialNotificationsEncryptedMessage?: string, @@ -178,7 +190,7 @@ +userInfos: $ReadOnlyArray, +calendarResult: CalendarResult, +updatesCurrentAsOf: { +[keyserverID: string]: number }, - +logInActionSource: LogInActionSource, + +authActionSource: AuthActionSource, +notAcknowledgedPolicies?: $ReadOnlyArray, }; @@ -189,7 +201,7 @@ +userInfos: $ReadOnlyArray, +calendarResult: CalendarResult, +updatesCurrentAsOf: { +[keyserverID: string]: number }, - +logInActionSource: LogInActionSource, + +authActionSource: AuthActionSource, +notAcknowledgedPolicies?: ?$ReadOnlyArray, +preRequestUserInfo: ?CurrentUserInfo, }; @@ -205,7 +217,7 @@ +doNotRegister: boolean, +calendarQuery: CalendarQuery, +deviceTokenUpdateInput: DeviceTokenUpdateInput, - +logInActionSource: LogInActionSource, + +authActionSource: AuthActionSource, +keyserverData: { +[keyserverID: string]: KeyserverRequestData }, }; @@ -218,7 +230,7 @@ +deviceTokenUpdateRequest?: ?DeviceTokenUpdateRequest, +watchedIDs: $ReadOnlyArray, +platformDetails: PlatformDetails, - +source?: LogInActionSource, + +source?: AuthActionSource, }>; export type UpdatePasswordRequest = { diff --git a/lib/types/session-types.js b/lib/types/session-types.js --- a/lib/types/session-types.js +++ b/lib/types/session-types.js @@ -1,6 +1,6 @@ // @flow -import type { LogInActionSource } from './account-types.js'; +import type { AuthActionSource } from './account-types.js'; import type { CalendarQuery } from './entry-types.js'; import type { MixedRawThreadInfos } from './thread-types.js'; import { @@ -90,7 +90,7 @@ +sessionChange: ClientSessionChange, +preRequestUserState: ?PreRequestUserState, +error: ?string, - +logInActionSource: ?LogInActionSource, + +authActionSource: ?AuthActionSource, +keyserverID: string, }; diff --git a/lib/utils/config.js b/lib/utils/config.js --- a/lib/utils/config.js +++ b/lib/utils/config.js @@ -8,7 +8,7 @@ CallKeyserverEndpoint, } from '../keyserver-conn/keyserver-conn-types.js'; import type { InitialNotifMessageOptions } from '../shared/crypto-utils.js'; -import type { LogInActionSource } from '../types/account-types.js'; +import type { RecoveryActionSource } from '../types/account-types.js'; import type { OlmAPI } from '../types/crypto-types.js'; import type { PlatformDetails } from '../types/device-types.js'; @@ -17,7 +17,7 @@ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint, callKeyserverEndpoint: CallKeyserverEndpoint, dispatchRecoveryAttempt: DispatchRecoveryAttempt, - logInActionSource: LogInActionSource, + recoveryActionSource: RecoveryActionSource, keyserverID: string, getInitialNotificationsEncryptedMessage?: ( keyserverID: string, diff --git a/native/account/legacy-recover-keyserver-session.js b/native/account/legacy-recover-keyserver-session.js --- a/native/account/legacy-recover-keyserver-session.js +++ b/native/account/legacy-recover-keyserver-session.js @@ -6,7 +6,7 @@ CallKeyserverEndpoint, } from 'lib/keyserver-conn/keyserver-conn-types.js'; import type { InitialNotifMessageOptions } from 'lib/shared/crypto-utils.js'; -import type { LogInActionSource } from 'lib/types/account-types.js'; +import type { RecoveryActionSource } from 'lib/types/account-types.js'; import type { CallSingleKeyserverEndpoint } from 'lib/utils/call-single-keyserver-endpoint.js'; import { fetchNativeKeychainCredentials } from './native-credentials.js'; @@ -17,7 +17,7 @@ callSingleKeyserverEndpoint: CallSingleKeyserverEndpoint, callKeyserverEndpoint: CallKeyserverEndpoint, dispatchRecoveryAttempt: DispatchRecoveryAttempt, - logInActionSource: LogInActionSource, + recoveryActionSource: RecoveryActionSource, keyserverID: string, getInitialNotificationsEncryptedMessage?: ( keyserverID: string, @@ -44,7 +44,7 @@ logInRawAction(callKeyserverEndpoint)({ ...keychainCredentials, ...extraInfo, - logInActionSource, + authActionSource: recoveryActionSource, keyserverIDs: [keyserverID], }), { calendarQuery }, diff --git a/native/account/log-in-panel.react.js b/native/account/log-in-panel.react.js --- a/native/account/log-in-panel.react.js +++ b/native/account/log-in-panel.react.js @@ -281,7 +281,7 @@ ...extraInfo, username: this.usernameInputText, password: this.passwordInputText, - logInActionSource: logInActionSources.logInFromNativeForm, + authActionSource: logInActionSources.logInFromNativeForm, }); this.props.setActiveAlert(false); await setNativeCredentials({ diff --git a/native/account/logged-out-modal.react.js b/native/account/logged-out-modal.react.js --- a/native/account/logged-out-modal.react.js +++ b/native/account/logged-out-modal.react.js @@ -25,7 +25,7 @@ } from 'lib/selectors/keyserver-selectors.js'; import { isLoggedIn } from 'lib/selectors/user-selectors.js'; import { useInitialNotificationsEncryptedMessage } from 'lib/shared/crypto-utils.js'; -import { logInActionSources } from 'lib/types/account-types.js'; +import { recoveryActionSources } from 'lib/types/account-types.js'; import type { Dispatch } from 'lib/types/redux-types.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; @@ -432,8 +432,8 @@ } if (!__DEV__) { const actionSource = loggedIn - ? logInActionSources.appStartReduxLoggedInButInvalidCookie - : logInActionSources.appStartCookieLoggedInButInvalidRedux; + ? recoveryActionSources.appStartReduxLoggedInButInvalidCookie + : recoveryActionSources.appStartCookieLoggedInButInvalidRedux; const sessionChange = await resolveKeyserverSessionInvalidation( dispatch, cookie, diff --git a/native/data/sqlite-data-handler.js b/native/data/sqlite-data-handler.js --- a/native/data/sqlite-data-handler.js +++ b/native/data/sqlite-data-handler.js @@ -18,8 +18,8 @@ import { isLoggedIn } from 'lib/selectors/user-selectors.js'; import { useInitialNotificationsEncryptedMessage } from 'lib/shared/crypto-utils.js'; import { - logInActionSources, - type LogInActionSource, + recoveryActionSources, + type RecoveryActionSource, } from 'lib/types/account-types.js'; import { getMessageForException } from 'lib/utils/errors.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; @@ -64,7 +64,7 @@ useInitialNotificationsEncryptedMessage(nativeNotificationsSessionCreator); const callFetchNewCookieFromNativeCredentials = React.useCallback( - async (source: LogInActionSource) => { + async (source: RecoveryActionSource) => { try { await resolveKeyserverSessionInvalidation( dispatch, @@ -151,7 +151,7 @@ } } await callFetchNewCookieFromNativeCredentials( - logInActionSources.corruptedDatabaseDeletion, + recoveryActionSources.corruptedDatabaseDeletion, ); })(); return; @@ -214,7 +214,7 @@ ); } await callFetchNewCookieFromNativeCredentials( - logInActionSources.sqliteLoadFailure, + recoveryActionSources.sqliteLoadFailure, ); } })(); diff --git a/native/redux/redux-setup.js b/native/redux/redux-setup.js --- a/native/redux/redux-setup.js +++ b/native/redux/redux-setup.js @@ -191,20 +191,20 @@ invalidSessionRecovery( state, action.payload.sessionChange.currentUserInfo, - action.payload.logInActionSource, + action.payload.authActionSource, )) || ((action.type === logInActionTypes.success || action.type === siweAuthActionTypes.success) && invalidSessionRecovery( state, action.payload.currentUserInfo, - action.payload.logInActionSource, + action.payload.authActionSource, )) || (action.type === keyserverAuthActionTypes.success && invalidSessionRecovery( state, action.payload.preRequestUserInfo, - action.payload.logInActionSource, + action.payload.authActionSource, )) ) { return state; diff --git a/native/socket.react.js b/native/socket.react.js --- a/native/socket.react.js +++ b/native/socket.react.js @@ -17,7 +17,7 @@ import { accountHasPassword } from 'lib/shared/account-utils.js'; import { useInitialNotificationsEncryptedMessage } from 'lib/shared/crypto-utils.js'; import Socket, { type BaseSocketProps } from 'lib/socket/socket.react.js'; -import { logInActionSources } from 'lib/types/account-types.js'; +import { recoveryActionSources } from 'lib/types/account-types.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; @@ -127,7 +127,7 @@ dispatch, cookie, urlPrefix, - logInActionSources.refetchUserDataAfterAcknowledgment, + recoveryActionSources.refetchUserDataAfterAcknowledgment, keyserverID, getInitialNotificationsEncryptedMessage, ); diff --git a/web/account/traditional-login-form.react.js b/web/account/traditional-login-form.react.js --- a/web/account/traditional-login-form.react.js +++ b/web/account/traditional-login-form.react.js @@ -87,7 +87,7 @@ ...extraInfo, username, password, - logInActionSource: logInActionSources.logInFromWebForm, + authActionSource: logInActionSources.logInFromWebForm, signedIdentityKeysBlob, }); modalContext.popModal();