diff --git a/lib/push/send-utils.js b/lib/push/send-utils.js --- a/lib/push/send-utils.js +++ b/lib/push/send-utils.js @@ -21,7 +21,7 @@ } from './utils.js'; import { createWebNotification } from './web-notif-creators.js'; import { createWNSNotification } from './wns-notif-creators.js'; -import type { DeviceSessionCreationRequest } from '../components/peer-olm-session-creator-provider.react.js'; +import { type DeviceSessionCreationRequest } from '../components/peer-olm-session-creator-provider.react.js'; import { hasPermission } from '../permissions/minimally-encoded-thread-permissions.js'; import { rawMessageInfoFromMessageData, @@ -65,6 +65,7 @@ import { getConfig } from '../utils/config.js'; import { type GetENSNames } from '../utils/ens-helpers.js'; import { type GetFCNames } from '../utils/farcaster-helpers.js'; +import { values } from '../utils/objects.js'; import { promiseAll } from '../utils/promises.js'; export type Device = { @@ -963,8 +964,8 @@ } async function createOlmSessionWithDevices( - deviceIDsToUserIDs: { - +[string]: string, + userDevices: { + +[userID: string]: $ReadOnlyArray, }, olmSessionCreator: ( userID: string, @@ -979,17 +980,18 @@ const deviceIDsToSessionPresence = await isNotificationsSessionInitializedWithDevices( - Object.keys(deviceIDsToUserIDs), + values(userDevices).flat(), ); const olmSessionCreationPromises = []; - for (const deviceID in deviceIDsToSessionPresence) { - if (deviceIDsToSessionPresence[deviceID]) { - continue; - } - olmSessionCreationPromises.push( - olmSessionCreator(deviceIDsToUserIDs[deviceID], [{ deviceID }]), - ); + for (const userID in userDevices) { + const devices = userDevices[userID] + .filter(deviceID => !deviceIDsToSessionPresence[deviceID]) + .map(deviceID => ({ + deviceID, + })); + + olmSessionCreationPromises.push(olmSessionCreator(userID, devices)); } try { @@ -1079,14 +1081,16 @@ const filteredPushInfos = filterDevicesSupportingDMNotifsForUsers(pushInfos); - const deviceIDsToUserIDs: { [string]: string } = {}; + const userDevices: { + [userID: string]: $ReadOnlyArray, + } = {}; for (const userID in filteredPushInfos) { - for (const device of filteredPushInfos[userID].devices) { - deviceIDsToUserIDs[device.cryptoID] = userID; - } + userDevices[userID] = filteredPushInfos[userID].devices.map( + device => device.cryptoID, + ); } - await createOlmSessionWithDevices(deviceIDsToUserIDs, olmSessionCreator); + await createOlmSessionWithDevices(userDevices, olmSessionCreator); return await buildNotifsFromPushInfo({ encryptedNotifUtilsAPI, @@ -1133,13 +1137,16 @@ filterDevicesSupportingDMNotifs(ownDevicesPushInfo); const { senderUserID, senderDeviceDescriptor } = senderInfo; - const deviceIDsToUserIDs: { [string]: string } = {}; - for (const device of filteredownDevicesPushInfos.devices) { - deviceIDsToUserIDs[device.cryptoID] = senderUserID; - } + const userDevices: { + +[userID: string]: $ReadOnlyArray, + } = { + [senderUserID]: filteredownDevicesPushInfos.devices.map( + device => device.cryptoID, + ), + }; - await createOlmSessionWithDevices(deviceIDsToUserIDs, olmSessionCreator); + await createOlmSessionWithDevices(userDevices, olmSessionCreator); const devicesByPlatform = getDevicesByPlatform( filteredownDevicesPushInfos.devices, );