From 8c12efe336fcaf07ca367594d43292ffa945e9e8 Mon Sep 17 00:00:00 2001 From: Pierre Lehnen <55164754+pierre-lehnen-rc@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:20:57 -0300 Subject: [PATCH 1/2] chore: use list of supported features from the client when initiating sip calls (#40880) --- ee/packages/media-calls/src/sip/providers/OutgoingSipCall.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ee/packages/media-calls/src/sip/providers/OutgoingSipCall.ts b/ee/packages/media-calls/src/sip/providers/OutgoingSipCall.ts index 15fbd27d40910..48927f81f9c34 100644 --- a/ee/packages/media-calls/src/sip/providers/OutgoingSipCall.ts +++ b/ee/packages/media-calls/src/sip/providers/OutgoingSipCall.ts @@ -46,7 +46,7 @@ export class OutgoingSipCall extends BaseSipCall { public static async createCall(session: SipServerSession, params: InternalCallParams): Promise { logger.debug({ msg: 'OutgoingSipCall.createCall', sessionId: session.sessionId }); - const { callee, ...extraParams } = params; + const { callee, features: requestedFeatures, ...extraParams } = params; // pre-sign the callee to this session const signedCallee: MediaCallSignedContact = { @@ -68,12 +68,13 @@ export class OutgoingSipCall extends BaseSipCall { throw new SipError(SipErrorCodes.NOT_FOUND, 'Caller agent not found'); } + const features = requestedFeatures.filter((feature) => SIP_CALL_FEATURES.includes(feature)); const call = await mediaCallDirector.createCall({ ...extraParams, callee: signedCallee, calleeAgent, callerAgent, - features: SIP_CALL_FEATURES, + features, }); const channel = await calleeAgent.getOrCreateChannel(call, session.sessionId); From a080c805baf4de219515401d7f734143c7f93d3c Mon Sep 17 00:00:00 2001 From: Martin Schoeler Date: Fri, 12 Jun 2026 16:09:28 -0300 Subject: [PATCH 2/2] regression: revert thread messages endpoint usage (#40913) --- .../Threads/hooks/useThreadMessagesQuery.ts | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMessagesQuery.ts b/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMessagesQuery.ts index 4a6e1e7a2202b..5966aa17cad4f 100644 --- a/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMessagesQuery.ts +++ b/apps/meteor/client/views/room/contextualBar/Threads/hooks/useThreadMessagesQuery.ts @@ -1,11 +1,10 @@ import { isThreadMessage, type IMessage, type IRoom, type IThreadMainMessage, type IThreadMessage } from '@rocket.chat/core-typings'; -import { useEndpoint, useMethod, useStream } from '@rocket.chat/ui-contexts'; +import { useMethod, useStream } from '@rocket.chat/ui-contexts'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import { useEffect, useRef } from 'react'; import { onClientMessageReceived } from '../../../../../lib/onClientMessageReceived'; import { roomsQueryKeys } from '../../../../../lib/queryKeys'; -import { mapMessageFromApi } from '../../../../../lib/utils/mapMessageFromApi'; import { modifyMessageOnFilesDelete } from '../../../../../lib/utils/modifyMessageOnFilesDelete'; import { createDeleteCriteria, @@ -25,11 +24,7 @@ export const useThreadMessagesQuery = (tmid: IThreadMainMessage['_id'], rid?: IR const queryClient = useQueryClient(); const queryKey = roomsQueryKeys.threadMessages(roomId, tmid); - const getThreadMessages = useEndpoint('GET', '/v1/chat.getThreadMessages'); - // REST has no per-thread read-marker endpoint yet; fall back to the - // `readThreads` DDP method so the side effect that DDP getThreadMessages - // used to do server-side keeps happening for callers. - const readThreads = useMethod('readThreads'); + const getThreadMessages = useMethod('getThreadMessages'); const subscribeToRoomMessages = useStream('room-messages'); const subscribeToNotifyRoom = useStream('notify-room'); @@ -110,11 +105,10 @@ export const useThreadMessagesQuery = (tmid: IThreadMainMessage['_id'], rid?: IR queryFn: async () => { const cachedMessages = queryClient.getQueryData(queryKey) || []; - const { messages } = await getThreadMessages({ tmid }); - void Promise.resolve(readThreads(tmid)).catch(() => undefined); - const filtered = messages - .map((m) => mapMessageFromApi(m)) - .filter((msg): msg is IThreadMessage => isThreadMessage(msg) && msg.tmid === tmid && msg._id !== tmid && msg._hidden !== true); + const messages = await getThreadMessages({ tmid }); + const filtered = messages.filter( + (msg): msg is IThreadMessage => isThreadMessage(msg) && msg.tmid === tmid && msg._id !== tmid && msg._hidden !== true, + ); const sorted = mergeThreadMessages(cachedMessages, filtered); if (unprocessedReadMessagesEvent.current) {