import type { AnyCaller } from "../../util/function.js";
import type { RequestHandler, RequestOptions } from "../../util/http.js";
import type { AnyEndpoint, Endpoint } from "../endpoint/Endpoint.js";
import type { APIProvider } from "./APIProvider.js";
import { ThroughAPIProvider } from "./ThroughAPIProvider.js";
export type MockAPIFetchCall = {
    readonly request: Request;
    readonly response: Response;
};
export type MockAPIRequestCall = {
    readonly endpoint: AnyEndpoint;
    readonly payload: unknown;
    readonly options: RequestOptions | undefined;
    readonly request: Request;
};
export type MockAPIResponseCall = {
    readonly endpoint: AnyEndpoint;
    readonly response: Response;
    readonly result: unknown;
};
/**
 * Provider that logs API calls without sending network requests.
 * - Extends `ThroughAPIProvider` to delegate request building and response parsing to a source `APIProvider`.
 * - The source provider's `fetch()` is never called — this provider intercepts all fetches and routes them through a `RequestHandler`.
 */
export declare class MockAPIProvider<P = unknown, R = unknown> extends ThroughAPIProvider<P, R> {
    readonly requestCalls: MockAPIRequestCall[];
    readonly fetchCalls: MockAPIFetchCall[];
    readonly responseCalls: MockAPIResponseCall[];
    readonly handler: RequestHandler;
    constructor(handler?: RequestHandler, source?: APIProvider<P, R>);
    createRequest<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, payload: PP, options?: RequestOptions, caller?: AnyCaller): Request;
    parseResponse<PP extends P, RR extends R>(endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
    fetch(request: Request): Promise<Response>;
}
