"""Запросы и ответы для лога без секретов клиента: креды прокси, ключ 2captcha, вводимые значения, значения cookies, html и скриншот.""" import json from urllib.parse import urlsplit from api.schemas import SolveRequest def mask_proxy(proxy_url: str | None) -> str | None: if not proxy_url: return proxy_url parts = urlsplit(proxy_url) return f"{parts.scheme}://{'***@' if parts.username else ''}{parts.hostname}:{parts.port}" def safe_request_dump(payload: SolveRequest) -> str: data = payload.model_dump(exclude_none=True) data["proxy"] = mask_proxy(payload.proxy) if payload.captcha: data["captcha"] = "***" if payload.cookies: data["cookies"] = [c.get("name") for c in payload.cookies] for act in data["actions"]: if act["type"] in ("fill", "typing") and "value" in act: act["value"] = "***" return json.dumps(data, indent=2, ensure_ascii=False) def safe_response_dump(result: dict) -> str: data = dict(result) if data.get("cookies"): data["cookies"] = [c.get("name") for c in data["cookies"]] for key in ("html", "screenshot"): if data.get(key): data[key] = f"<{len(data[key])} chars>" return json.dumps(data, indent=2, ensure_ascii=False)