Spaces:
Paused
Paused
| import type { PwAiModule } from "../pw-ai-module.js"; | |
| import type { BrowserRouteContext, ProfileContext } from "../server-context.js"; | |
| import type { BrowserRequest, BrowserResponse } from "./types.js"; | |
| import { getPwAiModule as getPwAiModuleBase } from "../pw-ai-module.js"; | |
| import { getProfileContext, jsonError } from "./utils.js"; | |
| export const SELECTOR_UNSUPPORTED_MESSAGE = [ | |
| "Error: 'selector' is not supported. Use 'ref' from snapshot instead.", | |
| "", | |
| "Example workflow:", | |
| "1. snapshot action to get page state with refs", | |
| '2. act with ref: "e123" to interact with element', | |
| "", | |
| "This is more reliable for modern SPAs.", | |
| ].join("\n"); | |
| export function readBody(req: BrowserRequest): Record<string, unknown> { | |
| const body = req.body as Record<string, unknown> | undefined; | |
| if (!body || typeof body !== "object" || Array.isArray(body)) { | |
| return {}; | |
| } | |
| return body; | |
| } | |
| export function handleRouteError(ctx: BrowserRouteContext, res: BrowserResponse, err: unknown) { | |
| const mapped = ctx.mapTabError(err); | |
| if (mapped) { | |
| return jsonError(res, mapped.status, mapped.message); | |
| } | |
| jsonError(res, 500, String(err)); | |
| } | |
| export function resolveProfileContext( | |
| req: BrowserRequest, | |
| res: BrowserResponse, | |
| ctx: BrowserRouteContext, | |
| ): ProfileContext | null { | |
| const profileCtx = getProfileContext(req, ctx); | |
| if ("error" in profileCtx) { | |
| jsonError(res, profileCtx.status, profileCtx.error); | |
| return null; | |
| } | |
| return profileCtx; | |
| } | |
| export async function getPwAiModule(): Promise<PwAiModule | null> { | |
| return await getPwAiModuleBase({ mode: "soft" }); | |
| } | |
| export async function requirePwAi( | |
| res: BrowserResponse, | |
| feature: string, | |
| ): Promise<PwAiModule | null> { | |
| const mod = await getPwAiModule(); | |
| if (mod) { | |
| return mod; | |
| } | |
| jsonError( | |
| res, | |
| 501, | |
| [ | |
| `Playwright is not available in this gateway build; '${feature}' is unsupported.`, | |
| "Install the full Playwright package (not playwright-core) and restart the gateway, or reinstall with browser support.", | |
| "Docs: /tools/browser#playwright-requirement", | |
| ].join("\n"), | |
| ); | |
| return null; | |
| } | |