diff --git a/lib/selectors/socket-selectors.js b/lib/selectors/socket-selectors.js --- a/lib/selectors/socket-selectors.js +++ b/lib/selectors/socket-selectors.js @@ -40,9 +40,9 @@ ) => ( calendarActive: boolean, oneTimeKeyGenerator: ?OneTimeKeyGenerator, - getSignedIdentityKeysBlob: ?() => SignedIdentityKeysBlob, + getSignedIdentityKeysBlob: ?() => Promise, serverRequests: $ReadOnlyArray, -) => $ReadOnlyArray = createSelector( +) => Promise<$ReadOnlyArray> = createSelector( (state: AppState) => state.threadStore.threadInfos, (state: AppState) => state.entryStore.entryInfos, (state: AppState) => state.userStore.userInfos, @@ -55,12 +55,12 @@ currentUserInfo: ?CurrentUserInfo, calendarQuery: (calendarActive: boolean) => CalendarQuery, ) => - ( + async ( calendarActive: boolean, oneTimeKeyGenerator: ?OneTimeKeyGenerator, - getSignedIdentityKeysBlob: ?() => SignedIdentityKeysBlob, + getSignedIdentityKeysBlob: ?() => Promise, serverRequests: $ReadOnlyArray, - ): $ReadOnlyArray => { + ): Promise<$ReadOnlyArray> => { const clientResponses = []; const serverRequestedPlatformDetails = serverRequests.some( request => request.type === serverRequestTypes.PLATFORM_DETAILS, @@ -164,7 +164,7 @@ serverRequest.type === serverRequestTypes.SIGNED_IDENTITY_KEYS_BLOB && getSignedIdentityKeysBlob ) { - const signedIdentityKeysBlob = getSignedIdentityKeysBlob(); + const signedIdentityKeysBlob = await getSignedIdentityKeysBlob(); clientResponses.push({ type: serverRequestTypes.SIGNED_IDENTITY_KEYS_BLOB, signedIdentityKeysBlob, diff --git a/lib/socket/request-response-handler.react.js b/lib/socket/request-response-handler.react.js --- a/lib/socket/request-response-handler.react.js +++ b/lib/socket/request-response-handler.react.js @@ -31,7 +31,7 @@ +removeListener: (listener: SocketListener) => void, +getClientResponses: ( activeServerRequests: $ReadOnlyArray, - ) => $ReadOnlyArray, + ) => Promise<$ReadOnlyArray>, +currentCalendarQuery: () => CalendarQuery, }; type Props = { @@ -69,8 +69,9 @@ }, }); if (this.props.inflightRequests) { - const clientResponses = this.props.getClientResponses(serverRequests); - this.sendAndHandleClientResponsesToServerRequests(clientResponses); + const clientResponsesPromise = + this.props.getClientResponses(serverRequests); + this.sendAndHandleClientResponsesToServerRequests(clientResponsesPromise); } }; @@ -92,9 +93,10 @@ ); } - sendAndHandleClientResponsesToServerRequests( - clientResponses: $ReadOnlyArray, + async sendAndHandleClientResponsesToServerRequests( + clientResponsesPromise: Promise<$ReadOnlyArray>, ) { + const clientResponses = await clientResponsesPromise; if (clientResponses.length === 0) { return; } 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 @@ -90,7 +90,7 @@ +openSocket: () => CommTransportLayer, +getClientResponses: ( activeServerRequests: $ReadOnlyArray, - ) => $ReadOnlyArray, + ) => Promise<$ReadOnlyArray>, +activeThread: ?string, +sessionStateFunc: () => SessionState, +sessionIdentification: SessionIdentification, diff --git a/native/selectors/socket-selectors.js b/native/selectors/socket-selectors.js --- a/native/selectors/socket-selectors.js +++ b/native/selectors/socket-selectors.js @@ -55,16 +55,16 @@ input: NavPlusRedux, ) => ( serverRequests: $ReadOnlyArray, -) => $ReadOnlyArray = createSelector( +) => Promise<$ReadOnlyArray> = createSelector( (input: NavPlusRedux) => getClientResponsesSelector(input.redux), (input: NavPlusRedux) => calendarActiveSelector(input.navContext), ( getClientResponsesFunc: ( calendarActive: boolean, oneTimeKeyGenerator: ?OneTimeKeyGenerator, - getSignedIdentityKeysBlob: ?() => SignedIdentityKeysBlob, + getSignedIdentityKeysBlob: ?() => Promise, serverRequests: $ReadOnlyArray, - ) => $ReadOnlyArray, + ) => Promise<$ReadOnlyArray>, calendarActive: boolean, ) => (serverRequests: $ReadOnlyArray) => diff --git a/web/selectors/socket-selectors.js b/web/selectors/socket-selectors.js --- a/web/selectors/socket-selectors.js +++ b/web/selectors/socket-selectors.js @@ -36,16 +36,16 @@ state: AppState, ) => ( serverRequests: $ReadOnlyArray, -) => $ReadOnlyArray = createSelector( +) => Promise<$ReadOnlyArray> = createSelector( getClientResponsesSelector, (state: AppState) => state.navInfo.tab === 'calendar', ( getClientResponsesFunc: ( calendarActive: boolean, oneTimeKeyGenerator: ?OneTimeKeyGenerator, - getSignedIdentityKeysBlob: ?() => SignedIdentityKeysBlob, + getSignedIdentityKeysBlob: ?() => Promise, serverRequests: $ReadOnlyArray, - ) => $ReadOnlyArray, + ) => Promise<$ReadOnlyArray>, calendarActive: boolean, ) => (serverRequests: $ReadOnlyArray) =>