Skip to content

Commit 9e127b3

Browse files
CaptainTimonCaptainTimon
authored andcommitted
fix(nvidia): satisfy guarded catalog fetch
1 parent 7793c56 commit 9e127b3

2 files changed

Lines changed: 24 additions & 13 deletions

File tree

extensions/nvidia/provider-catalog.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import type {
33
ModelDefinitionConfig,
44
ModelProviderConfig,
55
} from "openclaw/plugin-sdk/provider-model-shared";
6+
import {
7+
fetchWithSsrFGuard,
8+
ssrfPolicyFromHttpBaseUrlAllowedHostname,
9+
} from "openclaw/plugin-sdk/ssrf-runtime";
610
import manifest from "./openclaw.plugin.json" with { type: "json" };
711

812
export const NVIDIA_DEFAULT_MODEL_ID = "nvidia/nemotron-3-super-120b-a12b";
@@ -82,13 +86,22 @@ async function loadNvidiaFeaturedModels(): Promise<ModelDefinitionConfig[] | nul
8286

8387
async function fetchNvidiaFeaturedModels(): Promise<ModelDefinitionConfig[] | null> {
8488
try {
85-
const response = await fetch(NVIDIA_FEATURED_MODELS_URL, {
86-
signal: AbortSignal.timeout(FEATURED_MODEL_FETCH_TIMEOUT_MS),
89+
const { response, release } = await fetchWithSsrFGuard({
90+
url: NVIDIA_FEATURED_MODELS_URL,
91+
init: {
92+
signal: AbortSignal.timeout(FEATURED_MODEL_FETCH_TIMEOUT_MS),
93+
},
94+
policy: ssrfPolicyFromHttpBaseUrlAllowedHostname(NVIDIA_FEATURED_MODELS_URL),
95+
auditContext: "nvidia-featured-model-catalog",
8796
});
88-
if (!response.ok) {
89-
return null;
97+
try {
98+
if (!response.ok) {
99+
return null;
100+
}
101+
return parseNvidiaFeaturedModels(await response.json());
102+
} finally {
103+
release();
90104
}
91-
return parseNvidiaFeaturedModels(await response.json());
92105
} catch {
93106
return null;
94107
}

src/gateway/server-cron.test.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
44
import type { CliDeps } from "../cli/deps.js";
55
import type { OpenClawConfig } from "../config/config.js";
66
import { SsrFBlockedError } from "../infra/net/ssrf.js";
7-
import { mergeMockedModule } from "../test-utils/vitest-module-mocks.js";
87

98
const {
109
enqueueSystemEventMock,
@@ -50,14 +49,13 @@ vi.mock("../infra/system-events.js", () => ({
5049
}));
5150

5251
vi.mock("../infra/heartbeat-wake.js", async () => {
53-
return await mergeMockedModule(
54-
await vi.importActual<typeof import("../infra/heartbeat-wake.js")>(
55-
"../infra/heartbeat-wake.js",
56-
),
57-
() => ({
58-
requestHeartbeat,
59-
}),
52+
const actual = await vi.importActual<typeof import("../infra/heartbeat-wake.js")>(
53+
"../infra/heartbeat-wake.js",
6054
);
55+
return {
56+
...actual,
57+
requestHeartbeat,
58+
};
6159
});
6260

6361
vi.mock("../infra/heartbeat-runner.js", () => ({

0 commit comments

Comments
 (0)