refactor(provider/vk): перенести vkauth/captcha/browserprofile/namegen под provider/vk/internal

Переносит VK-specific пакеты под internal/provider/vk/internal/* — теперь
недоступны для импорта извне provider/vk (Go internal/ rule). ish остался в
internal/client/ish — не VK-specific.

vk.SetCaptchaLoggers удалён: логгеры captcha/manual подключаются внутри vk.New,
debug-флаг передаётся через новое поле Config.Debug. cmd/client/main.go больше
не импортирует captcha-пакеты.

Документация обновлена.
This commit is contained in:
samosvalishe
2026-05-23 14:36:58 +03:00
parent 12c1ad6283
commit 2b85d937ea
28 changed files with 31 additions and 33 deletions
+1 -1
View File
@@ -39,7 +39,6 @@ func main() {
logger := logx.New(cfg.Log.Debug)
logger.Infof("btp client version=%s", version)
vk.SetCaptchaLoggers(logger, cfg.Log.Debug)
dnsdial.SetLogger(logger)
ctx, cancel := context.WithCancel(context.Background())
@@ -160,6 +159,7 @@ func buildProvider(cfg *config.Client, dialer net.Dialer, connected *atomic.Int3
StreamsPerCache: cfg.VK.StreamsPerCred,
StreamsAlive: connected.Load,
Log: logger,
Debug: cfg.Log.Debug,
}, vk.DefaultManualSolver)
case config.ProviderStatic:
return static.New(static.Config{
+2 -2
View File
@@ -93,8 +93,8 @@ Linux user-mode environment для iOS (через usermode x86 emulation). Па
### captcha (auto / manual)
Один домен, два пути:
- **auto** (`internal/client/captcha`): VK slider-puzzle решается программно.
- **manual** (`internal/client/captcha/manual`): HTTP-сервер на 127.0.0.1:8765, запуск браузера, gzip-rewrite VK-страниц.
- **auto** (`internal/provider/vk/internal/captcha`): VK slider-puzzle решается программно.
- **manual** (`internal/provider/vk/internal/captcha/manual`): HTTP-сервер на 127.0.0.1:8765, запуск браузера, gzip-rewrite VK-страниц.
Переключение: `vkauth.Client` пробует auto, при провале → manual fallback. Флаг `-manual-captcha` сразу идёт в manual.
-1
View File
@@ -68,4 +68,3 @@ VK Calls API. Перебирает встроенные `app_id/app_secret`, п
1. **Per-process один провайдер** — нет fallback chain (VK → static). Можно добавить wrapper-провайдер позже.
2. **`StreamsAlive` callback** — VK-провайдер использует для решения fatal-vs-throttle. Другие провайдеры могут игнорировать (поле `Config.StreamsAlive` nil-safe).
3. **Файл captcha-логгеров** в `vk.SetCaptchaLoggers` — VK-специфичная утечка в `cmd/client`. Будет инкапсулирована при физическом переносе `internal/client/captcha` → `internal/provider/vk/internal/captcha`.
@@ -20,8 +20,8 @@ import (
fhttp "github.com/bogdanfinn/fhttp"
tlsclient "github.com/bogdanfinn/tls-client"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/logx"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
"github.com/samosvalishe/btp/internal/randx"
)
@@ -1,5 +1,5 @@
// Package manual реализует ручное решение CAPTCHA — fallback, когда автосолвер
// (internal/client/captcha) не справился или пользователь дал -manual-captcha.
// (internal/provider/vk/internal/captcha) не справился или пользователь дал -manual-captcha.
// Поднимает локальный HTTP-сервер 127.0.0.1:8765, проксирующий страницу VK
// CAPTCHA (с переписыванием абсолютных URL и gzip), открывает её в браузере и
// ждёт токен/ключ после решения пользователем.
@@ -24,9 +24,9 @@ import (
"strings"
"time"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/client/ish"
"github.com/samosvalishe/btp/internal/logx"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
)
// Debug включает подробное логирование request/response проксируемого
@@ -4,8 +4,8 @@ import (
"context"
"fmt"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/client/captcha"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/captcha"
tlsclient "github.com/bogdanfinn/tls-client"
)
@@ -4,8 +4,8 @@ import (
"context"
"net"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/client/captcha"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/captcha"
tlsclient "github.com/bogdanfinn/tls-client"
)
@@ -5,8 +5,8 @@ import (
"fmt"
neturl "net/url"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/client/namegen"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/namegen"
tlsclient "github.com/bogdanfinn/tls-client"
"github.com/bogdanfinn/tls-client/profiles"
@@ -4,7 +4,7 @@ import (
"context"
"fmt"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
tlsclient "github.com/bogdanfinn/tls-client"
)
@@ -7,8 +7,8 @@ import (
neturl "net/url"
"time"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/client/captcha"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/captcha"
tlsclient "github.com/bogdanfinn/tls-client"
)
@@ -5,7 +5,7 @@ import (
"fmt"
"strings"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
tlsclient "github.com/bogdanfinn/tls-client"
)
@@ -6,7 +6,7 @@ import (
neturl "net/url"
"github.com/google/uuid"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
tlsclient "github.com/bogdanfinn/tls-client"
)
@@ -8,7 +8,7 @@ import (
"io"
neturl "net/url"
"github.com/samosvalishe/btp/internal/client/browserprofile"
"github.com/samosvalishe/btp/internal/provider/vk/internal/browserprofile"
fhttp "github.com/bogdanfinn/fhttp"
tlsclient "github.com/bogdanfinn/tls-client"
+13 -14
View File
@@ -1,6 +1,6 @@
// Package vk — провайдер TURN-реквизитов через VK Calls API.
//
// Фасад над internal/client/vkauth: добавляет фиксированный link (адрес
// Фасад над internal/provider/vk/internal/vkauth: добавляет фиксированный link (адрес
// VK callroom) и адаптирует сигнатуру GetCredentials к provider.Provider.
//
// vk.Provider удовлетворяет provider.Provider и используется через generic
@@ -12,11 +12,11 @@ import (
"fmt"
"net"
"github.com/samosvalishe/btp/internal/client/captcha"
manualcaptcha "github.com/samosvalishe/btp/internal/client/captcha/manual"
"github.com/samosvalishe/btp/internal/client/vkauth"
"github.com/samosvalishe/btp/internal/logx"
"github.com/samosvalishe/btp/internal/provider"
"github.com/samosvalishe/btp/internal/provider/vk/internal/captcha"
manualcaptcha "github.com/samosvalishe/btp/internal/provider/vk/internal/captcha/manual"
"github.com/samosvalishe/btp/internal/provider/vk/internal/vkauth"
)
// Config — параметры VK-провайдера.
@@ -43,6 +43,9 @@ type Config struct {
// Log — уровневый логгер. nil → no-op.
Log logx.Logger
// Debug включает debug-вывод в manual-captcha (HTTP-сервер).
Debug bool
}
// ManualSolverFunc — кастомный решатель captcha. Если nil, vkauth не пытается
@@ -61,6 +64,11 @@ func New(cfg Config, solver ManualSolverFunc) (*Provider, error) {
if cfg.Link == "" {
return nil, fmt.Errorf("vk: empty Link")
}
// captcha-пакеты — internal/ для provider/vk, поэтому подключаем
// логгер здесь, а не в cmd/client.
captcha.SetLogger(cfg.Log)
manualcaptcha.SetLogger(cfg.Log)
manualcaptcha.Debug = cfg.Debug
auth := vkauth.New(vkauth.Config{
Credentials: cfg.Credentials,
Dialer: cfg.Dialer,
@@ -97,17 +105,8 @@ func (p *Provider) BackoffUntilUnix() int64 { return p.auth.BackoffUntilUnix() }
// Name реализует provider.Provider.
func (*Provider) Name() string { return "vk" }
// SetCaptchaLoggers подключает logger в общие captcha-пакеты. Удобный шорткат
// для cmd/client/main.go, чтобы не импортировать captcha/manualcaptcha напрямую
// после полного перехода на provider/vk.
func SetCaptchaLoggers(log logx.Logger, debug bool) {
captcha.SetLogger(log)
manualcaptcha.SetLogger(log)
manualcaptcha.Debug = debug
}
// DefaultManualSolver — стандартный manual-captcha solver, использует
// internal/client/captcha/manual (HTTP-сервер 127.0.0.1:8765 + браузер).
// internal/provider/vk/internal/captcha/manual (HTTP-сервер 127.0.0.1:8765 + браузер).
func DefaultManualSolver(ctx context.Context, e *captcha.Error, d net.Dialer) (string, string, error) {
if e.RedirectURI != "" {
t, err := manualcaptcha.SolveViaProxy(ctx, e.RedirectURI, d)