/**
 * `HttpRequestBuilder` — the value an `http.*` CEL expression evaluates to.
 *
 * A local (non-upstream) extension. A CEL expression only *describes* a
 * request — it never issues one. Both terminal methods, `.json()` and
 * `.file()`, are dispatched by the host on the returned builder, keeping
 * expression evaluation free of IO.
 *
 * Endpoints are used verbatim — there is no base-URL resolution, so callers
 * must pass absolute URLs.
 */
import { Effect } from 'effect';
import { Fetch } from 'fx-fetch';
export declare class HttpRequestBuilder {
    #private;
    static setDefaultHeader(name: string, value: string | (() => string | null | undefined)): void;
    static clearDefaultHeader(name: string): void;
    constructor(url: string, method: string);
    header(name: string, value: string): this;
    query(key: string, value: string | number): this;
    query(record: Record<string, unknown>): this;
    /**
     * Set the request body. A pre-built `FormData` / `Blob` / `ArrayBuffer` /
     * string is used verbatim; anything else is normalized (see
     * `normalizeBody`) and JSON-serialized. The `Content-Type` header is *not*
     * set here — the caller adds `.header('Content-Type', …)` explicitly.
     */
    body(data: unknown): this;
    /**
     * A structural snapshot of the request this builder will issue — an equal
     * snapshot means an equal HTTP request. Handy for change-detection, e.g.
     * deciding whether a refetch is warranted. Non-string bodies (`FormData`,
     * `Blob`, `ArrayBuffer`) collapse to a `'[binary]'` marker, so equal
     * snapshots do not guarantee equal bodies in that case.
     */
    describe(): {
        url: string;
        method: string;
        headers: ReadonlyArray<readonly [string, string]>;
        queries: ReadonlyArray<readonly [string, string]>;
        body: string | null;
    };
    json(): Effect.Effect<unknown, import("fx-fetch/Cause").MalformedJsonError | Fetch.Fetch.ErrorType, Fetch.Fetch>;
    file(): Effect.Effect<File, Fetch.Fetch.ErrorType | import("fx-fetch/Cause").MalformedBlobError, Fetch.Fetch>;
}
