diff --git a/keyserver/src/updaters/relationship-updaters.js b/keyserver/src/updaters/relationship-updaters.js --- a/keyserver/src/updaters/relationship-updaters.js +++ b/keyserver/src/updaters/relationship-updaters.js @@ -206,13 +206,37 @@ // reported to the caller and can be repeated - there should be only // one PERSONAL thread per a pair of users and we can safely call it // repeatedly. - await createPersonalThreads(viewer, request); - const insertRows = Object.keys(request.userIDsToFID).map(otherUserID => { + const threadIDPerUser = await createPersonalThreads(viewer, request); + + const viewerID = viewer.userID; + const newUserIDs = Object.keys(request.userIDsToFID).filter( + userID => userID !== viewerID, + ); + + const viewerFID = request.userIDsToFID[viewerID]; + if (!viewerFID) { + throw new ServerError('viewer_fid_missing'); + } + + const insertRows = newUserIDs.map(otherUserID => { const [user1, user2] = sortUserIDs(viewer.userID, otherUserID); return { user1, user2, status: undirectedStatus.KNOW_OF }; }); const updateDatas = await updateChangedUndirectedRelationships(insertRows); await createUpdates(updateDatas); + + const now = Date.now(); + const messageDatas = newUserIDs.map(otherUserID => ({ + type: messageTypes.UPDATE_RELATIONSHIP, + threadID: threadIDPerUser[otherUserID], + creatorID: viewer.userID, + creatorFID: viewerFID, + targetID: otherUserID, + targetFID: request.userIDsToFID[otherUserID], + time: now, + operation: 'farcaster_mutual', + })); + await createMessages(viewer, messageDatas, 'broadcast'); } else { invariant( false,