From 2110fab8452c17acce028f91621e209f2d791003 Mon Sep 17 00:00:00 2001 From: Hoang Nguyen Date: Sat, 27 Jun 2026 07:27:44 +0000 Subject: [PATCH] Fix Telegram delivery reliability --- .../adapters/TelegramAdapter.test.ts | 27 +++++++++++++++++++ .../src/__tests__/utils/telegramHtml.test.ts | 8 ++++++ .../src/adapters/TelegramAdapter.ts | 14 +++++++--- .../src/utils/telegramHtml.ts | 2 +- 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/packages/channel-connector/src/__tests__/adapters/TelegramAdapter.test.ts b/packages/channel-connector/src/__tests__/adapters/TelegramAdapter.test.ts index eea6ed1b..74480a2c 100644 --- a/packages/channel-connector/src/__tests__/adapters/TelegramAdapter.test.ts +++ b/packages/channel-connector/src/__tests__/adapters/TelegramAdapter.test.ts @@ -1,4 +1,5 @@ import * as telegrafModule from 'telegraf'; +import * as telegramHtml from '../../utils/telegramHtml.js'; import { TelegramAdapter } from '../../adapters/TelegramAdapter.js'; import type { IncomingMessage } from '../../types.js'; @@ -255,6 +256,32 @@ describe('TelegramAdapter', () => { expect(plainChunk).not.toContain('&'); }); + it('should deliver nested lists without throwing', async () => { + const bot = getMockBot(); + + await adapter.sendMessage('12345', '- agent\n - Status'); + + expect(bot.telegram.sendMessage).toHaveBeenCalledTimes(1); + expect(bot.telegram.sendMessage.mock.calls[0][1]).toContain('Status'); + }); + + it('should send plain text when markdown formatting throws', async () => { + const bot = getMockBot(); + const formatter = vi.spyOn(telegramHtml, 'markdownToTelegramHtml') + .mockImplementationOnce(() => { + throw new Error('formatter failed'); + }); + + await adapter.sendMessage('12345', '- agent\n - Status'); + + expect(bot.telegram.sendMessage).toHaveBeenCalledTimes(1); + expect(bot.telegram.sendMessage.mock.calls[0][0]).toBe('12345'); + expect(bot.telegram.sendMessage.mock.calls[0][1]).toBe('- agent\n - Status'); + expect(bot.telegram.sendMessage.mock.calls[0][2]).toBeUndefined(); + + formatter.mockRestore(); + }); + it('should propagate non-parse-entities errors without falling back', async () => { const bot = getMockBot(); const otherError = Object.assign(new Error('403'), { diff --git a/packages/channel-connector/src/__tests__/utils/telegramHtml.test.ts b/packages/channel-connector/src/__tests__/utils/telegramHtml.test.ts index 658cf37e..0285c302 100644 --- a/packages/channel-connector/src/__tests__/utils/telegramHtml.test.ts +++ b/packages/channel-connector/src/__tests__/utils/telegramHtml.test.ts @@ -40,6 +40,14 @@ describe('markdownToTelegramHtml', () => { expect(out).not.toContain('