async def METHOD_NAME(
    self,
    query: Union[str, Dict[str, Any]],
    variables: Dict[str, Any] = None,
    headers: dict = None,
    raise_on_error: bool = True,
    as_box=True,
) -> dict:
    """
    Args:
        - query (Union[str, dict]): either a GraphQL query string or objects that are compatible
            with prefect.utilities.graphql.parse_graphql().
        - variables (dict): GraphQL variables
        - headers (dict): Headers to include with the GraphQL request
        - raise_on_error (bool): if True, a `ValueError` is raised whenever the GraphQL
            result contains an `errors` field.
        - as_box (bool): if True, a `box.Box` object is returned, which behaves like a dict
            but allows "dot" access in addition to key access.
    Returns:
        - dict: a dictionary of GraphQL info. If `as_box` is True, it will be a Box (dict subclass)
    Raises:
        - GraphQLSyntaxError: if the provided query is not a valid GraphQL query
        - ValueError: if `raise_on_error=True` and there are any errors during execution.
    """
    if not isinstance(query, str):
        query = parse_graphql(query)
    # validate query
    if prefect_server.config.debug:
        ariadne.gql(query)
    # Capture "connect" errors and re-raise as `APIError`
    async with reraise_as_api_error(Exception, match="connect", logger=self.logger):
        # timeout of 30 seconds
        response = await httpx_client.post(
            self.url,
            json=dict(query=query, variables=variables or {}),
            headers=headers or self.headers,
            timeout=30,
        )
    try:
        result = response.json()
    except json.decoder.JSONDecodeError as exc:
        self.logger.error(
            "JSON Decode Error on {}".format(response.content.decode())
        )
        self.logger.error(exc)
        raise exc
    if raise_on_error and "errors" in result:
        if prefect_server.config.debug:
            self.log_query_debug_info(
                query=query,
                variables=variables or {},
                errors=result["errors"],
                headers=headers or self.headers,
            )
        raise ValueError(result["errors"])
    # convert to box
    if as_box:
        result = Box(result)
    return result