diff --git a/packages/bots/telegram/src/index.test.ts b/packages/bots/telegram/src/index.test.ts index 964a3b76..cfaca01d 100644 --- a/packages/bots/telegram/src/index.test.ts +++ b/packages/bots/telegram/src/index.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; import { contractTestBot } from '@profullstack/sh1pt-core/testing'; -import bot, { loadConfig } from './index.js'; +import bot, { loadConfig, toBotEvent } from './index.js'; contractTestBot(bot, { sampleConfig: {}, sampleChannel: '1234567890' }); @@ -31,3 +31,24 @@ describe('loadConfig', () => { expect(config.maxConcurrentSessions).toBe(5); }); }); + +describe('toBotEvent', () => { + const message = (timestamp: number) => ({ + source: 'user-1', + sourceName: 'User', + text: 'hello', + timestamp, + chatId: 123, + isGroup: false, + attachments: [], + raw: {}, + }); + + it('preserves valid message timestamps', () => { + expect(toBotEvent(message(Date.UTC(2026, 0, 1))).timestamp).toBe('2026-01-01T00:00:00.000Z'); + }); + + it('falls back when the provider supplies an invalid timestamp', () => { + expect(toBotEvent(message(Number.NaN)).timestamp).toBe('1970-01-01T00:00:00.000Z'); + }); +}); diff --git a/packages/bots/telegram/src/index.ts b/packages/bots/telegram/src/index.ts index 222c646f..a2621cc0 100644 --- a/packages/bots/telegram/src/index.ts +++ b/packages/bots/telegram/src/index.ts @@ -117,7 +117,8 @@ function parsePositiveIntegerEnv(value: string | undefined, fallback: number): n return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : fallback; } -function toBotEvent(msg: IncomingMessage): BotEvent { +export function toBotEvent(msg: IncomingMessage): BotEvent { + const date = new Date(msg.timestamp); return { type: "message", channel: String(msg.chatId), @@ -127,7 +128,7 @@ function toBotEvent(msg: IncomingMessage): BotEvent { }, text: msg.text, attachments: msg.attachments.map((a) => ({ url: a.url, filename: a.filename })), - timestamp: new Date(msg.timestamp).toISOString(), + timestamp: Number.isNaN(date.getTime()) ? new Date(0).toISOString() : date.toISOString(), raw: msg.raw, }; }