MCPcopy Create free account
hub / github.com/TheSmallHanCat/flow2api / _refresh_protocol_token

Method _refresh_protocol_token

src/services/token_manager.py:799–858  ·  view source on GitHub ↗
(self, token: Token, now: datetime)

Source from the content-addressed store, hash-verified

797 return None
798
799 async def _refresh_protocol_token(self, token: Token, now: datetime) -> None:
800 token_id = int(token.id)
801 refresh_lock = await self._get_token_lock(
802 self._refresh_locks,
803 self._refresh_lock_guard,
804 token_id,
805 )
806 async with refresh_lock:
807 latest = await self.db.get_token(token_id)
808 if not latest or not latest.is_active:
809 return
810 if not latest.auto_refresh_enabled:
811 return
812 if self._normalize_protocol_mode(latest.protocol_mode) != "protocol":
813 return
814 if not (latest.google_cookies or "").strip():
815 return
816
817 new_st = await self._try_protocol_refresh_st(token_id, latest)
818 if not new_st:
819 return
820
821 try:
822 session = await self._st_to_at_for_token(latest, new_st)
823 new_at = str(session.get("access_token") or "").strip()
824 if not new_at:
825 raise RuntimeError("ST 转 AT 响应缺少 access_token")
826
827 updates: Dict[str, Any] = {
828 "st": new_st,
829 "at": new_at,
830 "at_expires": self._parse_at_expires(session.get("expires")),
831 "last_st_refresh_at": now,
832 "last_st_refresh_result": "success",
833 }
834 user_info = session.get("user") if isinstance(session.get("user"), dict) else {}
835 if user_info.get("email"):
836 updates["email"] = user_info.get("email")
837 if user_info.get("name"):
838 updates["name"] = user_info.get("name")
839
840 try:
841 credits_result = await self._get_credits_for_token(latest, new_at)
842 updates["credits"] = credits_result.get("credits", 0)
843 updates["user_paygate_tier"] = credits_result.get("userPaygateTier")
844 except Exception as e:
845 debug_logger.log_warning(f"[PROTOCOL_REFRESH] Token {token_id}: 刷新余额失败 - {e}")
846
847 await self.db.update_token(token_id, **updates)
848 record_token_refresh("at", "success")
849 debug_logger.log_info(f"[PROTOCOL_REFRESH] Token {token_id}: 协议刷新 ST/AT 成功")
850 except Exception as e:
851 await self.db.update_token(
852 token_id,
853 st=new_st,
854 last_st_refresh_at=now,
855 last_st_refresh_result=str(e),
856 )

Callers 1

Calls 12

_get_token_lockMethod · 0.95
_st_to_at_for_tokenMethod · 0.95
_parse_at_expiresMethod · 0.95
record_token_refreshFunction · 0.85
log_warningMethod · 0.80
log_infoMethod · 0.80
log_errorMethod · 0.80
get_tokenMethod · 0.45
update_tokenMethod · 0.45

Tested by

no test coverage detected