import { Abi } from "abitype"; import { Hex, Address, PublicClient, WalletClient, Transport, Chain, Account, HttpTransport } from "viem"; import * as Hooks from "./hooks"; import * as Bundler from "../bundler"; import * as EntryPoint from "../entryPoint"; export interface BuildUserOperationResponse { userOperation: EntryPoint.UserOperation; userOpHash: Hex; } export interface SendUserOperationResponse { userOpHash: Hex; wait: () => Promise; } export interface AccountOpts { accountAbi: A; factoryAbi: F; factoryAddress: Address; ethClient: P; bundlerClient?: P; entryPointAddress?: Address; salt?: bigint; waitTimeoutMs?: number; waitIntervalMs?: number; setFactoryData: Hooks.SetFactoryDataFunc; requestSignature: Hooks.RequestSignatureFunc; requestGasPrice?: Hooks.RequestGasPriceFunc; requestGasValues?: Hooks.RequestGasValuesFunc; requestPaymaster?: Hooks.RequestPaymasterFunc; onBuild?: Hooks.OnBuildFunc; } export type HttpPublicClient = PublicClient; export type AccountClient = WalletClient; export type RequiredAccountOpts = Pick, "accountAbi" | "factoryAbi" | "factoryAddress" | "ethClient" | "setFactoryData" | "requestSignature">;