async def METHOD_NAME(
    self,
    message: Union[WSMessageSchemaType, Dict[str, Any]],
    timeout: bool = False
):
    """
    Send a message on the wrapped websocket. If the sending
    takes too long, it will raise a TimeoutError and
    disconnect the connection.
    :param message: The message to send
    :param timeout: Enforce send high limit, defaults to False
    """
    try:
        _ = time.time()
        # If the send times out, it will raise
        # a TimeoutError and bubble up to the
        # message_endpoint to close the connection
        await asyncio.wait_for(
            self._wrapped_ws.METHOD_NAME(message),
            timeout=self._send_high_limit if timeout else None
        )
        total_time = time.time() - _
        self._send_times.append(total_time)
        self._calc_send_limit()
    except asyncio.TimeoutError:
        logger.info(f"Connection for {self} timed out, disconnecting")
        raise
    # Explicitly give control back to event loop as
    # websockets.send does not
    # Also throttles how fast we send
    await asyncio.sleep(self._send_throttle)