diff --git a/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js b/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js --- a/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js +++ b/lib/keyserver-conn/call-keyserver-endpoint-provider.react.js @@ -138,8 +138,8 @@ ongoingRecoveryAttempt.waitingCalls.push(r), ); }; - // This function is a helper for the next function defined below - const attemptToResolveInvalidation = async ( + // These functions are helpers for cookieInvalidationRecovery, defined below + const attemptToResolveInvalidationHelper = async ( sessionChange: ClientSessionChange, ) => { const newAnonymousCookie = sessionChange.cookie; @@ -151,12 +151,7 @@ keyserverID, ); - const ongoingRecoveryAttempt = - ongoingRecoveryAttemptsRef.current.get(keyserverID); - ongoingRecoveryAttemptsRef.current.delete(keyserverID); - const currentWaitingCalls = ongoingRecoveryAttempt?.waitingCalls ?? []; - - const newCallSingleKeyserverEndpoint = newSessionChange + return newSessionChange ? bindCookieAndUtilsIntoCallSingleKeyserverEndpoint({ ...params, cookie: newSessionChange.cookie, @@ -164,10 +159,32 @@ currentUserInfo: newSessionChange.currentUserInfo, }) : null; - for (const func of currentWaitingCalls) { - func(newCallSingleKeyserverEndpoint); - } - return newCallSingleKeyserverEndpoint; + }; + const attemptToResolveInvalidation = ( + sessionChange: ClientSessionChange, + ) => { + return new Promise( + // eslint-disable-next-line no-async-promise-executor + async (resolve, reject) => { + try { + const newCallSingleKeyserverEndpoint = + await attemptToResolveInvalidationHelper(sessionChange); + const ongoingRecoveryAttempt = + ongoingRecoveryAttemptsRef.current.get(keyserverID); + ongoingRecoveryAttemptsRef.current.delete(keyserverID); + const currentWaitingCalls = + ongoingRecoveryAttempt?.waitingCalls ?? []; + + resolve(newCallSingleKeyserverEndpoint); + + for (const func of currentWaitingCalls) { + func(newCallSingleKeyserverEndpoint); + } + } catch (e) { + reject(e); + } + }, + ); }; // If this function is called, callSingleKeyserverEndpoint got a response // invalidating its cookie, and is wondering if it should just like...