diff --git a/lib/handlers/db-ops-handler.react.js b/lib/handlers/db-ops-handler.react.js --- a/lib/handlers/db-ops-handler.react.js +++ b/lib/handlers/db-ops-handler.react.js @@ -1,8 +1,10 @@ // @flow +import invariant from 'invariant'; import * as React from 'react'; import { opsProcessingFinishedActionType } from '../actions/db-ops-actions.js'; +import { IdentityClientContext } from '../shared/identity-client-context.js'; import { useTunnelbroker } from '../tunnelbroker/tunnelbroker-context.js'; import type { DBOpsEntry } from '../types/db-ops-types.js'; import type { StoreOperations } from '../types/store-ops-types.js'; @@ -11,6 +13,7 @@ peerToPeerMessageTypes, } from '../types/tunnelbroker/peer-to-peer-message-types.js'; import { getConfig } from '../utils/config.js'; +import { getMessageForException } from '../utils/errors.js'; import { useDispatch, useSelector } from '../utils/redux-utils.js'; type Props = { @@ -23,6 +26,8 @@ const queueFront = useSelector(state => state.dbOpsStore.queuedOps[0]); const prevQueueFront = React.useRef(null); const { sendMessage } = useTunnelbroker(); + const identityContext = React.useContext(IdentityClientContext); + invariant(identityContext, 'Identity context should be set'); const dispatch = useDispatch(); @@ -41,19 +46,39 @@ type: opsProcessingFinishedActionType, }); if (messageSourceMetadata) { - const { messageID, senderDeviceID } = messageSourceMetadata; - const message: MessageProcessed = { - type: peerToPeerMessageTypes.MESSAGE_PROCESSED, - messageID, - }; - await sendMessage({ - deviceID: senderDeviceID, - payload: JSON.stringify(message), - }); - await sqliteAPI.removeInboundP2PMessages([messageID]); + try { + const { messageID, senderDeviceID } = messageSourceMetadata; + const { deviceID } = await identityContext.getAuthMetadata(); + if (!deviceID) { + return; + } + const message: MessageProcessed = { + type: peerToPeerMessageTypes.MESSAGE_PROCESSED, + messageID, + deviceID, + }; + await sendMessage({ + deviceID: senderDeviceID, + payload: JSON.stringify(message), + }); + await sqliteAPI.removeInboundP2PMessages([messageID]); + } catch (e) { + console.log( + `Error while sending confirmation: ${ + getMessageForException(e) ?? 'unknown error' + }`, + ); + } } })(); - }, [queueFront, dispatch, processDBStoreOperations, sendMessage, sqliteAPI]); + }, [ + queueFront, + dispatch, + processDBStoreOperations, + sendMessage, + sqliteAPI, + identityContext, + ]); return null; } diff --git a/lib/types/tunnelbroker/peer-to-peer-message-types.js b/lib/types/tunnelbroker/peer-to-peer-message-types.js --- a/lib/types/tunnelbroker/peer-to-peer-message-types.js +++ b/lib/types/tunnelbroker/peer-to-peer-message-types.js @@ -91,11 +91,13 @@ export type MessageProcessed = { +type: 'MessageProcessed', +messageID: string, + +deviceID: string, }; export const messageProcessedValidator: TInterface = tShape({ type: tString(peerToPeerMessageTypes.MESSAGE_PROCESSED), messageID: t.String, + deviceID: t.String, }); export type PeerToPeerMessage =