Skip to content

Commit c030251

Browse files
committed
perf(slack): reduce message hot-path overhead
(cherry picked from commit 9962328)
1 parent 70defcc commit c030251

3 files changed

Lines changed: 36 additions & 25 deletions

File tree

extensions/slack/src/monitor/message-handler/dispatch.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,13 @@ const UNICODE_TO_SLACK: Record<string, string> = {
109109
};
110110

111111
function toSlackEmojiName(emoji: string): string {
112-
const trimmed = emoji.trim().replace(/^:+|:+$/g, "");
112+
let trimmed = emoji.trim();
113+
while (trimmed.startsWith(":")) {
114+
trimmed = trimmed.slice(1);
115+
}
116+
while (trimmed.endsWith(":")) {
117+
trimmed = trimmed.slice(0, -1);
118+
}
113119
return UNICODE_TO_SLACK[trimmed] ?? trimmed;
114120
}
115121

extensions/slack/src/monitor/message-handler/prepare-content.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -262,29 +262,29 @@ export async function resolveSlackMessageContent(params: {
262262
threadStarter: params.threadStarter,
263263
});
264264

265-
const media =
265+
const mediaPromise =
266266
ownFiles && ownFiles.length > 0
267-
? await (async () => {
268-
const { resolveSlackMedia } = await loadSlackMediaModule();
269-
return resolveSlackMedia({
267+
? loadSlackMediaModule().then(({ resolveSlackMedia }) =>
268+
resolveSlackMedia({
270269
files: ownFiles,
271270
token: params.botToken,
272271
maxBytes: params.mediaMaxBytes,
273-
});
274-
})()
275-
: null;
272+
}),
273+
)
274+
: Promise.resolve(null);
276275

277-
const attachmentContent =
276+
const attachmentContentPromise =
278277
params.message.attachments && params.message.attachments.length > 0
279-
? await (async () => {
280-
const { resolveSlackAttachmentContent } = await loadSlackMediaModule();
281-
return resolveSlackAttachmentContent({
278+
? loadSlackMediaModule().then(({ resolveSlackAttachmentContent }) =>
279+
resolveSlackAttachmentContent({
282280
attachments: params.message.attachments,
283281
token: params.botToken,
284282
maxBytes: params.mediaMaxBytes,
285-
});
286-
})()
287-
: null;
283+
}),
284+
)
285+
: Promise.resolve(null);
286+
287+
const [media, attachmentContent] = await Promise.all([mediaPromise, attachmentContentPromise]);
288288

289289
const mergedMedia = [...(media ?? []), ...(attachmentContent?.media ?? [])];
290290
const effectiveDirectMedia = mergedMedia.length > 0 ? mergedMedia : null;

extensions/slack/src/monitor/message-handler/prepare.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ import { isSlackSubteamMentionForBot } from "./subteam-mentions.js";
6767
import type { PreparedSlackMessage } from "./types.js";
6868

6969
const mentionRegexCache = new WeakMap<SlackMonitorContext, Map<string, RegExp[]>>();
70+
const SLACK_ANY_MENTION_RE = /<@[^>]+>|<!subteam\^[^>]+>/;
71+
const SLACK_SUBTEAM_MENTION_MARKER = "<!subteam^";
7072

7173
function resolveCachedMentionRegexes(
7274
ctx: SlackMonitorContext,
@@ -286,17 +288,20 @@ export async function prepareSlackMessage(params: {
286288
return null;
287289
}
288290
const { senderId, allowFromLower } = authorization;
289-
const hasAnyMention = /<@[^>]+>|<!subteam\^[^>]+>/.test(message.text ?? "");
291+
const messageText = message.text ?? "";
292+
const hasAnyMention = SLACK_ANY_MENTION_RE.test(messageText);
293+
const hasSubteamMention = messageText.includes(SLACK_SUBTEAM_MENTION_MARKER);
290294
const explicitlyMentioned = Boolean(
291295
ctx.botUserId &&
292-
(message.text?.includes(`<@${ctx.botUserId}>`) ||
293-
(await isSlackSubteamMentionForBot({
294-
client: ctx.app.client,
295-
text: message.text,
296-
botUserId: ctx.botUserId,
297-
teamId: ctx.teamId,
298-
log: logVerbose,
299-
}))),
296+
(messageText.includes(`<@${ctx.botUserId}>`) ||
297+
(hasSubteamMention &&
298+
(await isSlackSubteamMentionForBot({
299+
client: ctx.app.client,
300+
text: messageText,
301+
botUserId: ctx.botUserId,
302+
teamId: ctx.teamId,
303+
log: logVerbose,
304+
})))),
300305
);
301306
const seedTopLevelRoomThreadBySource =
302307
opts.source === "app_mention" || opts.wasMentioned === true || explicitlyMentioned;
@@ -315,7 +320,7 @@ export async function prepareSlackMessage(params: {
315320
opts.wasMentioned ??
316321
(!isDirectMessage &&
317322
matchesMentionWithExplicit({
318-
text: message.text ?? "",
323+
text: messageText,
319324
mentionRegexes,
320325
explicit: {
321326
hasAnyMention,

0 commit comments

Comments
 (0)