Files
autoreg-skills-max/skills/chat2api-proxy/references/gptpool-gateway-any-auto-register-2026-09-21.md

69 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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, endpoint `https://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"):
1. **Requirements + PoW:**
`GET https://chatgpt.com/backend-api/sentinel/chat-requirements`
headers: `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 (формат answer `gAAAAABw` + hex(i) + sha; итерации до 25с).
2. **Conversation (SSE):**
`POST https://chatgpt.com/backend-api/conversation`
headers: + `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]`.
3. **Images:**
`POST https://chatgpt.com/backend-api/generate_images`
headers: только 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'` JOIN `account_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 сессии
- `terminal` gвард ложно блокирует `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 того же скилла).