(
message: InitialClientSocketMessage,
)
| 440 | } |
| 441 | |
| 442 | async handleInitialClientSocketMessage( |
| 443 | message: InitialClientSocketMessage, |
| 444 | ): Promise<ServerServerSocketMessage[]> { |
| 445 | const { viewer } = this; |
| 446 | invariant(viewer, 'should be set'); |
| 447 | |
| 448 | const responses: Array<ServerServerSocketMessage> = []; |
| 449 | |
| 450 | const { sessionState, clientResponses } = message.payload; |
| 451 | |
| 452 | const payload = await fetchDataForSocketInit(viewer, sessionState); |
| 453 | responses.push({ |
| 454 | type: serverSocketMessageTypes.STATE_SYNC, |
| 455 | responseTo: message.id, |
| 456 | payload, |
| 457 | }); |
| 458 | |
| 459 | const [ |
| 460 | { serverRequests, activityUpdateResult }, |
| 461 | signedIdentityKeysBlobMissing, |
| 462 | olmNotificationsSessionMissing, |
| 463 | ] = await Promise.all([ |
| 464 | processClientResponses(viewer, clientResponses), |
| 465 | isCookieMissingSignedIdentityKeysBlob(viewer.cookieID), |
| 466 | isCookieMissingOlmNotificationsSession(viewer), |
| 467 | ]); |
| 468 | |
| 469 | if (signedIdentityKeysBlobMissing) { |
| 470 | serverRequests.push({ |
| 471 | type: serverRequestTypes.SIGNED_IDENTITY_KEYS_BLOB, |
| 472 | }); |
| 473 | } |
| 474 | |
| 475 | if (olmNotificationsSessionMissing) { |
| 476 | serverRequests.push({ |
| 477 | type: serverRequestTypes.INITIAL_NOTIFICATIONS_ENCRYPTED_MESSAGE, |
| 478 | }); |
| 479 | const { userID, cookieID, sessionID } = viewer; |
| 480 | const data = { userID, cookieID, sessionID }; |
| 481 | console.log( |
| 482 | 'Sending serverRequestTypes.INITIAL_NOTIFICATIONS_ENCRYPTED_MESSAGE ' + |
| 483 | JSON.stringify(data), |
| 484 | ); |
| 485 | } |
| 486 | |
| 487 | if (serverRequests.length > 0 || clientResponses.length > 0) { |
| 488 | // We send this message first since the STATE_SYNC triggers the client's |
| 489 | // connection status to shift to "connected", and we want to make sure the |
| 490 | // client responses are cleared from Redux before that happens |
| 491 | responses.unshift({ |
| 492 | type: serverSocketMessageTypes.REQUESTS, |
| 493 | responseTo: message.id, |
| 494 | payload: { serverRequests }, |
| 495 | }); |
| 496 | } |
| 497 | |
| 498 | if (activityUpdateResult) { |
| 499 | // Same reason for unshifting as above |
no test coverage detected