diff --git a/packages/server/src/routes/social.test.ts b/packages/server/src/routes/social.test.ts index df0f0850..4a8e1c0b 100644 --- a/packages/server/src/routes/social.test.ts +++ b/packages/server/src/routes/social.test.ts @@ -219,4 +219,22 @@ describe('POST /api/social/requests — case-insensitive username lookup', () => expect(res.statusCode).toBe(404); expect(JSON.parse(res.body).error).toBe('User not found'); }); + + it('broadcasts friend_request_sent to the sender on local request creation', async () => { + seedUser({ id: 'u1', username: 'alice' }); + const { connectionManager } = await import('../ws/handler.js'); + const sendToUser = connectionManager.sendToUser as unknown as ReturnType; + sendToUser.mockClear(); + + const res = await app.inject({ + method: 'POST', + url: '/api/social/requests', + payload: { username: 'alice' }, + }); + expect(res.statusCode).toBe(201); + + const sent = sendToUser.mock.calls.find(c => c[1]?.type === 'friend_request_sent'); + expect(sent).toBeDefined(); + expect(sent![0]).toBe(CALLER_ID); + }); }); diff --git a/packages/server/src/routes/social.ts b/packages/server/src/routes/social.ts index f457191b..61f62f80 100644 --- a/packages/server/src/routes/social.ts +++ b/packages/server/src/routes/social.ts @@ -103,6 +103,11 @@ async function handleLocalFriendRequest( request: friendRequestPayload, }); + connectionManager.sendToUser(request.userId, { + type: 'friend_request_sent', + request: friendRequestPayload, + }); + // Federation relay: notify the target user's home instance const fromIdentity = { homeUserId: sender.homeUserId || request.userId,