fix(msteams): normalize memory store conversation ids

This commit is contained in:
Tak Hoffman
2026-03-26 21:26:59 -05:00
parent be6b841334
commit 3e121edf20
2 changed files with 26 additions and 5 deletions

View File

@@ -126,6 +126,25 @@ describe("msteams conversation store (fs)", () => {
});
describe("msteams conversation store (memory)", () => {
it("normalizes conversation ids the same way as the fs store", async () => {
const store = createMSTeamsConversationStoreMemory();
await store.upsert("conv-norm;messageid=123", {
conversation: { id: "conv-norm" },
channelId: "msteams",
serviceUrl: "https://service.example.com",
user: { id: "u1" },
});
await expect(store.get("conv-norm")).resolves.toEqual(
expect.objectContaining({
conversation: { id: "conv-norm" },
}),
);
await expect(store.remove("conv-norm")).resolves.toBe(true);
await expect(store.get("conv-norm;messageid=123")).resolves.toBeNull();
});
it("upserts, lists, removes, and resolves users by both AAD and Bot Framework ids", async () => {
const store = createMSTeamsConversationStoreMemory([
{

View File

@@ -8,20 +8,22 @@ export function createMSTeamsConversationStoreMemory(
initial: MSTeamsConversationStoreEntry[] = [],
): MSTeamsConversationStore {
const map = new Map<string, StoredConversationReference>();
const normalizeConversationId = (raw: string): string => raw.split(";")[0] ?? raw;
for (const { conversationId, reference } of initial) {
map.set(conversationId, reference);
map.set(normalizeConversationId(conversationId), reference);
}
return {
upsert: async (conversationId, reference) => {
const existing = map.get(conversationId);
map.set(conversationId, {
const normalizedId = normalizeConversationId(conversationId);
const existing = map.get(normalizedId);
map.set(normalizedId, {
...(existing?.timezone && !reference.timezone ? { timezone: existing.timezone } : {}),
...reference,
});
},
get: async (conversationId) => {
return map.get(conversationId) ?? null;
return map.get(normalizeConversationId(conversationId)) ?? null;
},
list: async () => {
return Array.from(map.entries()).map(([conversationId, reference]) => ({
@@ -30,7 +32,7 @@ export function createMSTeamsConversationStoreMemory(
}));
},
remove: async (conversationId) => {
return map.delete(conversationId);
return map.delete(normalizeConversationId(conversationId));
},
findByUserId: async (id) => {
const target = id.trim();