From dbfdf60a42aec502d24aba41d7ad4e62265c41dc Mon Sep 17 00:00:00 2001 From: Harold Hunt Date: Thu, 26 Feb 2026 08:40:33 -0500 Subject: [PATCH] fix(telegram): Allow ephemeral webhookPort --- src/config/telegram-webhook-port.test.ts | 15 ++++++++++++++- src/config/zod-schema.providers-core.ts | 6 ++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/config/telegram-webhook-port.test.ts b/src/config/telegram-webhook-port.test.ts index c7dd79237fd..80fdf3a5ce8 100644 --- a/src/config/telegram-webhook-port.test.ts +++ b/src/config/telegram-webhook-port.test.ts @@ -15,7 +15,7 @@ describe("Telegram webhookPort config", () => { expect(res.ok).toBe(true); }); - it("rejects non-positive webhookPort", () => { + it("accepts webhookPort set to 0 for ephemeral port binding", () => { const res = validateConfigObject({ channels: { telegram: { @@ -25,6 +25,19 @@ describe("Telegram webhookPort config", () => { }, }, }); + expect(res.ok).toBe(true); + }); + + it("rejects negative webhookPort", () => { + const res = validateConfigObject({ + channels: { + telegram: { + webhookUrl: "https://example.com/telegram-webhook", + webhookSecret: "secret", + webhookPort: -1, + }, + }, + }); expect(res.ok).toBe(false); if (!res.ok) { expect(res.issues.some((issue) => issue.path === "channels.telegram.webhookPort")).toBe(true); diff --git a/src/config/zod-schema.providers-core.ts b/src/config/zod-schema.providers-core.ts index 971418d8d3d..2d90ee56c5b 100644 --- a/src/config/zod-schema.providers-core.ts +++ b/src/config/zod-schema.providers-core.ts @@ -193,9 +193,11 @@ export const TelegramAccountSchemaBase = z webhookPort: z .number() .int() - .positive() + .nonnegative() .optional() - .describe("Local bind port for the webhook listener. Defaults to 8787."), + .describe( + "Local bind port for the webhook listener. Defaults to 8787; set to 0 to let the OS assign an ephemeral port.", + ), actions: z .object({ reactions: z.boolean().optional(),