mirror of
https://github.com/moltbot/moltbot.git
synced 2026-03-21 16:41:56 +00:00
fix: memoize telegram WSL2 autoSelectFamily decision
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user