Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion packages/bridges/telegram/src/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { afterEach, describe, expect, it, vi } from 'vitest';
import { contractTestBridge } from '@profullstack/sh1pt-core/testing';
import adapter from './index.js';
import adapter, { telegramTimestamp } from './index.js';

contractTestBridge(adapter, {
sampleConfig: {},
Expand All @@ -11,6 +11,18 @@ afterEach(() => {
vi.restoreAllMocks();
});

describe('telegramTimestamp', () => {
it('maps valid Unix seconds to ISO timestamps', () => {
expect(telegramTimestamp(1_779_321_600)).toBe('2026-05-21T00:00:00.000Z');
});

it('falls back instead of throwing for invalid or out-of-range dates', () => {
for (const value of [undefined, Number.NaN, Number.POSITIVE_INFINITY, 1e20]) {
expect(telegramTimestamp(value)).toBe('1970-01-01T00:00:00.000Z');
}
});
});

describe('bridge-telegram Bot API integration', () => {
it('sends relayed messages through sendMessage', async () => {
const fetchMock = vi.spyOn(globalThis, 'fetch').mockResolvedValue({
Expand Down
8 changes: 7 additions & 1 deletion packages/bridges/telegram/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,17 @@ function toBridgeMessage(message: TelegramMessage): BridgeMessage {
text: message.text ?? message.caption ?? '',
replyToId: message.reply_to_message?.message_id ? String(message.reply_to_message.message_id) : undefined,
attachments: telegramAttachments(message),
timestamp: new Date(message.date * 1000).toISOString(),
timestamp: telegramTimestamp(message.date),
originalNetwork: 'telegram',
};
}

export function telegramTimestamp(seconds: number | undefined): string {
if (typeof seconds !== 'number' || !Number.isFinite(seconds)) return new Date(0).toISOString();
const date = new Date(seconds * 1000);
return Number.isNaN(date.getTime()) ? new Date(0).toISOString() : date.toISOString();
}

function telegramUsername(user: TelegramUser | TelegramChat): string {
if ('username' in user && user.username) return user.username;
if ('first_name' in user) return [user.first_name, user.last_name].filter(Boolean).join(' ');
Expand Down
Loading