

























@@ -43,6 +43,22 @@ vi.mock("./provider-request-config.js", () => ({
4343resolveProviderRequestPolicyConfig: resolveProviderRequestPolicyConfigMock,
4444}));
454546+function latestGuardedFetchParams(): Record<string, unknown> {
47+const params = fetchWithSsrFGuardMock.mock.calls.at(-1)?.[0];
48+if (!params || typeof params !== "object") {
49+throw new Error("Expected guarded fetch call");
50+}
51+return params;
52+}
53+54+function latestTrustedEnvProxyParams(): Record<string, unknown> {
55+const params = withTrustedEnvProxyGuardedFetchModeMock.mock.calls.at(-1)?.[0];
56+if (!params || typeof params !== "object") {
57+throw new Error("Expected trusted env proxy call");
58+}
59+return params;
60+}
61+4662describe("buildGuardedModelFetch", () => {
4763beforeEach(() => {
4864fetchWithSsrFGuardMock.mockReset().mockResolvedValue({
@@ -81,18 +97,15 @@ describe("buildGuardedModelFetch", () => {
8197body: '{"input":"hello"}',
8298});
839984-expect(fetchWithSsrFGuardMock).toHaveBeenCalledWith(
85-expect.objectContaining({
86-url: "https://api.openai.com/v1/responses",
87-capture: {
88-meta: {
89-provider: "openai",
90-api: "openai-responses",
91-model: "gpt-5.4",
92-},
93-},
94-}),
95-);
100+const params = latestGuardedFetchParams();
101+expect(params.url).toBe("https://api.openai.com/v1/responses");
102+expect(params.capture).toEqual({
103+meta: {
104+provider: "openai",
105+api: "openai-responses",
106+model: "gpt-5.4",
107+},
108+});
96109});
9711098111it("scopes fake-IP DNS exemptions to the configured provider host", async () => {
@@ -168,23 +181,18 @@ describe("buildGuardedModelFetch", () => {
168181expect(shouldUseEnvHttpProxyForUrlMock).toHaveBeenCalledWith(
169182"https://api.openai.com/v1/responses",
170183);
171-expect(withTrustedEnvProxyGuardedFetchModeMock).toHaveBeenCalledWith(
172-expect.objectContaining({
173-url: "https://api.openai.com/v1/responses",
174-dispatcherPolicy: undefined,
175-policy: {
176-allowRfc2544BenchmarkRange: true,
177-allowIpv6UniqueLocalRange: true,
178-hostnameAllowlist: ["api.openai.com"],
179-},
180-}),
181-);
182-expect(fetchWithSsrFGuardMock).toHaveBeenCalledWith(
183-expect.objectContaining({
184-url: "https://api.openai.com/v1/responses",
185-mode: "trusted_env_proxy",
186-}),
187-);
184+const trustedParams = latestTrustedEnvProxyParams();
185+expect(trustedParams.url).toBe("https://api.openai.com/v1/responses");
186+expect(trustedParams.dispatcherPolicy).toBeUndefined();
187+expect(trustedParams.policy).toEqual({
188+allowRfc2544BenchmarkRange: true,
189+allowIpv6UniqueLocalRange: true,
190+hostnameAllowlist: ["api.openai.com"],
191+});
192+193+const guardedParams = latestGuardedFetchParams();
194+expect(guardedParams.url).toBe("https://api.openai.com/v1/responses");
195+expect(guardedParams.mode).toBe("trusted_env_proxy");
188196});
189197190198it("keeps explicit provider dispatcher policies in strict guarded-fetch mode", async () => {
@@ -201,11 +209,7 @@ describe("buildGuardedModelFetch", () => {
201209await fetcher("https://api.openai.com/v1/responses", { method: "POST" });
202210203211expect(withTrustedEnvProxyGuardedFetchModeMock).not.toHaveBeenCalled();
204-expect(fetchWithSsrFGuardMock).toHaveBeenCalledWith(
205-expect.objectContaining({
206-dispatcherPolicy: { mode: "direct" },
207-}),
208-);
212+expect(latestGuardedFetchParams().dispatcherPolicy).toEqual({ mode: "direct" });
209213});
210214211215it("threads explicit transport timeouts into the shared guarded fetch seam", async () => {
@@ -219,11 +223,7 @@ describe("buildGuardedModelFetch", () => {
219223const fetcher = buildGuardedModelFetch(model, 123_456);
220224await fetcher("https://api.openai.com/v1/responses", { method: "POST" });
221225222-expect(fetchWithSsrFGuardMock).toHaveBeenCalledWith(
223-expect.objectContaining({
224-timeoutMs: 123_456,
225-}),
226-);
226+expect(latestGuardedFetchParams().timeoutMs).toBe(123_456);
227227});
228228229229it("threads resolved provider timeout metadata into the shared guarded fetch seam", async () => {
@@ -238,11 +238,7 @@ describe("buildGuardedModelFetch", () => {
238238const fetcher = buildGuardedModelFetch(model);
239239await fetcher("http://127.0.0.1:11434/api/chat", { method: "POST" });
240240241-expect(fetchWithSsrFGuardMock).toHaveBeenCalledWith(
242-expect.objectContaining({
243-timeoutMs: 300_000,
244-}),
245-);
241+expect(latestGuardedFetchParams().timeoutMs).toBe(300_000);
246242});
247243248244it("does not force explicit debug proxy overrides onto plain HTTP model transports", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。