refactor(channels): dedupe transport and gateway test scaffolds

This commit is contained in:
Peter Steinberger
2026-02-16 14:52:15 +00:00
parent f717a13039
commit 93ca0ed54f
95 changed files with 4068 additions and 5221 deletions

View File

@@ -3,6 +3,23 @@ import type { BrowserRouteRegistrar } from "./types.js";
import { handleRouteError, readBody, requirePwAi, resolveProfileContext } from "./agent.shared.js";
import { jsonError, toBoolean, toNumber, toStringOrEmpty } from "./utils.js";
type StorageKind = "local" | "session";
function resolveBodyTargetId(body: unknown): string | undefined {
if (!body || typeof body !== "object" || Array.isArray(body)) {
return undefined;
}
const targetId = toStringOrEmpty((body as Record<string, unknown>).targetId);
return targetId || undefined;
}
function parseStorageKind(raw: string): StorageKind | null {
if (raw === "local" || raw === "session") {
return raw;
}
return null;
}
export function registerBrowserAgentStorageRoutes(
app: BrowserRouteRegistrar,
ctx: BrowserRouteContext,
@@ -35,7 +52,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const cookie =
body.cookie && typeof body.cookie === "object" && !Array.isArray(body.cookie)
? (body.cookie as Record<string, unknown>)
@@ -79,7 +96,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
try {
const tab = await profileCtx.ensureTabAvailable(targetId);
const pw = await requirePwAi(res, "cookies clear");
@@ -101,8 +118,8 @@ export function registerBrowserAgentStorageRoutes(
if (!profileCtx) {
return;
}
const kind = toStringOrEmpty(req.params.kind);
if (kind !== "local" && kind !== "session") {
const kind = parseStorageKind(toStringOrEmpty(req.params.kind));
if (!kind) {
return jsonError(res, 400, "kind must be local|session");
}
const targetId = typeof req.query.targetId === "string" ? req.query.targetId.trim() : "";
@@ -130,12 +147,12 @@ export function registerBrowserAgentStorageRoutes(
if (!profileCtx) {
return;
}
const kind = toStringOrEmpty(req.params.kind);
if (kind !== "local" && kind !== "session") {
const kind = parseStorageKind(toStringOrEmpty(req.params.kind));
if (!kind) {
return jsonError(res, 400, "kind must be local|session");
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const key = toStringOrEmpty(body.key);
if (!key) {
return jsonError(res, 400, "key is required");
@@ -165,12 +182,12 @@ export function registerBrowserAgentStorageRoutes(
if (!profileCtx) {
return;
}
const kind = toStringOrEmpty(req.params.kind);
if (kind !== "local" && kind !== "session") {
const kind = parseStorageKind(toStringOrEmpty(req.params.kind));
if (!kind) {
return jsonError(res, 400, "kind must be local|session");
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
try {
const tab = await profileCtx.ensureTabAvailable(targetId);
const pw = await requirePwAi(res, "storage clear");
@@ -194,7 +211,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const offline = toBoolean(body.offline);
if (offline === undefined) {
return jsonError(res, 400, "offline is required");
@@ -222,7 +239,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const headers =
body.headers && typeof body.headers === "object" && !Array.isArray(body.headers)
? (body.headers as Record<string, unknown>)
@@ -259,7 +276,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const clear = toBoolean(body.clear) ?? false;
const username = toStringOrEmpty(body.username) || undefined;
const password = typeof body.password === "string" ? body.password : undefined;
@@ -288,7 +305,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const clear = toBoolean(body.clear) ?? false;
const latitude = toNumber(body.latitude);
const longitude = toNumber(body.longitude);
@@ -321,7 +338,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const schemeRaw = toStringOrEmpty(body.colorScheme);
const colorScheme =
schemeRaw === "dark" || schemeRaw === "light" || schemeRaw === "no-preference"
@@ -355,7 +372,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const timezoneId = toStringOrEmpty(body.timezoneId);
if (!timezoneId) {
return jsonError(res, 400, "timezoneId is required");
@@ -383,7 +400,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const locale = toStringOrEmpty(body.locale);
if (!locale) {
return jsonError(res, 400, "locale is required");
@@ -411,7 +428,7 @@ export function registerBrowserAgentStorageRoutes(
return;
}
const body = readBody(req);
const targetId = toStringOrEmpty(body.targetId) || undefined;
const targetId = resolveBodyTargetId(body);
const name = toStringOrEmpty(body.name);
if (!name) {
return jsonError(res, 400, "name is required");