





















@@ -177,6 +177,9 @@ type SlackTurnDeliveryAttempt = {
177177textOverride?: string;
178178};
179179180+const SLACK_STREAM_RECIPIENT_TEAM_CACHE_MAX = 2000;
181+const slackStreamRecipientTeamCache = new Map<string, string>();
182+180183function buildSlackTurnDeliveryKey(params: SlackTurnDeliveryAttempt): string | null {
181184const reply = resolveSendableOutboundReplyParts(params.payload, {
182185text: params.textOverride,
@@ -195,6 +198,48 @@ function buildSlackTurnDeliveryKey(params: SlackTurnDeliveryAttempt): string | n
195198});
196199}
197200201+function readSlackStreamRecipientTeamCache(params: {
202+fallbackTeamId?: string;
203+userId?: string;
204+}): string | undefined {
205+if (!params.fallbackTeamId || !params.userId) {
206+return undefined;
207+}
208+const cacheKey = `${params.fallbackTeamId}:${params.userId}`;
209+const cached = slackStreamRecipientTeamCache.get(cacheKey);
210+if (!cached) {
211+return undefined;
212+}
213+slackStreamRecipientTeamCache.delete(cacheKey);
214+slackStreamRecipientTeamCache.set(cacheKey, cached);
215+return cached;
216+}
217+218+function rememberSlackStreamRecipientTeam(params: {
219+fallbackTeamId?: string;
220+userId?: string;
221+teamId: string;
222+}): void {
223+if (!params.fallbackTeamId || !params.userId) {
224+return;
225+}
226+const cacheKey = `${params.fallbackTeamId}:${params.userId}`;
227+if (slackStreamRecipientTeamCache.has(cacheKey)) {
228+slackStreamRecipientTeamCache.delete(cacheKey);
229+}
230+slackStreamRecipientTeamCache.set(cacheKey, params.teamId);
231+if (slackStreamRecipientTeamCache.size > SLACK_STREAM_RECIPIENT_TEAM_CACHE_MAX) {
232+const oldest = slackStreamRecipientTeamCache.keys().next().value;
233+if (oldest) {
234+slackStreamRecipientTeamCache.delete(oldest);
235+}
236+}
237+}
238+239+export function resetSlackStreamRecipientTeamCacheForTests(): void {
240+slackStreamRecipientTeamCache.clear();
241+}
242+198243export function createSlackTurnDeliveryTracker() {
199244const deliveredKeys = new Set<string>();
200245return {
@@ -231,6 +276,10 @@ export async function resolveSlackStreamRecipientTeamId(params: {
231276userId?: PreparedSlackMessage["message"]["user"];
232277fallbackTeamId?: string;
233278}): Promise<string | undefined> {
279+const cachedTeamId = readSlackStreamRecipientTeamCache(params);
280+if (cachedTeamId) {
281+return cachedTeamId;
282+}
234283if (params.userId) {
235284try {
236285const info = await params.client.users.info({
@@ -239,6 +288,7 @@ export async function resolveSlackStreamRecipientTeamId(params: {
239288});
240289const teamId = info.user?.team_id ?? info.user?.profile?.team;
241290if (teamId) {
291+rememberSlackStreamRecipientTeam({ ...params, teamId });
242292return teamId;
243293}
244294} catch (err) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。