def METHOD_NAME(self) -> typing.List[Waypoint]:
    """Subscribe and return points cache."""
    if self._points_sub is not None:
        return self._points
    done_evt = threading.Event()
    def handler(ml: WaypointList):
        self._points = ml.waypoints
        done_evt.set()
    self._points_sub = self.subscribe_points(handler)
    if not done_evt.wait(SERVICE_WAIT_TIMEOUT):
        raise ServiceWaitTimeout(
            f"timeout waiting for {self._points_sub.topic_name}"
        )
    return self._points