mirror of
https://github.com/coleam00/Archon
synced 2026-04-21 13:37:41 +00:00
fix: address review findings for grammY Telegram adapter
- Fix misleading 'unde***' log when ctx.from is undefined; use 'unknown' to match the Slack/Discord adapter pattern - Log post-startup bot runtime errors before reject() (no-op after onStart fires but errors are now visible in logs) - Add debug log when message is dropped due to no handler registered - Add stop() unit test to guard against grammY API rename regressions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
da1f8b7d97
commit
a5e5d5ceeb
2 changed files with 21 additions and 2 deletions
|
|
@ -234,6 +234,16 @@ describe('TelegramAdapter', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('stop()', () => {
|
||||
test('should call bot.stop()', () => {
|
||||
const adapter = new TelegramAdapter('fake-token-for-testing');
|
||||
const mockStop = mock(() => undefined);
|
||||
(adapter.getBot() as unknown as { stop: typeof mockStop }).stop = mockStop;
|
||||
adapter.stop();
|
||||
expect(mockStop).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('start()', () => {
|
||||
beforeEach(() => {
|
||||
mockLogger.warn.mockClear();
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ export class TelegramAdapter implements IPlatformAdapter {
|
|||
const userId = ctx.from?.id;
|
||||
if (!isUserAuthorized(userId, this.allowedUserIds)) {
|
||||
// Log unauthorized attempt (mask user ID for privacy)
|
||||
const maskedId = `${String(userId).slice(0, 4)}***`;
|
||||
const maskedId = userId !== undefined ? `${String(userId).slice(0, 4)}***` : 'unknown';
|
||||
getLog().info({ maskedUserId: maskedId }, 'telegram.unauthorized_message');
|
||||
return; // Silent rejection
|
||||
}
|
||||
|
|
@ -185,6 +185,11 @@ export class TelegramAdapter implements IPlatformAdapter {
|
|||
const conversationId = this.getConversationId(ctx);
|
||||
// Fire-and-forget - errors handled by caller
|
||||
void this.messageHandler({ conversationId, message, userId });
|
||||
} else {
|
||||
// Intentional: message dropped silently if handler not registered yet.
|
||||
// In production the server always calls onMessage() before start(); this
|
||||
// path only surfaces during development or misconfiguration.
|
||||
getLog().debug({ chatId: ctx.chat?.id }, 'telegram.message_dropped_no_handler');
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -208,7 +213,11 @@ export class TelegramAdapter implements IPlatformAdapter {
|
|||
},
|
||||
})
|
||||
.catch((err: unknown) => {
|
||||
reject(err instanceof Error ? err : new Error(String(err)));
|
||||
const error = err instanceof Error ? err : new Error(String(err));
|
||||
// Log post-startup crashes — after onStart fires the reject() below is a no-op
|
||||
// (Promise already settled), but the error should still be observable in logs.
|
||||
getLog().error({ err: error }, 'telegram.bot_runtime_error');
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
getLog().info('telegram.bot_started');
|
||||
|
|
|
|||
Loading…
Reference in a new issue