diff --git a/extensions/telegram/src/thread-bindings.test.ts b/extensions/telegram/src/thread-bindings.test.ts index 669121f6cc0..b5d78f16c01 100644 --- a/extensions/telegram/src/thread-bindings.test.ts +++ b/extensions/telegram/src/thread-bindings.test.ts @@ -26,6 +26,11 @@ import { setTelegramThreadBindingMaxAgeBySessionKey, } from "./thread-bindings.js"; +async function flushMicrotasks(): Promise { + await Promise.resolve(); + await new Promise((resolve) => queueMicrotask(resolve)); +} + describe("telegram thread bindings", () => { let stateDirOverride: string | undefined; @@ -361,7 +366,7 @@ describe("telegram thread bindings", () => { manager.touchConversation("-100200300:topic:100"); await __testing.resetTelegramThreadBindingsForTests(); - await new Promise((resolve) => setTimeout(resolve, 0)); + await flushMicrotasks(); expect(unhandled).toEqual([]); } finally { process.off("unhandledRejection", onUnhandledRejection); diff --git a/extensions/telegram/src/topic-name-cache.ts b/extensions/telegram/src/topic-name-cache.ts index 8b2ddf8735e..530ef40de4c 100644 --- a/extensions/telegram/src/topic-name-cache.ts +++ b/extensions/telegram/src/topic-name-cache.ts @@ -15,18 +15,11 @@ function cacheKey(chatId: number | string, threadId: number | string): string { } function evictOldest(): void { - if (cache.size <= MAX_ENTRIES) { - return; - } - let oldestKey: string | undefined; - let oldestTime = Infinity; - for (const [key, entry] of cache) { - if (entry.updatedAt < oldestTime) { - oldestTime = entry.updatedAt; - oldestKey = key; + while (cache.size > MAX_ENTRIES) { + const oldestKey = cache.keys().next().value; + if (!oldestKey) { + return; } - } - if (oldestKey) { cache.delete(oldestKey); } } @@ -48,6 +41,7 @@ export function updateTopicName( if (!merged.name) { return; } + cache.delete(key); cache.set(key, merged); evictOldest(); } @@ -56,9 +50,16 @@ export function getTopicName( chatId: number | string, threadId: number | string, ): string | undefined { - const entry = cache.get(cacheKey(chatId, threadId)); + const key = cacheKey(chatId, threadId); + const entry = cache.get(key); if (entry) { - entry.updatedAt = Date.now(); + const refreshedEntry: TopicEntry = { + ...entry, + updatedAt: Date.now(), + }; + cache.delete(key); + cache.set(key, refreshedEntry); + return refreshedEntry.name; } return entry?.name; } diff --git a/package.json b/package.json index a4646197a52..a230d530e95 100644 --- a/package.json +++ b/package.json @@ -1380,7 +1380,6 @@ "@sinclair/typebox": "0.34.49", "@slack/bolt": "^4.7.0", "@slack/web-api": "^7.15.0", - "@whiskeysockets/baileys": "7.0.0-rc.9", "ajv": "^8.18.0", "chalk": "^5.6.2", "chokidar": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7fefafb71f..ad756d80299 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,9 +112,6 @@ importers: '@slack/web-api': specifier: ^7.15.0 version: 7.15.0 - '@whiskeysockets/baileys': - specifier: 7.0.0-rc.9 - version: 7.0.0-rc.9(audio-decode@2.2.3)(jimp@1.6.1)(sharp@0.34.5) ajv: specifier: ^8.18.0 version: 8.18.0