[lib] Track session recovery on a per-keyserver basis
Summary:
The currentlyWaitingForNewCookie and serverEndpointCallsWaitingForNewCookie constants are global, which poses a problem. If a single keyserver returns a session invalidation to the client, then while the client is attempting to recover that session, it will treat all keyserver sessions as being in recovery.
This diff switches us to tracking this recovery status on a per-keyserver basis.
Depends on D10680
Test Plan:
I tested this stack using the following procedure:
- I tested primarily on native
- I compiled a dev build and deployed it to an iOS simulator
- I created a brand new account on my local keyserver using the iOS app
- I ran Redux dev tools: cd native && yarn redux-devtools
- I added a 30s sleep at the start of resolveKeyserverSessionInvalidation
- I made KeyserverConnectionsHandler return null so that the socket wouldn’t automatically recover the session prior to my testing
- I killed the app
- I deleted all of the test user’s cookie
- I then opened the app again and navigated to a chat and sent two messages
- By following the Redux monitor, I was able to see that the keyserver session invalidation recovery was successful, and both messages were eventually sent after the 30s sleep concluded
- On web, we don’t support keyserver session invalidation. However, I tested to make sure that the web app still loaded after my changes
Reviewers: tomek, inka, atul
Reviewed By: tomek
Differential Revision: https://phab.comm.dev/D10681