Files

29 lines
4.2 KiB
Markdown
Raw Permalink 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.

# Custom-OAuth New-API панели (native github_oauth=false, но custom-провайдер жив)
Некоторые New-API форки выставляют в `/api/status` `github_oauth: false`, НО регистрируют через `custom_oauth_providers` — отдельный flow с flow_token. Не списывать панель как «OAuth dead» по флагу github_oauth; проверять custom-провайдеры в status и пробовать flow.
## Flow (проверено на beatapi.io, 2026-10-13)
1. `POST /api/oauth/state {provider:'github', intent:'login', aff:'<code>'}` → `data.flow_token` (МОЖЕТ быть вложен в `data` как dict ИЛИ как строка — парсить оба варианта).
2. GH authorize с `state=<flow_token>`; если GH-акк УЖЕ авторизовал это OAuth-приложение, страница не редиректит, а отдаёт HTML `OAuth application authorized` с meta-refresh — code+state лежат В ТЕЛЕ, regex `oauth/github\?code=([a-f0-9]{16,})[^"']*state=([A-Za-z0-9_\-]+)`.
3. `GET /api/oauth/github?code=..&state=..` → `data.access_token` + `data.session.sid` (sid тоже может быть вложен: `d.session_id or d.session.sid`).
4. Email-whitelist панели применяется И к OAuth: GH-акк обязан иметь VERIFIED primary email whitelist-домена (gmail/163/qq/icloud/yahoo/foxmail у BeatAPI). Сортировать пул gmail-first; hotmail/outlook-когорта = гарантированный FAIL, не жечь на них крит-запросы.
5. Flagged/suspended GH-акки на authorize редиректят на /dashboard без code («redir no code») — следующий акк.
## Dashboard API (new-api-общее)
- `POST /api/token/` — trailing slash ОБЯЗАТЕЛЕН (без него 307 с пустым телом).
- Header `New-Api-User: <uid>` обязателен на token-эндпоинтах.
- Полный ключ: `POST /api/token/{tid}/key` (GET = 404); в списках ключ маскирован звёздочками — если в ответе `*`, ключ не получен.
- При 429 на /key акк не теряет токен — сохранить PARTIAL (access_token без api_key) и дозабрать позже отдельным repair-прогоном.
## Relay /v1
- Cloudflare 1010 на дефолтном urllib UA — на ВСЕ /v1-запросы ставить браузерный User-Agent.
- Диагноз нулевой квоты: 402 «Insufficient balance» на платных моделях; `-free`-суффикс модели при quota=0 даёт 200, а 429 «Rate limit exceeded: this model» = free-модель ДОСТУПНА, просто 1 req/min. Нуль-квота ≠ мусорный акк, если есть free-модели.
## Лимитер и волны
- Крит-эндпоинты (oauth/state, exchange, token) под лимитером ~20 запросов/20мин на IP → реально ~4 акка/окно. Обработка: на 429 sleep 600 и продолжать (не падать), pacing 75-110с между акками.
- Большую волну НЕ запускать параллельно с текущей (общий лимитер + race на used-файл). Паттерн chain: скрипт ждёт `WAVE_EXIT` в логе предыдущей волны, затем стартует следующую + repair. Запускать background + persist_on_release.
- Signup-бонус ($/квота) может выдаваться только ПЕРВОМУ акку с IP (антифрод) — не закладывать бонус в ценность волны; ценность = free-модели + aff.
## Windows-питфол диагностики
- CIM-запрос `CommandLine -match '<script>'` матчит САМ ПРОБЕ-ПРОЦЕСС, если строка поиска есть в его командной строке (ложный «волна жива»). Искать только `python.exe` с ОТНОСИТЕЛЬНЫМ путём скрипта или исключать собственный pid.