Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3369999
D11707.id39769.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
D11707.id39769.diff
View Options
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
@@ -36,10 +36,16 @@
throw new ServerError('not_logged_in');
}
- const requestUserIDs =
- request.action === relationshipActions.FARCASTER_MUTUAL
- ? Object.keys(request.userIDsToFID)
- : request.userIDs;
+ let requestUserIDs;
+ const viewerID = viewer.userID;
+ if (request.action === relationshipActions.FARCASTER_MUTUAL) {
+ requestUserIDs = Object.keys(request.userIDsToFID).filter(
+ userID => userID !== viewerID,
+ );
+ } else {
+ requestUserIDs = request.userIDs;
+ }
+
const uniqueUserIDs = [...new Set(requestUserIDs)];
const users = await fetchUserInfos(uniqueUserIDs);
@@ -64,7 +70,11 @@
// 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.
- const threadIDPerUser = await createPersonalThreads(viewer, request);
+ const threadIDPerUser = await createPersonalThreads(
+ viewer,
+ request,
+ userIDs,
+ );
const { userRelationshipOperations, errors: friendRequestErrors } =
await fetchFriendRequestRelationshipOperations(viewer, userIDs);
errors = { ...errors, ...friendRequestErrors };
@@ -206,13 +216,36 @@
// 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,
+ userIDs,
+ );
+
+ const viewerFID = request.userIDsToFID[viewerID];
+ if (!viewerFID) {
+ throw new ServerError('viewer_fid_missing');
+ }
+
+ const insertRows = userIDs.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 = userIDs.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,
@@ -329,6 +362,7 @@
async function createPersonalThreads(
viewer: Viewer,
request: RelationshipRequest,
+ userIDs: $ReadOnlyArray<string>,
) {
invariant(
request.action === relationshipActions.FRIEND ||
@@ -338,10 +372,6 @@
request.action,
);
- const userIDs: $ReadOnlyArray<string> = request.userIDsToFID
- ? Object.keys(request.userIDsToFID)
- : request.userIDs;
-
const threadIDPerUser: { [string]: string } = {};
const personalThreadsQuery = SQL`
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Nov 27, 12:39 AM (21 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2586592
Default Alt Text
D11707.id39769.diff (3 KB)
Attached To
Mode
D11707: [keyserver] Send farcaster_mutual UPDATE_RELATIONSHIP message when establishing Farcaster relationship
Attached
Detach File
Event Timeline
Log In to Comment