Agent-readable docs index: /docs/llms.txt. Full docs in one file: /docs/llms-full.txt. Download /docs/docs.zip to grep all markdown files locally.

Network requests

Execute typed HTTP requests inside the browser context.

pageRequest()

Executes a fetch() call inside the browser context via page.evaluate(). Because the request runs inside the real browser process, it uses the browser's TLS fingerprint, cookies, and session. It still looks like a fetch/XHR request, so use it for endpoints the site normally calls with fetch or XHR.
pageRequest() is not a replacement for every browser request. For page HTML, navigate with page.goto() or click a link. For images, scripts, stylesheets, and iframes, let the DOM load the resource naturally when possible.
async function pageRequest<T extends z.ZodType | undefined = undefined>( page: Page, config: RequestConfig, options?: PageRequestOptions<T>, ): Promise<T extends z.ZodType ? z.infer<T> : any>;
Returns z.infer<T> when a schema is provided in options, or any otherwise.
Non-2xx responses cause pageRequest to throw an error. The error message includes the HTTP method, URL, and status code.

RequestConfig

path urlstringrequired
The URL to fetch. Relative URLs are resolved in the browser context.
path method"GET" | "POST" | "PUT" | "DELETE" | "PATCH"
HTTP method. Defaults to "GET".
path headersRecord<string, string>
Additional request headers to merge with any that bodyType adds automatically.
path bodyRecord<string, any> | string
Request body. When bodyType is "json" (the default), objects are serialized with JSON.stringify. When bodyType is "form", objects are encoded as application/x-www-form-urlencoded.
path bodyType"json" | "form"
How to serialize the body. Defaults to "json". Setting this to "form" also sets Content-Type: application/x-www-form-urlencoded automatically.
path responseType"json" | "text" | "xml"
How to parse the response. Defaults to "json". Both "text" and "xml" return the raw response text.

PageRequestOptions<T>

path loggerMinimalLogger
Optional logger. When provided, request details (method, URL, status, duration) are logged at info level, and failures at warn.
path schemaT extends z.ZodType
Optional Zod schema. When provided, the parsed response body is validated with schema.parse() before being returned. The return type of pageRequest becomes z.infer<T>.

Example

import { pageRequest } from "libretto"; import { z } from "zod"; const ResultSchema = z.object({ items: z.array(z.object({ id: z.string(), name: z.string() })), total: z.number(), }); const data = await pageRequest( page, { url: "/api/search", method: "POST", body: { query: "example", page: 1 }, }, { schema: ResultSchema }, ); // data is typed as { items: Array<{ id: string; name: string }>; total: number }