type SmartWalletOptions = Prettify<
  {
    factoryAddress?: string;
    overrides?: {
      accountAddress?: string;
      accountSalt?: string;
      bundlerUrl?: string;
      createAccount?: (
        admin: string,
      entrypointAddress?: string;
      execute?: (
        transaction: SendTransactionOption,
      executeBatch?: (
        transactions: Array<SendTransactionOption>,
      getAccountNonce?: (
      ) => Promise<bigint>;
      paymaster?: (
        userOp: UserOperationV06 | UserOperationV07,
      predictAddress?: (
        admin: string,
      ) => Promise<string>;
      signMessage?: (options: {
        message: SignableMessage;
      signTypedData?: (options: {
        typedData: ox__TypedData.Definition<typedData, primaryType>;
      tokenPaymaster?: TokenPaymasterConfig;
    };
    sessionKey?: { address: string; permissions: AccountPermissions };
  } & ({ gasless: boolean } | { sponsorGas: boolean })
>;