import argparse import asyncio import json import logging import browser import server class _FakeRequest: def __init__(self, provider: str): self.match_info = {"provider": provider} self.method = "GET" self.path_qs = f"/{provider}/token" def _enable_headed_browser() -> bool: if "--no-startup-window" in browser.CHROME_FLAGS: browser.CHROME_FLAGS.remove("--no-startup-window") return True return False async def _run(provider: str) -> int: patched = _enable_headed_browser() logging.info("Headed mode patch applied: %s", patched) request = _FakeRequest(provider) response = await server.token_handler(request) payload = json.loads(response.body.decode("utf-8")) logging.info("Response status: %s", response.status) logging.info("Response body: %s", json.dumps(payload, indent=2)) return 0 if response.status == 200 else 1 def main() -> int: parser = argparse.ArgumentParser( description=( "Run the same token refresh/issue flow as server /{provider}/token " "in headed browser mode (non-headless)." ) ) parser.add_argument("--provider", default="chatgpt") args = parser.parse_args() logging.basicConfig( level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s", ) return asyncio.run(_run(args.provider)) if __name__ == "__main__": raise SystemExit(main())