7.1 KiB
GPT Pool Gateway поверх any-auto-register (сессия 2026-09-21)
Что построено
Связка из двух сервисов на машине Влада:
| Компонент | Порт | Назначение |
|---|---|---|
| any-auto-register (lxf746, 3.3K⭐, AGPL) | :8100 | авторег ChatGPT/Cursor/Grok/Kiro/Windsurf/Trae + React-дашборд (собран: frontend → ../static, npm build EXIT=0) |
GPT Pool Gateway (свой, gateway_pool/gpt_gateway.py, ~460 строк) |
:8200 | OpenAI-compatible API (/v1/chat/completions, /v1/images/generations) поверх пула access_token'ов + свой мини-дашборд |
Проект: C:/Users/User/Desktop/any-auto-register/ (клон через codeload zip — git clone не работает, git-remote-https отсутствует; gh token мёртв 401 → fork не удался).
any-auto-register: ключевые факты
- БД:
account_manager.db(SQLite/SQLModel). Таблицы:accounts(platform,email,password,user_id),account_credentials(account_id,key,value — здесьaccess_token/refresh_token/id_token/session_token/workspace_id),account_overviews,tasks,proxies,provider_settings. - Роуты под префиксом
/api:/api/health,/api/accounts,/api/platforms,/api/stats,/api/tasks,/api/sms,/api/proxies. Фронтенд монтируется изstatic/(vite outDir../static). - ChatGPT-платформа:
platforms/chatgpt/— protocol register (чистый HTTP, NextAuth OAuth flow),token_refresh.py(TokenRefreshManager: refresh по session_token ИЛИ по refresh_token, endpointhttps://auth.openai.com/oauth/token),constants.py(OAUTH_CLIENT_ID). - Captcha: YesCaptcha/2Captcha/локальный Camoufox solver (:8889). На машине уже был баланс YesCaptcha 10084.
- Email-провайдеры: MoeMail (cloudflare_temp_email self-host), TempMail.lol, DDG Email, Outlook и др. — настраиваются в дашборде «全局配置» (provider catalog driven, CRUD).
- Запуск:
.venv/Scripts/python.exe -m uvicorn main:app --port 8100сenv -u PYTHONPATH. Deps: fastapi uvicorn sqlmodel curl_cffi requests pydantic jwcrypto cbor2 aiofiles httpx (+rich quart apscheduler python-dotenv). - Пустой пул — норма после свежего клона: 6 аккаунтов в БД были от ДРУГОГО проекта (gitlab), platform != chatgpt.
GPT Pool Gateway — протокол ChatGPT web (полный рецепт)
Порядок вызовов на каждый запрос (curl_cffi Session impersonate="chrome120"):
-
Requirements + PoW:
GET https://chatgpt.com/backend-api/sentinel/chat-requirementsheaders:Authorization: Bearer <access_token>,openai-sentinel-chat-requirements: true,oai-device-id: <uuid4>,oai-language: en-US, Origin/Referer chatgpt.com. Ответ:{token, proofofwork:{seed, difficulty}}. PoW: sha3-512, лексикографическое сравнение hex-префикса с difficulty (формат answergAAAAABw+ hex(i) + sha; итерации до 25с). -
Conversation (SSE):
POST https://chatgpt.com/backend-api/conversationheaders: +openai-sentinel-chat-token: <req_token>,openai-sentinel-proof-token: <pow>,Accept: text/event-stream. Payload:{"action":"next","messages":[{id,author:{role},content:{content_type:"text",parts:[...]}}],"parent_message_id":<uuid4>,"model":"gpt-4o","history_and_training_disabled":true,"conversation_mode":{"kind":"primary_assistant"},"websocket_request_id":<uuid4>, ...}. Парсинг SSE:data: {...}строки, братьtype=="message"гдеmetadata.message_type in (next,continue)иauthor.role=="assistant", текст =content.parts[-1]; стоп поmetadata.finish_details.type in (stop,end_turn)илиdata: [DONE]. -
Images:
POST https://chatgpt.com/backend-api/generate_imagesheaders: только Bearer+UA+Origin (sentinel-токены НЕ нужны). Payload:{"prompt":..., "model":"gpt-image-1"|"dall-e-3", "history":"none", "return_format":"url", "size":"1024x1024", "n":1..4, "transparent_background":"false"}. Ответ:{"images":[urls]}. Дляresponse_format:"b64_json"— докачать каждый url и b64-encode.
Пул токенов
- Загрузка: SQLite
accounts WHERE platform='chatgpt'JOINaccount_credentials(key=access_token/refresh_token) +gateway_pool/tokens.txt(по JWT на строку, фильтр len>100). - Ротация round-robin по alive; 401/403 → попытка refresh через
platforms.chatgpt.token_refresh.TokenRefreshManager(импорт с PYTHONPATH=корень AAR), не вышло → fail_count, ≥2 → изоляция (alive=False). - Ручной импорт:
POST /pool/tokens {"tokens":[...]}(пишет и в tokens.txt),POST /pool/reload— перечитать БД. - Дашборд
GET /— single-file HTML (GitHub-dark, карточки pool/alive/dead/requests/errors/refreshes + таблица токенов, авто-refresh 5с, textarea для вставки JWT).
Auth-ключ гейтвея
GATEWAY_API_KEY env, дефолт в коде. Pitfall: write_file маскирует строку os.getenv("GATEWAY_API_KEY", ...) → SyntaxError. Фикс: py_compile сразу после записи; починка строки через bytes.fromhex("6f732e676574656e7628...").decode() в execute_code (детали: python-hermes-windows-pitfalls §9).
Статус на конец сессии
- Всё поднято, selfcheck: models 200 (10 моделей), chat/images с пустым пулом → честный 502
no_tokens, оба дашборда 200. - Единственный блокер: пул пуст — старые токены REVOKED (см. pitfall 13 token_revoked). Наполнение: (1) авторег через AAR-дашборд (YesCaptcha есть, нужен mail-провайдер+прокси), (2) ручной вставку живых access_token в :8200, (3) оба.
- Старый chatgpt2api-pro (:5005) не запускался, data/token.txt = 45 байт мусора.
Pitfalls сессии
terminalgвард ложно блокируетpip install ... uvicornкак «long-lived server» — pip-установки гонять через execute_code subprocess.- Убитый дубль AAR-сервера (orphan PID с прошлой сессии на :8100) → bind error 10048 у нового инстанса, НО первый инстанс жил и отвечал. Перед запуском:
netstat -ano | grep :PORT | grep LISTENING+powershell Stop-Process, проверять count=0. tasklist //FIиз git-bash не работает — только psutil или PowerShell (см. python-hermes-windows-pitfalls §6).- ensurepip системы Python311 сломан (нет bundled setuptools whl) → venv без pip → get-pip.py bootstrap (§8 того же скилла).