/** JSON-compatible cassette metadata value. */ export type JsonValue = | null | boolean | number | string | ReadonlyArray | { readonly [key: string]: JsonValue } /** Additional JSON metadata stored with a cassette. */ export type CassetteMetadata = Readonly> /** The normalized HTTP request representation used for matching. */ export interface RequestSnapshot { readonly method: string readonly url: string readonly headers: Record readonly body: string } /** Returns whether an incoming HTTP request matches a recorded request. */ export type RequestMatcher = (incoming: RequestSnapshot, recorded: RequestSnapshot) => boolean /** Additive redaction and header-preservation policy. */ export interface RedactOptions { readonly headers?: ReadonlyArray readonly allowRequestHeaders?: ReadonlyArray readonly allowResponseHeaders?: ReadonlyArray readonly queryParameters?: ReadonlyArray readonly jsonFields?: ReadonlyArray readonly url?: (url: string) => string readonly body?: (body: string) => string } /** Options shared by HTTP recorder layers. */ export interface RecorderOptions { readonly directory?: string readonly metadata?: CassetteMetadata readonly redact?: RedactOptions readonly match?: RequestMatcher } /** Recorder configuration for Effect socket and WebSocket layers. */ export type SocketRecorderOptions = Omit export * as Api from "./api.js"