import type { ProblemDetails } from './types.js';
export interface DeprecationInfo {
    /** Request path that triggered the deprecation headers (e.g. `/api/v1/sessions/xyz/dispatch`). */
    path: string;
    /** Value of the `Sunset` response header (RFC 8594), if present. */
    sunset?: string;
    /** Value of the `Deprecated` response header, if present. */
    deprecated?: string;
    /** URL extracted from `Link: <…>; rel="successor-version"`, if present. */
    successor?: string;
}
export interface A2ARequestOptions {
    method?: string;
    /** Body — serialized as JSON unless `bodyRaw` is set. */
    body?: unknown;
    /** Raw body (skip JSON encoding); content-type is caller's responsibility. */
    bodyRaw?: string | Uint8Array | ArrayBuffer | ReadableStream<Uint8Array>;
    /** Extra request headers (lowercase keys; merged after defaults). */
    headers?: Record<string, string>;
    /** Override the bearer token for this single call. */
    bearer?: string;
    /** When set, inject these extension URIs as the `A2A-Extensions` header.
     *  Mutating methods should always set this; non-mutating may skip. */
    extensions?: string[];
    /** AbortSignal to cancel the request. */
    signal?: AbortSignal;
    /** Don't parse the body — return the raw Response (used by SSE). */
    raw?: boolean;
}
export interface A2AResponse<T = unknown> {
    /** HTTP status code. */
    status: number;
    /** Parsed JSON body (or undefined for empty/204). Absent when `raw: true`. */
    body: T | undefined;
    /** Raw Headers, in case the caller needs them. */
    headers: Headers;
    /** True when the executor served this from the idempotency cache. */
    idempotentReplayed: boolean;
    /** Extension URIs the executor echoed (parsed from response `A2A-Extensions`). */
    activatedExtensions: string[];
    /** Captured deprecation info, if the response carried `Sunset` / `Deprecated`. */
    deprecation?: DeprecationInfo;
    /** Raw response body stream (only set when `raw: true`). Caller owns the
     *  lifecycle — must consume or release. */
    rawBody?: ReadableStream<Uint8Array> | null;
}
export declare class A2AError extends Error {
    readonly status: number;
    readonly problem: ProblemDetails;
    readonly path: string;
    constructor(status: number, path: string, problem: ProblemDetails);
}
export interface A2AHttpClientOptions {
    baseUrl: string;
    bearer: string;
    /** Default extensions to inject on mutating calls. Typically the
     *  `required: true` set from the cached AgentCard. */
    defaultExtensions?: string[];
    /** Fail-fast on any v1 deprecation hit (mirrors AIWG_FAIL_ON_DEPRECATED). */
    failOnDeprecated?: boolean;
    /** Custom fetch implementation (for tests + future runtime polyfills). */
    fetch?: typeof fetch;
    /** Called once per (path, sunset) pair when deprecation headers seen. */
    onDeprecation?: (info: DeprecationInfo) => void;
    /** Called when an expected extension is requested but not echoed in the response. */
    onExtensionEchoMissing?: (expected: string[], echoed: string[], path: string) => void;
}
export declare class A2AHttpClient {
    private readonly baseUrl;
    private readonly bearer;
    private readonly defaultExtensions;
    private readonly failOnDeprecated;
    private readonly fetchImpl;
    private readonly onDeprecation?;
    private readonly onExtensionEchoMissing?;
    /** Per-process dedupe set: one log per (path, sunset_date). */
    private readonly seenDeprecations;
    constructor(opts: A2AHttpClientOptions);
    request<T = unknown>(path: string, options?: A2ARequestOptions): Promise<A2AResponse<T>>;
}
//# sourceMappingURL=http.d.ts.map