mirror of https://github.com/openclaw/openclaw.git
refactor: share browser route helpers
This commit is contained in:
parent
614844c9fe
commit
97aa786dd5
|
|
@ -122,6 +122,27 @@ async function renderChromeMcpLabels(params: {
|
|||
return { labels, skipped };
|
||||
}
|
||||
|
||||
async function saveNormalizedScreenshotResponse(params: {
|
||||
res: BrowserResponse;
|
||||
buffer: Buffer;
|
||||
type: "png" | "jpeg";
|
||||
targetId: string;
|
||||
url: string;
|
||||
}) {
|
||||
const normalized = await normalizeBrowserScreenshot(params.buffer, {
|
||||
maxSide: DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE,
|
||||
maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES,
|
||||
});
|
||||
await saveBrowserMediaResponse({
|
||||
res: params.res,
|
||||
buffer: normalized.buffer,
|
||||
contentType: normalized.contentType ?? `image/${params.type}`,
|
||||
maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES,
|
||||
targetId: params.targetId,
|
||||
url: params.url,
|
||||
});
|
||||
}
|
||||
|
||||
async function saveBrowserMediaResponse(params: {
|
||||
res: BrowserResponse;
|
||||
buffer: Buffer;
|
||||
|
|
@ -305,15 +326,10 @@ export function registerBrowserAgentSnapshotRoutes(
|
|||
fullPage,
|
||||
format: type,
|
||||
});
|
||||
const normalized = await normalizeBrowserScreenshot(buffer, {
|
||||
maxSide: DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE,
|
||||
maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES,
|
||||
});
|
||||
await saveBrowserMediaResponse({
|
||||
await saveNormalizedScreenshotResponse({
|
||||
res,
|
||||
buffer: normalized.buffer,
|
||||
contentType: normalized.contentType ?? `image/${type}`,
|
||||
maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES,
|
||||
buffer,
|
||||
type,
|
||||
targetId: tab.targetId,
|
||||
url: tab.url,
|
||||
});
|
||||
|
|
@ -350,15 +366,10 @@ export function registerBrowserAgentSnapshotRoutes(
|
|||
});
|
||||
}
|
||||
|
||||
const normalized = await normalizeBrowserScreenshot(buffer, {
|
||||
maxSide: DEFAULT_BROWSER_SCREENSHOT_MAX_SIDE,
|
||||
maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES,
|
||||
});
|
||||
await saveBrowserMediaResponse({
|
||||
await saveNormalizedScreenshotResponse({
|
||||
res,
|
||||
buffer: normalized.buffer,
|
||||
contentType: normalized.contentType ?? `image/${type}`,
|
||||
maxBytes: DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES,
|
||||
buffer,
|
||||
type,
|
||||
targetId: tab.targetId,
|
||||
url: tab.url,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -7,6 +7,14 @@ import { resolveProfileContext } from "./agent.shared.js";
|
|||
import type { BrowserRequest, BrowserResponse, BrowserRouteRegistrar } from "./types.js";
|
||||
import { getProfileContext, jsonError, toStringOrEmpty } from "./utils.js";
|
||||
|
||||
function handleBrowserRouteError(res: BrowserResponse, err: unknown) {
|
||||
const mapped = toBrowserErrorResponse(err);
|
||||
if (mapped) {
|
||||
return jsonError(res, mapped.status, mapped.message);
|
||||
}
|
||||
jsonError(res, 500, String(err));
|
||||
}
|
||||
|
||||
async function withBasicProfileRoute(params: {
|
||||
req: BrowserRequest;
|
||||
res: BrowserResponse;
|
||||
|
|
@ -20,11 +28,21 @@ async function withBasicProfileRoute(params: {
|
|||
try {
|
||||
await params.run(profileCtx);
|
||||
} catch (err) {
|
||||
const mapped = toBrowserErrorResponse(err);
|
||||
if (mapped) {
|
||||
return jsonError(params.res, mapped.status, mapped.message);
|
||||
}
|
||||
jsonError(params.res, 500, String(err));
|
||||
return handleBrowserRouteError(params.res, err);
|
||||
}
|
||||
}
|
||||
|
||||
async function withProfilesServiceMutation(params: {
|
||||
res: BrowserResponse;
|
||||
ctx: BrowserRouteContext;
|
||||
run: (service: ReturnType<typeof createBrowserProfilesService>) => Promise<unknown>;
|
||||
}) {
|
||||
try {
|
||||
const service = createBrowserProfilesService(params.ctx);
|
||||
const result = await params.run(service);
|
||||
params.res.json(result);
|
||||
} catch (err) {
|
||||
return handleBrowserRouteError(params.res, err);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -166,27 +184,22 @@ export function registerBrowserBasicRoutes(app: BrowserRouteRegistrar, ctx: Brow
|
|||
return jsonError(res, 400, "name is required");
|
||||
}
|
||||
|
||||
try {
|
||||
const service = createBrowserProfilesService(ctx);
|
||||
const result = await service.createProfile({
|
||||
name,
|
||||
color: color || undefined,
|
||||
cdpUrl: cdpUrl || undefined,
|
||||
driver:
|
||||
driver === "extension"
|
||||
? "extension"
|
||||
: driver === "existing-session"
|
||||
? "existing-session"
|
||||
: undefined,
|
||||
});
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
const mapped = toBrowserErrorResponse(err);
|
||||
if (mapped) {
|
||||
return jsonError(res, mapped.status, mapped.message);
|
||||
}
|
||||
jsonError(res, 500, String(err));
|
||||
}
|
||||
await withProfilesServiceMutation({
|
||||
res,
|
||||
ctx,
|
||||
run: async (service) =>
|
||||
await service.createProfile({
|
||||
name,
|
||||
color: color || undefined,
|
||||
cdpUrl: cdpUrl || undefined,
|
||||
driver:
|
||||
driver === "extension"
|
||||
? "extension"
|
||||
: driver === "existing-session"
|
||||
? "existing-session"
|
||||
: undefined,
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
// Delete a profile
|
||||
|
|
@ -196,16 +209,10 @@ export function registerBrowserBasicRoutes(app: BrowserRouteRegistrar, ctx: Brow
|
|||
return jsonError(res, 400, "profile name is required");
|
||||
}
|
||||
|
||||
try {
|
||||
const service = createBrowserProfilesService(ctx);
|
||||
const result = await service.deleteProfile(name);
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
const mapped = toBrowserErrorResponse(err);
|
||||
if (mapped) {
|
||||
return jsonError(res, mapped.status, mapped.message);
|
||||
}
|
||||
jsonError(res, 500, String(err));
|
||||
}
|
||||
await withProfilesServiceMutation({
|
||||
res,
|
||||
ctx,
|
||||
run: async (service) => await service.deleteProfile(name),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue