import { SchemeNetworkClient, PaymentRequirements, PaymentPayloadContext, PaymentPayloadResult } from '@x402/core/types';
import { C as ClientEvmSigner } from './signer-D912R4mq.js';
import { E as ExactEvmSchemeOptions } from './permit2-CyZxwngN.js';

/**
 * EVM client implementation for the Exact payment scheme.
 * Supports both EIP-3009 (transferWithAuthorization) and Permit2 flows.
 *
 * Routes to the appropriate authorization method based on
 * `requirements.extra.assetTransferMethod`. Defaults to EIP-3009
 * for backward compatibility with older facilitators.
 *
 * When the server advertises `eip2612GasSponsoring` and the asset transfer
 * method is `permit2`, the scheme automatically signs an EIP-2612 permit
 * if the user lacks Permit2 approval. This requires `readContract` on the signer.
 */
declare class ExactEvmScheme implements SchemeNetworkClient {
    private readonly signer;
    private readonly options?;
    readonly scheme = "exact";
    /**
     * Creates a new ExactEvmClient instance.
     *
     * @param signer - The EVM signer for client operations.
     *   Base flow only requires `address` + `signTypedData`.
     *   Extension enrichment (EIP-2612 / ERC-20 approval sponsoring) additionally
     *   requires optional capabilities like `readContract` and tx signing helpers.
     * @param options - Optional RPC configuration used to backfill extension capabilities.
     */
    constructor(signer: ClientEvmSigner, options?: ExactEvmSchemeOptions | undefined);
    /**
     * Creates a payment payload for the Exact scheme.
     * Routes to EIP-3009 or Permit2 based on requirements.extra.assetTransferMethod.
     *
     * For Permit2 flows, if the server advertises `eip2612GasSponsoring` and the
     * signer supports `readContract`, automatically signs an EIP-2612 permit
     * when Permit2 allowance is insufficient.
     *
     * @param x402Version - The x402 protocol version
     * @param paymentRequirements - The payment requirements
     * @param context - Optional context with server-declared extensions
     * @returns Promise resolving to a payment payload result (with optional extensions)
     */
    createPaymentPayload(x402Version: number, paymentRequirements: PaymentRequirements, context?: PaymentPayloadContext): Promise<PaymentPayloadResult>;
}

export { ExactEvmScheme as E };
