import type { TempoAddress } from 'ox/tempo';
import type { Hex } from 'viem';
import type { Account } from 'viem';
import { Transaction } from 'viem/tempo';
/** Returns true if the serialized transaction has a Tempo envelope prefix. */
export declare function isTempoTransaction(serialized: string | undefined): boolean;
/**
 * Allowed call patterns for fee-payer sponsored transactions.
 * Each inner array is an ordered list of function selectors.
 */
export declare const callScopes: `0x${string}`[][];
export type Policy = {
    maxGas: bigint;
    maxFeePerGas: bigint;
    maxPriorityFeePerGas: bigint;
    maxTotalFee: bigint;
    maxValidityWindowSeconds: number;
};
type SponsoredTransaction = ReturnType<(typeof Transaction)['deserialize']>;
type ExpectedTransfer = {
    amount: string;
    allowAnyMemo?: boolean | undefined;
    memo?: Hex | undefined;
    recipient: TempoAddress.Address;
};
/** Validates that a set of transaction calls matches an allowed fee-payer pattern. */
export declare function validateCalls(calls: readonly {
    data?: `0x${string}` | undefined;
    to?: TempoAddress.Address | undefined;
}[], details: Record<string, string>, options?: {
    currency?: TempoAddress.Address | undefined;
    expectedTransfers?: readonly ExpectedTransfer[] | undefined;
}): void;
export declare function prepareSponsoredTransaction(parameters: {
    account: Account;
    challengeExpires?: string | undefined;
    chainId: number;
    details: Record<string, string>;
    expectedFeeToken?: TempoAddress.Address | undefined;
    now?: Date | undefined;
    policy?: Partial<Policy> | undefined;
    transaction: SponsoredTransaction;
}): {
    validBefore: any;
    validAfter?: any;
    type: "tempo";
    signature?: any;
    nonceKey: any;
    maxPriorityFeePerGas?: any;
    maxFeePerGas: any;
    nonce?: any;
    keyAuthorization?: any;
    gas: any;
    from?: any;
    feeToken?: any;
    accessList: any;
    account: Account;
    calls: any;
    chainId: any;
    feePayer: Account;
};
export declare class FeePayerValidationError extends Error {
    readonly name = "FeePayerValidationError";
    constructor(reason: string, details: Record<string, string>);
}
export {};
//# sourceMappingURL=fee-payer.d.ts.map