import type { ReclaimProvider } from '../provider/schema.ts'; export interface ReplayResult { status: number; body: string; matchesOriginal: boolean; hints?: string[]; } /** Expand `{{name}}` placeholders from `paramValues`. Matches the attestor * SDK's behavior so replay and proof both hit the same final URL. */ export declare function expandTemplate(s: string, params: Record | undefined): string; /** Build the request the wire replay actually sends: `{{name}}` placeholders * in the URL/headers/body expanded from `provider.paramValues`, secrets * layered onto the public headers. Shared by every replay transport (Node * `fetch` here, or a `fetch` run inside the live browser tab) so they all * send the identical request. */ export interface ReplayRequest { url: string; method: string; headers: Record; body?: string; } export declare function buildReplayRequest(provider: ReclaimProvider, secrets: Record): ReplayRequest; /** * Judge a replayed response against `provider`'s matchers — the part of * replay that's identical regardless of HOW the request was sent (detached * Node `fetch` or a live in-browser `fetch`). Separated from the actual * network call so both transports share one evaluation. */ export declare function evaluateReplay(status: number, body: string, provider: ReclaimProvider): ReplayResult; /** Detached Node-side replay: sends the request directly from this process, * NOT from any attached browser tab — its cookies/secrets are exactly the * `secrets` passed in, never a real browser session. Used by tests and by * any caller with no live browser to replay through (the MCP's authoring * backend instead runs the SAME request inside the attached tab — see * `proof/page-replay.ts` — so replay reflects real session cookies). */ export declare function replayProvider(provider: ReclaimProvider, secrets: Record): Promise;