mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-23 20:48:11 +00:00
refactor(gateway): dedupe auth and discord monitor suites
This commit is contained in:
@@ -352,6 +352,26 @@ function respondWorkspaceFileInvalid(respond: RespondFn, name: string, reason: s
|
||||
);
|
||||
}
|
||||
|
||||
async function resolveWorkspaceFilePathOrRespond(params: {
|
||||
respond: RespondFn;
|
||||
workspaceDir: string;
|
||||
name: string;
|
||||
}): Promise<
|
||||
| Exclude<Awaited<ReturnType<typeof resolveAgentWorkspaceFilePath>>, { kind: "invalid" }>
|
||||
| undefined
|
||||
> {
|
||||
const resolvedPath = await resolveAgentWorkspaceFilePath({
|
||||
workspaceDir: params.workspaceDir,
|
||||
name: params.name,
|
||||
allowMissing: true,
|
||||
});
|
||||
if (resolvedPath.kind === "invalid") {
|
||||
respondWorkspaceFileInvalid(params.respond, params.name, resolvedPath.reason);
|
||||
return undefined;
|
||||
}
|
||||
return resolvedPath;
|
||||
}
|
||||
|
||||
function respondWorkspaceFileUnsafe(respond: RespondFn, name: string): void {
|
||||
respond(
|
||||
false,
|
||||
@@ -629,13 +649,12 @@ export const agentsHandlers: GatewayRequestHandlers = {
|
||||
}
|
||||
const { agentId, workspaceDir, name } = resolved;
|
||||
const filePath = path.join(workspaceDir, name);
|
||||
const resolvedPath = await resolveAgentWorkspaceFilePath({
|
||||
const resolvedPath = await resolveWorkspaceFilePathOrRespond({
|
||||
respond,
|
||||
workspaceDir,
|
||||
name,
|
||||
allowMissing: true,
|
||||
});
|
||||
if (resolvedPath.kind === "invalid") {
|
||||
respondWorkspaceFileInvalid(respond, name, resolvedPath.reason);
|
||||
if (!resolvedPath) {
|
||||
return;
|
||||
}
|
||||
if (resolvedPath.kind === "missing") {
|
||||
@@ -691,13 +710,12 @@ export const agentsHandlers: GatewayRequestHandlers = {
|
||||
const { agentId, workspaceDir, name } = resolved;
|
||||
await fs.mkdir(workspaceDir, { recursive: true });
|
||||
const filePath = path.join(workspaceDir, name);
|
||||
const resolvedPath = await resolveAgentWorkspaceFilePath({
|
||||
const resolvedPath = await resolveWorkspaceFilePathOrRespond({
|
||||
respond,
|
||||
workspaceDir,
|
||||
name,
|
||||
allowMissing: true,
|
||||
});
|
||||
if (resolvedPath.kind === "invalid") {
|
||||
respondWorkspaceFileInvalid(respond, name, resolvedPath.reason);
|
||||
if (!resolvedPath) {
|
||||
return;
|
||||
}
|
||||
const content = String(params.content ?? "");
|
||||
|
||||
@@ -1,20 +1,29 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { createSecretsHandlers } from "./secrets.js";
|
||||
|
||||
async function invokeSecretsReload(params: {
|
||||
handlers: ReturnType<typeof createSecretsHandlers>;
|
||||
respond: ReturnType<typeof vi.fn>;
|
||||
}) {
|
||||
await params.handlers["secrets.reload"]({
|
||||
req: { type: "req", id: "1", method: "secrets.reload" },
|
||||
params: {},
|
||||
client: null,
|
||||
isWebchatConnect: () => false,
|
||||
respond: params.respond as unknown as Parameters<
|
||||
ReturnType<typeof createSecretsHandlers>["secrets.reload"]
|
||||
>[0]["respond"],
|
||||
context: {} as never,
|
||||
});
|
||||
}
|
||||
|
||||
describe("secrets handlers", () => {
|
||||
it("responds with warning count on successful reload", async () => {
|
||||
const handlers = createSecretsHandlers({
|
||||
reloadSecrets: vi.fn().mockResolvedValue({ warningCount: 2 }),
|
||||
});
|
||||
const respond = vi.fn();
|
||||
await handlers["secrets.reload"]({
|
||||
req: { type: "req", id: "1", method: "secrets.reload" },
|
||||
params: {},
|
||||
client: null,
|
||||
isWebchatConnect: () => false,
|
||||
respond,
|
||||
context: {} as never,
|
||||
});
|
||||
await invokeSecretsReload({ handlers, respond });
|
||||
expect(respond).toHaveBeenCalledWith(true, { ok: true, warningCount: 2 });
|
||||
});
|
||||
|
||||
@@ -23,14 +32,7 @@ describe("secrets handlers", () => {
|
||||
reloadSecrets: vi.fn().mockRejectedValue(new Error("reload failed")),
|
||||
});
|
||||
const respond = vi.fn();
|
||||
await handlers["secrets.reload"]({
|
||||
req: { type: "req", id: "1", method: "secrets.reload" },
|
||||
params: {},
|
||||
client: null,
|
||||
isWebchatConnect: () => false,
|
||||
respond,
|
||||
context: {} as never,
|
||||
});
|
||||
await invokeSecretsReload({ handlers, respond });
|
||||
expect(respond).toHaveBeenCalledWith(
|
||||
false,
|
||||
undefined,
|
||||
|
||||
Reference in New Issue
Block a user