from __future__ import annotations import logging import time from dataclasses import dataclass, field from yuxi.channel.extensions.pinduoduo.token import PddTokenManager logger = logging.getLogger(__name__) @dataclass class PinduoduoStatus: account_id: str mall_id: str connected: bool = False running: bool = False last_error: str | None = None last_probe_time: float = field(default_factory=time.time) poll_count: int = 0 outbound_count: int = 0 def snapshot(self) -> dict: return { "channel": "pinduoduo", "account_id": self.account_id, "mall_id": self.mall_id, "connected": self.connected, "running": self.running, "poll_count": self.poll_count, "outbound_sent": self.outbound_count, "last_error": self.last_error, "last_probe": self.last_probe_time, } async def probe_pinduoduo( client_id: str, client_secret: str, mall_id: str, refresh_token: str | None = None, access_token: str | None = None, ) -> dict: try: token_mgr = PddTokenManager( client_id=client_id, client_secret=client_secret, mall_id=mall_id, refresh_token=refresh_token, access_token=access_token, ) token = await token_mgr.get_token() await token_mgr.close() return { "status": "ok", "connected": True, "message": "Token 有效,API 连通正常", "token_obtained": bool(token), "mall_id": mall_id, } except Exception as e: return { "status": "error", "connected": False, "message": str(e), "mall_id": mall_id, }