import { Address, StateOverride, Client, Hex } from "viem";
import { PackedUserOperation, ExecutionResult, TargetCallResult } from "../../models/index.js";
export type SimulateHandleOpResult<TypeResult extends "failed" | "execution" = "failed" | "execution"> = {
    result: TypeResult;
    data: TypeResult extends "failed" ? string : {
        callDataResult?: TargetCallResult;
        executionResult: ExecutionResult;
    };
    code?: TypeResult extends "failed" ? number : undefined;
};
/**
 * Similar to `simulateHandleOpV07` but reverts on error.
 * Also a higher-level abstraction as:
 * - targetAddress = userOp.sender
 * - targetCallData = userOp.callData
 * @param packedUserOperation
 * @param entryPoint
 * @param client
 * @param entryPointSimulationsAddress
 * @param stateOverride
 * @returns
 */
export declare function getExecutionResult(client: Client, parameters: {
    packedUserOperation: PackedUserOperation;
    entryPoint: Address;
    entryPointSimulationsAddress: Address;
    stateOverride?: StateOverride[number];
}): Promise<SimulateHandleOpResult<"execution">>;
/**
 * Simulate UserOpV7. Low level function meant to align with Solidity interface and
 * decode revert data.
 * @param packedUserOperation
 * @param entryPoint
 * @param client
 * @param targetAddress currently all calls use userOp.sender but this is here to align with the interface
 * @param targetCallData currently all calls use userOp.callData but this is here to align with the interface
 * @param entryPointSimulationsAddress
 * @param stateOverride
 * @returns
 */
export declare function simulateHandleOpV07(client: Client, parameters: {
    packedUserOperation: PackedUserOperation;
    entryPoint: Address;
    targetAddress: Address;
    targetCallData: Hex;
    entryPointSimulationsAddress: Address;
    stateOverride?: StateOverride[number] | undefined;
}): Promise<SimulateHandleOpResult>;
