mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-25 16:26:46 +00:00
137 lines
4.3 KiB
TypeScript
137 lines
4.3 KiB
TypeScript
import { afterEach, describe, expect, it } from "vitest";
|
|
import type { OpenClawConfig } from "../config/types.openclaw.js";
|
|
import { resolveCommandSecretsFromActiveRuntimeSnapshot } from "./runtime-command-secrets.js";
|
|
import {
|
|
activateSecretsRuntimeSnapshot,
|
|
clearSecretsRuntimeSnapshot,
|
|
prepareSecretsRuntimeSnapshot,
|
|
} from "./runtime.js";
|
|
|
|
describe("runtime command secrets", () => {
|
|
const previousBundledPluginsDir = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR;
|
|
const previousTrustBundledPluginsDir = process.env.OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR;
|
|
|
|
afterEach(() => {
|
|
clearSecretsRuntimeSnapshot();
|
|
if (previousBundledPluginsDir === undefined) {
|
|
delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR;
|
|
} else {
|
|
process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = previousBundledPluginsDir;
|
|
}
|
|
if (previousTrustBundledPluginsDir === undefined) {
|
|
delete process.env.OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR;
|
|
} else {
|
|
process.env.OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR = previousTrustBundledPluginsDir;
|
|
}
|
|
});
|
|
|
|
it("returns forced fallback assignments from the active gateway snapshot", async () => {
|
|
process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = "extensions";
|
|
process.env.OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR = "1";
|
|
const config = {
|
|
tools: {
|
|
web: {
|
|
search: { enabled: false, provider: "brave" },
|
|
fetch: { provider: "firecrawl" },
|
|
},
|
|
},
|
|
plugins: {
|
|
entries: {
|
|
firecrawl: {
|
|
enabled: true,
|
|
config: {
|
|
webSearch: {
|
|
apiKey: {
|
|
source: "env",
|
|
provider: "default",
|
|
id: "FIRECRAWL_API_KEY",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
} as OpenClawConfig;
|
|
const snapshot = await prepareSecretsRuntimeSnapshot({
|
|
config,
|
|
env: {
|
|
FIRECRAWL_API_KEY: "gateway-only-firecrawl-key",
|
|
HOME: process.env.HOME,
|
|
OPENCLAW_BUNDLED_PLUGINS_DIR: "extensions",
|
|
OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR: "1",
|
|
},
|
|
});
|
|
activateSecretsRuntimeSnapshot(snapshot);
|
|
|
|
const resolved = await resolveCommandSecretsFromActiveRuntimeSnapshot({
|
|
commandName: "infer web fetch",
|
|
targetIds: new Set(["plugins.entries.firecrawl.config.webSearch.apiKey"]),
|
|
forcedActivePaths: new Set(["plugins.entries.firecrawl.config.webSearch.apiKey"]),
|
|
});
|
|
|
|
expect(resolved.assignments).toMatchObject([
|
|
{
|
|
path: "plugins.entries.firecrawl.config.webSearch.apiKey",
|
|
value: "gateway-only-firecrawl-key",
|
|
},
|
|
]);
|
|
expect(resolved.diagnostics).toEqual([]);
|
|
expect(resolved.inactiveRefPaths).toEqual([]);
|
|
});
|
|
|
|
it("re-resolves forced command-selected web provider paths with gateway env", async () => {
|
|
process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = "extensions";
|
|
process.env.OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR = "1";
|
|
const firecrawlPath = "plugins.entries.firecrawl.config.webSearch.apiKey";
|
|
const config = {
|
|
tools: {
|
|
web: {
|
|
search: { enabled: true, provider: "exa" },
|
|
},
|
|
},
|
|
plugins: {
|
|
entries: {
|
|
firecrawl: {
|
|
enabled: false,
|
|
config: {
|
|
webSearch: {
|
|
apiKey: {
|
|
source: "env",
|
|
provider: "default",
|
|
id: "FIRECRAWL_API_KEY",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
} as OpenClawConfig;
|
|
const snapshot = await prepareSecretsRuntimeSnapshot({
|
|
config,
|
|
env: {
|
|
FIRECRAWL_API_KEY: "gateway-selected-firecrawl-key",
|
|
HOME: process.env.HOME,
|
|
OPENCLAW_BUNDLED_PLUGINS_DIR: "extensions",
|
|
OPENCLAW_TEST_TRUST_BUNDLED_PLUGINS_DIR: "1",
|
|
},
|
|
});
|
|
activateSecretsRuntimeSnapshot(snapshot);
|
|
|
|
const resolved = await resolveCommandSecretsFromActiveRuntimeSnapshot({
|
|
commandName: "infer web search",
|
|
targetIds: new Set([firecrawlPath]),
|
|
allowedPaths: new Set([firecrawlPath]),
|
|
forcedActivePaths: new Set([firecrawlPath]),
|
|
});
|
|
|
|
expect(resolved.assignments).toMatchObject([
|
|
{
|
|
path: firecrawlPath,
|
|
value: "gateway-selected-firecrawl-key",
|
|
},
|
|
]);
|
|
expect(resolved.diagnostics).toEqual([]);
|
|
expect(resolved.inactiveRefPaths).toEqual([]);
|
|
});
|
|
});
|