From 5bedf61d8bed3eaec29084e96e704a1d732fe6e9 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sun, 22 Feb 2026 10:45:07 +0530 Subject: [PATCH] fix: memoize telegram WSL2 autoSelectFamily decision --- src/telegram/network-config.test.ts | 14 +++++++++++++- src/telegram/network-config.ts | 16 +++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/telegram/network-config.test.ts b/src/telegram/network-config.test.ts index 89d91a7b55b..e8abe83efef 100644 --- a/src/telegram/network-config.test.ts +++ b/src/telegram/network-config.test.ts @@ -1,5 +1,8 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { resolveTelegramAutoSelectFamilyDecision } from "./network-config.js"; +import { + resetTelegramNetworkConfigStateForTests, + resolveTelegramAutoSelectFamilyDecision, +} from "./network-config.js"; // Mock isWSL2Sync at the top level vi.mock("../infra/wsl.js", () => ({ @@ -11,6 +14,7 @@ import { isWSL2Sync } from "../infra/wsl.js"; describe("resolveTelegramAutoSelectFamilyDecision", () => { afterEach(() => { vi.restoreAllMocks(); + resetTelegramNetworkConfigStateForTests(); }); it("prefers env enable over env disable", () => { @@ -115,5 +119,13 @@ describe("resolveTelegramAutoSelectFamilyDecision", () => { const decision = resolveTelegramAutoSelectFamilyDecision({ env: {}, nodeMajor: 22 }); expect(decision).toEqual({ value: true, source: "default-node22" }); }); + + it("memoizes WSL2 detection across repeated defaults", () => { + vi.mocked(isWSL2Sync).mockReset(); + vi.mocked(isWSL2Sync).mockReturnValue(false); + resolveTelegramAutoSelectFamilyDecision({ env: {}, nodeMajor: 22 }); + resolveTelegramAutoSelectFamilyDecision({ env: {}, nodeMajor: 22 }); + expect(isWSL2Sync).toHaveBeenCalledTimes(1); + }); }); }); diff --git a/src/telegram/network-config.ts b/src/telegram/network-config.ts index a4d0a527e98..27815e8d8f4 100644 --- a/src/telegram/network-config.ts +++ b/src/telegram/network-config.ts @@ -12,6 +12,16 @@ export type TelegramAutoSelectFamilyDecision = { source?: string; }; +let wsl2SyncCache: boolean | undefined; + +function isWSL2SyncCached(): boolean { + if (typeof wsl2SyncCache === "boolean") { + return wsl2SyncCache; + } + wsl2SyncCache = isWSL2Sync(); + return wsl2SyncCache; +} + export function resolveTelegramAutoSelectFamilyDecision(params?: { network?: TelegramNetworkConfig; env?: NodeJS.ProcessEnv; @@ -33,7 +43,7 @@ export function resolveTelegramAutoSelectFamilyDecision(params?: { return { value: params.network.autoSelectFamily, source: "config" }; } // WSL2 has unstable IPv6 connectivity; disable autoSelectFamily to use IPv4 directly - if (isWSL2Sync()) { + if (isWSL2SyncCached()) { return { value: false, source: "default-wsl2" }; } if (Number.isFinite(nodeMajor) && nodeMajor >= 22) { @@ -41,3 +51,7 @@ export function resolveTelegramAutoSelectFamilyDecision(params?: { } return { value: null }; } + +export function resetTelegramNetworkConfigStateForTests(): void { + wsl2SyncCache = undefined; +}