chatgpt_flow_runner.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. """Reusable ChatGPT flow helpers for API routes and standalone scripts."""
  2. from __future__ import annotations
  3. import json
  4. from pathlib import Path
  5. from core.base_platform import RegisterConfig
  6. from core.registry import get, load_all
  7. def run_chatgpt_preflight(
  8. *,
  9. email: str | None,
  10. password: str | None,
  11. mail_provider: str,
  12. proxy: str | None,
  13. ) -> dict[str, object]:
  14. load_all()
  15. platform_cls = get("chatgpt")
  16. platform = platform_cls(
  17. config=RegisterConfig(
  18. proxy=proxy,
  19. extra={"mail_provider": mail_provider},
  20. )
  21. )
  22. return platform.run_preflight(email=email, password=password)
  23. def run_chatgpt_register_once(
  24. *,
  25. email: str | None,
  26. password: str | None,
  27. mail_provider: str,
  28. cfmail_profile_name: str = "auto",
  29. proxy: str | None,
  30. write_pool: bool,
  31. pool_dir: Path,
  32. ) -> dict[str, object]:
  33. load_all()
  34. platform_cls = get("chatgpt")
  35. platform = platform_cls(
  36. config=RegisterConfig(
  37. proxy=proxy,
  38. extra={
  39. "mail_provider": mail_provider,
  40. "cfmail_profile_name": cfmail_profile_name,
  41. },
  42. )
  43. )
  44. return platform.run_register_once(
  45. email=email,
  46. password=password,
  47. write_pool=write_pool,
  48. pool_dir=pool_dir,
  49. )
  50. def run_chatgpt_callback_exchange(
  51. *,
  52. callback_url: str,
  53. expected_state: str,
  54. code_verifier: str,
  55. proxy: str | None,
  56. write_pool: bool,
  57. pool_dir: Path,
  58. ) -> dict[str, object]:
  59. load_all()
  60. platform_cls = get("chatgpt")
  61. platform = platform_cls(config=RegisterConfig(proxy=proxy))
  62. return platform.exchange_callback(
  63. callback_url=callback_url,
  64. expected_state=expected_state,
  65. code_verifier=code_verifier,
  66. write_pool=write_pool,
  67. pool_dir=pool_dir,
  68. )
  69. def print_preflight_summary(payload: dict[str, object]) -> None:
  70. print(f"success: {payload.get('success')}")
  71. print(f"stage: {payload.get('stage')}")
  72. print(f"email: {payload.get('email') or '-'}")
  73. print(f"error_message: {payload.get('error_message') or '-'}")
  74. metadata = payload.get("metadata") or {}
  75. if isinstance(metadata, dict):
  76. print(f"oauth_url: {metadata.get('oauth_url') or '-'}")
  77. print(f"mail_provider: {metadata.get('mail_provider') or '-'}")
  78. logs = payload.get("logs") or []
  79. if isinstance(logs, list) and logs:
  80. print("logs:")
  81. for line in logs:
  82. print(f" {line}")
  83. def print_callback_summary(payload: dict[str, object]) -> None:
  84. print(f"success: {payload.get('success')}")
  85. print(f"stage: {payload.get('stage')}")
  86. print(f"email: {payload.get('email') or '-'}")
  87. print(f"account_id: {payload.get('account_id') or '-'}")
  88. print(f"pool_file: {payload.get('pool_file') or '-'}")
  89. print(f"error_message: {payload.get('error_message') or '-'}")
  90. def print_json_or_summary(payload: dict[str, object], *, output_json: bool) -> None:
  91. if output_json:
  92. print(json.dumps(payload, ensure_ascii=False, indent=2))
  93. else:
  94. print_callback_summary(payload)