def METHOD_NAME(self, article_id: str) -> dict:
    """
    Fetch metadata about a JSTOR article.
    :param article_id: A JSTOR article ID or DOI
    :raise ArticleNotFound: If the article cannot be found
    :raise ExternalRequestError: For any unexpected errors
    """
    try:
        response = self._api_request("/metadata/{doi}", doi=article_id)
    except ExternalRequestError as err:
        # We can distinguish between a 404 when the URL is wrong, and when
        # the URL is correct but the article can't be found by carefully
        # inspecting the response. There's no documentation of this, it's
        # all from experimentation.
        resp = err.response
        if (
            resp.status_code == 404
            and resp.headers.get("Content-Type", "").startswith("application/json")
            and resp.text == "null"
        ):
            raise ArticleNotFound(article_id) from err
        raise
    return ArticleMetadata.from_response(response).as_dict()