info_payload: Dict[str, Any] = {"catalog_name": catalog, "app_name": app_name, "train": train} # v2.1.2: сначала пробуем GET (TrueNAS 25.10 часто требует GET), # затем POST через _rest_request (там есть fallback POST→GET при 405) info: Optional[Dict[str, Any]] = None for ep in ("app/info", "app.info", "catalog/item", "catalog.item"): try: r = requests.get( f"{self._base}/api/v2.0/{ep}", headers=self._headers, params=info_payload, timeout=self.valves.request_timeout, verify=self.valves.verify_ssl, ) if r.status_code == 200: info = r.json() break except Exception: pass if info is None: info = self._post("app/info", info_payload, timeout=self.valves.request_timeout) if info is None: info = self._post("catalog/item", info_payload, timeout=self.valves.request_timeout) if info is None: