diff --git a/extensions/telegram/src/fetch.test.ts b/extensions/telegram/src/fetch.test.ts index 7514abb5ccb..bc7d581d4f4 100644 --- a/extensions/telegram/src/fetch.test.ts +++ b/extensions/telegram/src/fetch.test.ts @@ -281,6 +281,11 @@ function expectStickyAutoSelectDispatcher( expect(options?.autoSelectFamilyAttemptTimeout).toBe(300); } +function expectTelegramKeepAliveOptions(options: Record | undefined): void { + expect(options?.keepAlive).toBe(true); + expect(options?.keepAliveInitialDelay).toBe(30_000); +} + function expectHttp1OnlyDispatcher( dispatcher: | { @@ -424,6 +429,7 @@ describe("resolveTelegramFetch", () => { expectHttp1OnlyDispatcher(dispatcher); expect(dispatcher?.options?.connect?.autoSelectFamily).toBe(true); expect(dispatcher?.options?.connect?.autoSelectFamilyAttemptTimeout).toBe(300); + expectTelegramKeepAliveOptions(dispatcher?.options?.connect); expect(typeof dispatcher?.options?.connect?.lookup).toBe("function"); }); @@ -460,8 +466,10 @@ describe("resolveTelegramFetch", () => { expectHttp1OnlyDispatcher(dispatcher); expect(dispatcher?.options?.connect?.autoSelectFamily).toBe(false); expect(dispatcher?.options?.connect?.autoSelectFamilyAttemptTimeout).toBe(300); + expectTelegramKeepAliveOptions(dispatcher?.options?.connect); expect(dispatcher?.options?.proxyTls?.autoSelectFamily).toBe(false); expect(dispatcher?.options?.proxyTls?.autoSelectFamilyAttemptTimeout).toBe(300); + expectTelegramKeepAliveOptions(dispatcher?.options?.proxyTls); }); it("adds managed proxy CA trust to Telegram env proxy dispatchers", async () => { diff --git a/extensions/telegram/src/fetch.ts b/extensions/telegram/src/fetch.ts index 460f8694a3f..655b4f9896d 100644 --- a/extensions/telegram/src/fetch.ts +++ b/extensions/telegram/src/fetch.ts @@ -159,6 +159,8 @@ function createDnsResultOrderLookup( }; } +const TELEGRAM_KEEPALIVE_INITIAL_DELAY_MS = 30_000; + function buildTelegramConnectOptions(params: { autoSelectFamily: boolean | null; dnsResultOrder: TelegramDnsResultOrder | null; @@ -167,14 +169,21 @@ function buildTelegramConnectOptions(params: { autoSelectFamily?: boolean; autoSelectFamilyAttemptTimeout?: number; family?: number; + keepAlive?: boolean; + keepAliveInitialDelay?: number; lookup?: LookupFunction; -} | null { +} { const connect: { autoSelectFamily?: boolean; autoSelectFamilyAttemptTimeout?: number; family?: number; + keepAlive?: boolean; + keepAliveInitialDelay?: number; lookup?: LookupFunction; - } = {}; + } = { + keepAlive: true, + keepAliveInitialDelay: TELEGRAM_KEEPALIVE_INITIAL_DELAY_MS, + }; if (params.forceIpv4) { connect.family = 4; @@ -189,7 +198,7 @@ function buildTelegramConnectOptions(params: { connect.lookup = lookup; } - return Object.keys(connect).length > 0 ? connect : null; + return connect; } function shouldBypassEnvProxyForTelegramApi(env: NodeJS.ProcessEnv = process.env): boolean { @@ -252,18 +261,12 @@ function resolveTelegramDispatcherPolicy(params: { const explicitProxyUrl = params.proxyUrl?.trim(); if (explicitProxyUrl) { return { - policy: connect - ? { - mode: "explicit-proxy", - proxyUrl: explicitProxyUrl, - allowPrivateProxy: true, - proxyTls: { ...connect }, - } - : { - mode: "explicit-proxy", - proxyUrl: explicitProxyUrl, - allowPrivateProxy: true, - }, + policy: { + mode: "explicit-proxy", + proxyUrl: explicitProxyUrl, + allowPrivateProxy: true, + proxyTls: { ...connect }, + }, mode: "explicit-proxy", }; } @@ -271,7 +274,8 @@ function resolveTelegramDispatcherPolicy(params: { return { policy: { mode: "env-proxy", - ...(connect ? { connect: { ...connect }, proxyTls: { ...connect } } : {}), + connect: { ...connect }, + proxyTls: { ...connect }, }, mode: "env-proxy", }; @@ -279,7 +283,7 @@ function resolveTelegramDispatcherPolicy(params: { return { policy: { mode: "direct", - ...(connect ? { connect: { ...connect } } : {}), + connect: { ...connect }, }, mode: "direct", };