Files

4.2 KiB
Raw Permalink Blame History

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.