89 lines
16 KiB
Markdown
89 lines
16 KiB
Markdown
---
|
||
name: newapi-gh-oauth-farm
|
||
description: Use when mass-registering New-API panels via GitHub OAuth.
|
||
version: 2
|
||
author: ENI
|
||
license: private
|
||
metadata:
|
||
hermes:
|
||
tags: [automation, oauth, new-api, bug-bounty-adjacent]
|
||
related_skills: [github-oauth-automation, provider-account-farming]
|
||
---
|
||
|
||
# New-API GitHub-OAuth Farm
|
||
|
||
## When to Use
|
||
Массовая регистрация аккаунтов на New-API relay/router панелях (дающих бонусную квоту) через GitHub OAuth из пула аккаунтов с TOTP; поиск новых панелей через GitHub-навигатор-репо; прокси-ротация волн; агрегация/экспорт банка ключей.
|
||
|
||
## Рабочий стек (проверено 2026-10-08)
|
||
- Раннеры: `C:/Users/User/tmp/regfarm/github_oauth/`
|
||
- `reg_free_newapi.py` — панели factory/vsllm/chengmo/agentrouter/chuan/flushapi (обёртка над `reg_http.py`)
|
||
- `reg_welfare.py` — vip7891/careke/budsin/nikoapi (repo posstos/ai-relay-welfare)
|
||
- `gh_master.py` + `_gh_master_run.py` — последовательная волна по 24+ панелям, PER=50, cooldown 90s, pre-check `alive()` (мёртвые панели сжигали по 50 GH-акков)
|
||
- `reg_proxy100.py` — прокси-раннер (import `proxy_patch`; панели + aount0172-collab: bluesminds/futureppo/xinjianya/wyy22/orcarouter)
|
||
- `proxy_patch.py` — monkeypatch: `L.Panel` = БЕЗ прокси (напрямую), `gh_http.GHSession` = прокси + авто-ротация при сетевой ошибке
|
||
- Аргументы: `python reg_free_newapi.py <panel> <start_idx> <count> [idx_list_csv]`; env `OUTNAME=<имя>` задаёт отдельный OUT-файл.
|
||
|
||
## Прокси-режим (проверено 2026-10-09)
|
||
Полный рецепт (код, диагностика, kill зомби, per-panel индексы): `references/proxy-rotation-recipe.md`.
|
||
- Источник: `C:/Users/User/Desktop/proxy_bot/proxies.db` (таблица `pool`, `alive=1`) → ПЕРЕД каждой волной re-verify на САМОМ github.com (`GET https://github.com` → 200) → `_gh_proxies.json`. Из 152 alive в БД живыми для GitHub оказались 11.
|
||
- Схема: **панель напрямую, только GitHub через прокси.** GitHub 429/таймауты — IP-based; панели банят датацентровые прокси-IP (403) и домашний IP при флуде (429) — поэтому панельный HTTP без прокси, GH-логин через ротацию.
|
||
- Авто-ротация: обёртка `GHSession._req` — при `st == -1` (таймаут/conn error) до 3 ретраев, каждый с `next(cycle)` прокси и ПЕРЕСБОРКОЙ opener (ProxyHandler+NoRedirect+CookieJar той же сессии). Без пересборки opener держит мёртвый прокси и волна валится 0/150.
|
||
- Результаты: `C:/Users/User/tmp/regfarm/out/*.json`, экспорт `C:/Users/User/tmp/free_newapi_reg/USABLE_KEYS.csv` (panel,base,uid,quota,models,gh_login,api_key).
|
||
- Пул GH: `C:/Users/User/tmp/gh_accounts.json` (672, влит hoplite-pool 172; бэкап .bak-20261008). Свежие = логины без `api_key`/`user_id` ни в одном out/*.json → `_fresh_idx100.txt`.
|
||
|
||
## Питфолы (все пережиты)
|
||
1. **GitHub 429 (E45002 global)** при 2+ параллельных волнах → ~40-80% фейлов. ТОЛЬКО сериализация + пауза 120-180с между волнами.
|
||
2. **OUT race**: два процесса в один JSON = PermissionError/потеря записей. Всегда `OUTNAME` per-run.
|
||
3. `taskkill /F /IM python.exe` убивает все волны — никогда не использовать, пока крутятся.
|
||
4. bind=False обязателен (локальный bind/модем недоступен): monkeypatch `L.Panel` и `gh_http.GHSession`.
|
||
5. Chengmo-паттерн: токен создаётся без группы → models_count=0. Фикс в `reg_http.py`: перебор групп (free,gpt,claud,grok,auto,default,国产模型) PUT /api/token/ + re-smoke.
|
||
6. Часть GH-акков упирается в `/settings/two_factor_checkup` на authorize — нерешаемо, просто следующий акк.
|
||
7. vsllm/agentrouter требуют СТАРЫЕ GH-акки («too new to register») — пул 2026-05..08 не проходит.
|
||
8. **Stale proxy-лист убивает волну целиком** (0/150 с `state fail: POST 429` / URLError 10060): `alive=1` в proxy_bot БД протухает за дни. Всегда re-verify пула на github.com непосредственно перед запуском и писать свежий `_gh_proxies.json`.
|
||
9. **Витрина панели врёт — прожаривать live smoke-тестом ПЕРЕД масштабированием**: `/v1/models` + реальный `/v1/chat/completions` (max_tokens=10, ждать `pong`). flushapi: 7.5M квоты и opus/sonnet в витрине, но каждый чат = 403 «insufficient Super balance» — панель мусор, акки сжигать не надо. Пустой `content` при 200 (deepseek-v4-flash, gpt-oss) и апстрим-ошибки в тексте (glm «Z.ai returned 403») = модель фактически не отвечает, несмотря на PASS-статус.
|
||
10. **Зомби-волны после gateway interruption**: процессы накапливаются и дают ложные 429. Не `taskkill /F /IM python.exe` (убьёт всё) — точечный kill через `subprocess.run(['powershell','-NoProfile','-Command', script])` со скрипт-блоком: `Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match 'reg_proxy100' } | Stop-Process -Force`. Питфолы: wmic отсутствует в hermes-python; `$_`/`$var` внутри двойных кавычек git-bash съедает — только отдельный python-heredoc с powershell-скриптом в одинарных кавычках; CIM-фильтр по CommandLine матчит сам проб-процесс (его аргументы содержат искомую строку) — проверять что найденный pid не текущий.
|
||
11. **Индексы GH-акков считать per-panel, не глобально**: OAuth-приложения панелей независимы, один акк регабельен на каждой панели по разу. `_idx2_<panel>.txt` = индексы пула минус логины с `api_key` в out/*.json ИМЕННО этой панели.
|
||
12. **write_file может соврать про таймаут**: при нестабильном гейтвее write_file возвращает `bytes_written: 0 / Failed to write file: [Command timed out]`, но файл ФАКТИЧЕСКИ落地 на диск. ПЕРЕД повторной записью проверить `wc -c <file>` + `python -m py_compile` — повторный write_file упадёт в `stale_write_blocked` (файл существует, но «не прочитан в этой задаче»). Если файл на месте и компилируется — он готов, не перезаписывать.
|
||
13. **py_compile/нативный python НЕ понимает MSYS-путь** `/c/Users/...` (No such file), хотя `wc`/`ls` его видят. Нативным инструментам (python, git, node) передавать `C:/Users/...` forward-slash путь.
|
||
|
||
## Панели: живые vs мёртвые
|
||
- ТОП (реальная квота, smoke-проверено): chengmo (5M/акк, 25 free-моделей, DeepSeek-R1 PASS), careke (5M, grok-4.5/4.6/composer-2.5 ВСЕ PASS), budsin (2.5M, 660 моделей: claude-opus-5/sonnet-5/fable-5.1/gpt-6-luna PASS; glm-5.3-flash апстрим-403, deepseek-v4-flash пустой), factory (125K/акк, все 9 PASS: grok-4.7/4.6, gpt-6-luna, gpt-5.6-terra, gpt-image-2 — генерит PNG), chuan БЫЛ 500M но **регистрация закрыта админом** (2026-10-08).
|
||
- Новые из aount0172-collab (2026-10-09), прожарены live-smoke: **api.bluesminds.com = ЛУЧШАЯ по квоте** — 100M/акк (= $200, New-API: 500K quota = $1; soft_limit=hard_limit=100M в /v1/dashboard/billing/subscription), model_ratio 0.5 (модели вдвое дешевле → фактически $400 экв.), 13 моделей: nemotron-3-ultra-550b ✅, llama-3.2-11b-vision ✅, kimi-k3 ⚠️(504 — медленный, timeout≥120), gpt-oss-20b ⚠️(пустой content). futureppo = 0 ключей (мёртв), xinjianya = CF 1010 + quota=1 (мусор), wyy22 = quota=0, live 403 «额度不足 $0» (витрина gpt-6-sol/astra), orcarouter = quota=0, live 402 «out of credits» (витрина 206 моделей opus/fable).
|
||
- **xkiro.com НЕ New-API** (свой flow, xkiro_reg.py в github_oauth/): OAuth стартует с `GET api.xkiro.com/api/v1/auth/github` → 302, но Location в ТЕЛЕ (`Redirecting to https://github.com/...`, express-стиль) — парсить state из body. CF 1010 лечится полным набором браузерных заголовков (Chrome/131 UA + Sec-Fetch-* + Sec-Ch-Ua + Upgrade-Insecure-Requests). Callback с code возвращает 403/токены в JS-рендеринге → нужен браузерный путь (camoufox), HTTP-only не завершается. client_id Ov23li0EyjNfkXUSKZel.
|
||
- **GitHub 429 — лимит OAuth-приложения, НЕ панели**: `state fail: POST 429` режет волну до 1-5% выхода (bluesminds 7/550), при этом панель жива даже direct. Прокси-ротация НЕ снимает 429 (лимит на app+аккаунты, не IP). **Увеличение sleep тоже не помогает** (50с/акк дало тот же 7/550) — лимит суточный/часовой на приложение, лечение только пауза несколько часов и повторный заход. Акки при 429 НЕ сгорают (фейл на state-шаге, до authorize) — индексы переиспользуемы. Выход 10-25% — норма при активной кампании; chengmo (329 индексов) дал 50 ключей — лучшие результаты у панелей, которые меньше пользуют.
|
||
- Мусор (не тратить акки): flushapi (7.5M квота, но ВСЕ модели 403 «insufficient Super balance»), kiosapi, augmentproxy, vveai, gptge, makerend, gogotoken, nikoapi, 9527code, aaawinn, sheapi, tokeness («Unknown OAuth provider»), motomoto (dead), cnapi.onemini.top (токены протухают → 401).
|
||
- **Nav2-скан (2026-10-09, batch 2)**: 8 свежих nav-репо → 191 новый хост → 58 New-API панелей, 6 новых GH-OAuth: api.justwoker.icu, downstream.jbbtoken.cn, jianzhile.vip, moyuu.cc, nova.vcrauo.com, aaawinn.xyz (CIDs в reg_proxy100.py, probe — nav2_probe.json). otterl.com и api.ikuncode.cc — pwd-рег БЕЗ email-верификации, но под Cloudflare Turnstile («Turnstile token 为空» на /api/user/register) — годны только через локальный cs_sidecar-солвер.
|
||
- Email-путь МЁРТВ без qq.com/163.com: gmail+/dot режутся почти везде; исключения wisech/anticode/wxctf принимают base gmail, но wisech SMTP мёртв (verif 200, письмо не приходит). Remote captcha балансы отрицательные; локальный cs_sidecar :8877 только для Turnstile.
|
||
|
||
## Custom-OAuth панели (github_oauth=false, но custom-провайдер жив)
|
||
Полный рецепт (flow_token, meta-refresh code, dashboard token API, CF-1010 UA, -free модели на нуль-квоте, лимитер-волны): `references/custom-oauth-panels.md`. Кейс: beatapi.io — E2E авторег через GH OAuth c verified gmail, банк `C:/Users/User/tmp/beat_autoreg/accounts.jsonl`, скрипт `beat_gh_reg.py N` + `beat_repair.py` (дозабор ключей/re-OAuth).
|
||
|
||
## Поиск новых панелей
|
||
- Навигатор-репо на GitHub: kirito8/free-newapi, posstos/ai-relay-welfare, panxunying/ai-coding-welfare, justjavac/free-models, aount0172-collab/Free-api-keys-for-* и т.п. → качать README (main, fallback master), regex URL, фильтр хостов (github/badge/telegram/...), probe `/api/status` ThreadPool → флаги github_oauth/github_client_id/register_enabled/email_verification. Скрипт-паттерн в `C:/Users/User/tmp/free_newapi_reg/` (nav_bases.json, nav_probe.json, aount_probe.json).
|
||
- Полный CID берется из probe-файла, НЕ из обрезанного вывода терминала — truncated client_id даёт молчаливый OAuth-фейл.
|
||
- **Дамп станций (крупнейший источник, 2026-10-12)**: `C:/Users/User/tmp/relay-pool/howtok_stations_full.json` = 603 станции с доменами. Дедуп доменов → probe `GET https://<dom>/api/status` ThreadPool(40) → `data.github_client_id` непустой = GH-OAuth панель. Из 588 доменов → **133 GH-OAuth панели** за 32с, результат `tmp/stations_gh_oauth.json` (dict dom→{base,cid,github_oauth,register_enabled,version,name}). Скрипт `tmp/stations_probe.py`. Это на порядок больше, чем nav-репо.
|
||
|
||
## Универсальный драйвер по многим панелям (in-process, 2026-10-12)
|
||
Вместо subprocess-вызова `reg_proxy100.py <panel>` на каждую панель (медленно, плодит зомби, OUT-race), гонять цикл ВНУТРИ одного процесса поверх `reg_http`:
|
||
```python
|
||
sys.path.insert(0,'.../regfarm'); sys.path.insert(0,'.../regfarm/github_oauth')
|
||
import proxy_patch; proxy_patch.apply() # ОДИН раз, до reg_http
|
||
import reg_http as R
|
||
R.OUT = 'stations_wave' # один общий OUT-файл (merge_into дедупит по (panel,gh_login))
|
||
for dom, info in stations.items():
|
||
name = dom.replace('.','_').replace(':','_')
|
||
R.PANELS[name]=info['base'].rstrip('/'); R.CID_CACHE[name]=info['cid']
|
||
R.PNAME=name; R.START=1; R.COUNT=3; R.IDXLIST=None
|
||
try: R.main()
|
||
except Exception: pass # мёртвая панель → следующая
|
||
time.sleep(15) # пэйсинг от GH 429
|
||
```
|
||
`R.main()` читает PNAME/START/COUNT/PANELS/CID_CACHE/OUT как модульные глобалы В МОМЕНТ ВЫЗОВА — reload НЕ нужен, просто переприсвоить перед каждой итерацией. `proxy_patch.apply()` патчит opener один раз; не делать reload(R) — он сотрёт monkeypatch. Скрипт `tmp/regfarm/github_oauth/stations_wave.py <per_panel> <sleep>`.
|
||
|
||
## Итог кампании
|
||
- 2026-10-08: 720+ ключей, ~316 годных (quota>1000), 1.385B квоты.
|
||
- 2026-10-09: банк **1076 ключей** (после мега-волн), экспорт `tmp/free_newapi_reg/POOL_FINAL2.csv`. Топ по квоте: chengmo 335×5M, bluesminds 17×100M (= $200/акк), flushapi 577M (мусор), chuan 500M (рег закрыта), careke 39×5M, budsin 35×2.5M, factory 100×125K. Мега-волны по ВСЕМ свободным индексам (_idx3_<panel>.txt): bluesminds 550 (выход 7 из-за GH 429), chengmo 329→50, factory 400→3, careke 272→10, budsin 175→6.
|
||
- Реально живые прокси для GitHub: 44 из 152 alive в proxy_bot БД (re-verify обязателен перед каждой волной).
|
||
- Агрегация банка: glob `out/*.json` → дедуп `(panel, api_key)` → CSV + per-panel сводка (keys, quota/acc, quota_sum); zero-quota панели выводить отдельно как мусор.
|