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 @@ -21,6 +21,7 @@ sessionIDSelector, } from '../selectors/keyserver-selectors.js'; import { isLoggedInToKeyserver } from '../selectors/user-selectors.js'; +import { useInitialNotificationsEncryptedMessage } from '../shared/crypto-utils.js'; 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'; @@ -229,6 +230,11 @@ const preRequestUserStateRef = React.useRef(preRequestUserState); preRequestUserStateRef.current = preRequestUserState; + // This async function asks the keyserver for its keys, whereas performAuth + // above gets the keyserver's keys from the identity service + const getInitialNotificationsEncryptedMessageForRecovery = + useInitialNotificationsEncryptedMessage(keyserverID); + const dispatch = useDispatch(); const urlPrefix = useSelector(urlPrefixSelector(keyserverID)); const performRecovery = React.useCallback( @@ -256,6 +262,7 @@ urlPrefix, recoveryActionSource, keyserverID, + getInitialNotificationsEncryptedMessageForRecovery, ); if (cancelled) { // TODO: cancellation won't work because above call handles Redux @@ -304,7 +311,13 @@ })(); return [promise, cancel]; }, - [dispatch, cookie, urlPrefix, keyserverID], + [ + dispatch, + cookie, + urlPrefix, + keyserverID, + getInitialNotificationsEncryptedMessageForRecovery, + ], ); const cancelPendingAuth = React.useRef void>(null); 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 @@ -46,7 +46,7 @@ urlPrefix: string, recoveryActionSource: RecoveryActionSource, keyserverID: string, - getInitialNotificationsEncryptedMessage?: ( + getInitialNotificationsEncryptedMessage: ( options?: ?InitialNotifMessageOptions, ) => Promise, ): Promise { diff --git a/lib/utils/config.js b/lib/utils/config.js --- a/lib/utils/config.js +++ b/lib/utils/config.js @@ -19,7 +19,7 @@ dispatchRecoveryAttempt: DispatchRecoveryAttempt, recoveryActionSource: RecoveryActionSource, keyserverID: string, - getInitialNotificationsEncryptedMessage?: ( + getInitialNotificationsEncryptedMessage: ( options?: ?InitialNotifMessageOptions, ) => Promise, ) => Promise, 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 @@ -19,7 +19,7 @@ dispatchRecoveryAttempt: DispatchRecoveryAttempt, recoveryActionSource: RecoveryActionSource, keyserverID: string, - getInitialNotificationsEncryptedMessage?: ( + getInitialNotificationsEncryptedMessage: ( ?InitialNotifMessageOptions, ) => Promise, ) { @@ -27,15 +27,15 @@ if (!keychainCredentials) { return; } - let extraInfo = await nativeLogInExtraInfoSelector(store.getState())(); - if (getInitialNotificationsEncryptedMessage) { - const initialNotificationsEncryptedMessage = - await getInitialNotificationsEncryptedMessage({ + const [baseExtraInfo, initialNotificationsEncryptedMessage] = + await Promise.all([ + nativeLogInExtraInfoSelector(store.getState())(), + getInitialNotificationsEncryptedMessage({ callSingleKeyserverEndpoint, - }); - extraInfo = { ...extraInfo, initialNotificationsEncryptedMessage }; - } + }), + ]); + const extraInfo = { ...baseExtraInfo, initialNotificationsEncryptedMessage }; const { calendarQuery } = extraInfo; await dispatchRecoveryAttempt(