import { Abi } from "abitype"; import { Hex, Address, PublicClient } from "viem"; import { JsonRpcProvider } from "ethers"; 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: PublicClient | JsonRpcProvider; bundlerClient?: PublicClient | JsonRpcProvider; 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 RequiredAccountOpts = Pick, "accountAbi" | "factoryAbi" | "factoryAddress" | "ethClient" | "setFactoryData" | "requestSignature">;