diff --git a/apps/meteor/app/authentication/server/lib/restrictLoginAttempts.ts b/apps/meteor/app/authentication/server/lib/restrictLoginAttempts.ts index 6f260c8a129c0..300a4fa973114 100644 --- a/apps/meteor/app/authentication/server/lib/restrictLoginAttempts.ts +++ b/apps/meteor/app/authentication/server/lib/restrictLoginAttempts.ts @@ -43,7 +43,7 @@ const notifyFailedLogin = async (ipOrUsername: string, blockedUntil: Date, faile ], }; - await sendMessage(rocketCat, message, room, false); + await sendMessage(rocketCat, message, room); }; export const isValidLoginAttemptByIp = async (ip: string): Promise => { diff --git a/apps/meteor/app/lib/server/functions/sendMessage.ts b/apps/meteor/app/lib/server/functions/sendMessage.ts index c41b52d959ad4..036004aad5a7c 100644 --- a/apps/meteor/app/lib/server/functions/sendMessage.ts +++ b/apps/meteor/app/lib/server/functions/sendMessage.ts @@ -14,6 +14,11 @@ import { afterSaveMessage } from '../lib/afterSaveMessage'; import { notifyOnRoomChangedById } from '../lib/notifyListener'; import { validateCustomMessageFields } from '../lib/validateCustomMessageFields'; +type SendMessageOptions = { + upsert?: boolean; + previewUrls?: string[]; +}; + // TODO: most of the types here are wrong, but I don't want to change them now /** @@ -217,7 +222,9 @@ export function prepareMessageObject( * Caller of the function should verify the Message_MaxAllowedSize if needed. * There might be same use cases which needs to override this setting. Example - sending error logs. */ -export const sendMessage = async function (user: any, message: any, room: any, upsert = false, previewUrls?: string[]) { +export const sendMessage = async function (user: any, message: any, room: any, options: SendMessageOptions = {}) { + const { upsert = false, previewUrls } = options; + if (!user || !message || !room._id) { return false; } diff --git a/apps/meteor/app/lib/server/methods/sendMessage.ts b/apps/meteor/app/lib/server/methods/sendMessage.ts index db7a017ee7a01..895ccc27a5b87 100644 --- a/apps/meteor/app/lib/server/methods/sendMessage.ts +++ b/apps/meteor/app/lib/server/methods/sendMessage.ts @@ -106,7 +106,7 @@ export async function executeSendMessage( } metrics.messagesSent.inc(); // TODO This line needs to be moved to it's proper place. See the comments on: https://github.com/RocketChat/Rocket.Chat/pull/5736 - return await sendMessage(user, message, room, false, extraInfo?.previewUrls); + return await sendMessage(user, message, room, { previewUrls: extraInfo?.previewUrls }); } catch (err: any) { SystemLogger.error({ msg: 'Error sending message:', err }); diff --git a/apps/meteor/app/livechat/server/hooks/offlineMessageToChannel.ts b/apps/meteor/app/livechat/server/hooks/offlineMessageToChannel.ts index f15c7d717b8f3..c2ba5edbf314e 100644 --- a/apps/meteor/app/livechat/server/hooks/offlineMessageToChannel.ts +++ b/apps/meteor/app/livechat/server/hooks/offlineMessageToChannel.ts @@ -63,7 +63,7 @@ callbacks.add( groupable: false, }; - await sendMessage(user, message, room, true); + await sendMessage(user, message, room, { upsert: true }); }, callbacks.priority.MEDIUM, 'livechat-send-email-offline-message-to-channel', diff --git a/apps/meteor/app/slackbridge/server/RocketAdapter.ts b/apps/meteor/app/slackbridge/server/RocketAdapter.ts index 87f549a07eb08..925bb4ef2dc4d 100644 --- a/apps/meteor/app/slackbridge/server/RocketAdapter.ts +++ b/apps/meteor/app/slackbridge/server/RocketAdapter.ts @@ -503,13 +503,13 @@ export default class RocketAdapter { // Make sure that a message with the same bot_id and timestamp doesn't already exists const msg = await Messages.findOneBySlackBotIdAndSlackTs(slackMessage.bot_id, slackMessage.ts); if (!msg) { - void sendMessage(rocketUser, rocketMsgObj, rocketChannel, true); + void sendMessage(rocketUser, rocketMsgObj, rocketChannel, { upsert: true }); } } }, 500); } else { rocketLogger.debug('Send message to Rocket.Chat'); - await sendMessage(rocketUser, rocketMsgObj, rocketChannel, true); + await sendMessage(rocketUser, rocketMsgObj, rocketChannel, { upsert: true }); } } } diff --git a/apps/meteor/app/slackbridge/server/SlackAdapter.ts b/apps/meteor/app/slackbridge/server/SlackAdapter.ts index 2bc5d56da88b3..e62d0bcdcd932 100644 --- a/apps/meteor/app/slackbridge/server/SlackAdapter.ts +++ b/apps/meteor/app/slackbridge/server/SlackAdapter.ts @@ -1320,7 +1320,7 @@ export default class SlackAdapter { msg._id = details.message_id; } - void sendMessage(rocketUser, msg, rocketChannel, true); + void sendMessage(rocketUser, msg, rocketChannel, { upsert: true }); }); } diff --git a/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts b/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts index 8d4a669762280..b2480acff247d 100644 --- a/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts +++ b/apps/meteor/server/features/EmailInbox/EmailInbox_Outgoing.ts @@ -237,7 +237,7 @@ callbacks.add( ], }, room, - true, + { upsert: true }, ); return message; } diff --git a/apps/meteor/server/services/media-call/service.ts b/apps/meteor/server/services/media-call/service.ts index 6b1dd30b1e1e9..ed26ead8c61d8 100644 --- a/apps/meteor/server/services/media-call/service.ts +++ b/apps/meteor/server/services/media-call/service.ts @@ -201,7 +201,7 @@ export class MediaCallService extends ServiceClassInternal implements IMediaCall const record = getHistoryMessagePayload(state, duration, call._id); try { - const message = await sendMessage(user, record, room, false); + const message = await sendMessage(user, record, room); if ('_id' in message) { await CallHistory.updateMany({ callId: call._id }, { $set: { messageId: message._id } }); diff --git a/apps/meteor/server/services/messages/service.ts b/apps/meteor/server/services/messages/service.ts index 30dbe92b518ca..89bc4393217b9 100644 --- a/apps/meteor/server/services/messages/service.ts +++ b/apps/meteor/server/services/messages/service.ts @@ -136,7 +136,7 @@ export class MessageService extends ServiceClassInternal implements IMessageServ } async sendMessageWithValidation(user: IUser, message: Partial, room: Partial, upsert = false): Promise { - return sendMessage(user, message, room, upsert); + return sendMessage(user, message, room, { upsert }); } async deleteMessage(user: IUser, message: IMessage): Promise { diff --git a/apps/meteor/server/services/video-conference/service.ts b/apps/meteor/server/services/video-conference/service.ts index 0460569fd3e30..1ea8c03f95c18 100644 --- a/apps/meteor/server/services/video-conference/service.ts +++ b/apps/meteor/server/services/video-conference/service.ts @@ -555,7 +555,7 @@ export class VideoConfService extends ServiceClassInternal implements IVideoConf const appId = videoConfProviders.getProviderAppId(call.providerName); const user = createdBy || (appId && (await Users.findOneByAppId(appId))) || (await Users.findOneById('rocket.cat')); - const message = await sendMessage(user, record, room, false); + const message = await sendMessage(user, record, room); if (!message) { throw new Error('failed-to-create-message');