This will helps in local dev without twitch communication.
Оценка сложности мока Twitch для локальной разработки
Что нужно замокать
Компонент
Twitch Helix REST API
Twitch OAuth (id.twitch.tv/oauth2)
EventSub WebSocket (wss://eventsub.wss.twitch.tv/ws)
Twitch Internal GQL (gql.twitch.tv/gql)
Ключевые сложности
1. EventSub WebSocket — самое сложное.
Приложение (apps/eventsub) при старте (on_start.go):
- Создаёт conduit через
GET/POST /helix/eventsub/conduits
- Подключается к
wss://eventsub.wss.twitch.tv/ws
- Регистрирует shards через
PATCH /helix/eventsub/conduits/shards
- Подписывается на 30+ типов событий на каждый канал
Мок-сервер должен реализовывать весь этот протокол.
2. OAuth flow — без реального Twitch нельзя залогиниться.
В apps/api-gql/internal/delivery/http/routes/auth/post-code.go backend обменивает code на token и сразу вызывает helix.GetUsers() для получения профиля. Это нужно полностью перехватить.
3. Scheduler polling (apps/scheduler/internal/timers/streams.go) — каждые 15 секунд опрашивает /helix/streams для всех каналов. Без мока будут постоянные ошибки.
4. Tokens-сервис (apps/tokens) — все токены идут через NATS, сервис дешифрует из БД и обновляет через id.twitch.tv. Нужно замокать refresh-эндпоинт.
Реалистичная оценка объёма работ
Минимальный подход (только залогиниться и запустить без крашей):
- Мок HTTP-сервер на Go/Node с ~10 эндпоинтами
- Фейковый OAuth (code→token→user)
- Заглушка для EventSub WebSocket (welcome message + keepalive)
- ~3-5 дней работы
Полноценный подход (работающий бот, события, чат):
- Полный мок Helix API (~25 эндпоинтов)
- EventSub WebSocket с возможностью вручную отправлять события (CLI-тул или UI)
- Мок GQL
- Seed-данные (фейковый пользователь, бот, канал в БД)
- ~2-3 недели работы
Самый прагматичный путь
Существует Twitch CLI (twitch mock-api) — официальный инструмент от Twitch для мока API. Но он не покрывает EventSub WebSocket conduits (только старый webhook-режим).
Лучший вариант для проекта — написать один небольшой Go-сервис (apps/twitch-mock), который:
- Поднимается в docker-compose.dev.yml
- Слушает на localhost:8080 и имитирует id.twitch.tv + api.twitch.tv
- Переопределяется через env-переменную типа TWITCH_API_BASE_URL=http://localhost:8080
- При старте сидит в БД фейковый пользователь и бот
Проблема: в коде URL api.twitch.tv и id.twitch.tv захардкожены внутри библиотеки nicklaw5/helix и внутреннего GQL. Нужно проверить, поддерживает ли эта библиотека кастомный base URL — если нет, придётся форкать или патчить.
Итог
Вариант
Минимальный мок (запуск без крашей)
Полный мок (рабочая локалка)
Через Twitch CLI + патчи
Это реалистичный но объёмный рефактор. Основная сложность — EventSub WebSocket протокол и то, что URL Twitch захардкожены в зависимостях.
This will helps in local dev without twitch communication.
Оценка сложности мока Twitch для локальной разработки
Что нужно замокать
Компонент
Twitch Helix REST API
Twitch OAuth (id.twitch.tv/oauth2)
EventSub WebSocket (wss://eventsub.wss.twitch.tv/ws)
Twitch Internal GQL (gql.twitch.tv/gql)
Ключевые сложности
1. EventSub WebSocket — самое сложное.
Приложение (
apps/eventsub) при старте (on_start.go):GET/POST /helix/eventsub/conduitswss://eventsub.wss.twitch.tv/wsPATCH /helix/eventsub/conduits/shardsМок-сервер должен реализовывать весь этот протокол.
2. OAuth flow — без реального Twitch нельзя залогиниться.
В
apps/api-gql/internal/delivery/http/routes/auth/post-code.gobackend обменивает code на token и сразу вызываетhelix.GetUsers()для получения профиля. Это нужно полностью перехватить.3. Scheduler polling (
apps/scheduler/internal/timers/streams.go) — каждые 15 секунд опрашивает/helix/streamsдля всех каналов. Без мока будут постоянные ошибки.4. Tokens-сервис (
apps/tokens) — все токены идут через NATS, сервис дешифрует из БД и обновляет черезid.twitch.tv. Нужно замокать refresh-эндпоинт.Реалистичная оценка объёма работ
Минимальный подход (только залогиниться и запустить без крашей):
Полноценный подход (работающий бот, события, чат):
Самый прагматичный путь
Существует Twitch CLI (twitch mock-api) — официальный инструмент от Twitch для мока API. Но он не покрывает EventSub WebSocket conduits (только старый webhook-режим).
Лучший вариант для проекта — написать один небольшой Go-сервис (apps/twitch-mock), который:
Проблема: в коде URL api.twitch.tv и id.twitch.tv захардкожены внутри библиотеки nicklaw5/helix и внутреннего GQL. Нужно проверить, поддерживает ли эта библиотека кастомный base URL — если нет, придётся форкать или патчить.
Итог
Вариант
Минимальный мок (запуск без крашей)
Полный мок (рабочая локалка)
Через Twitch CLI + патчи
Это реалистичный но объёмный рефактор. Основная сложность — EventSub WebSocket протокол и то, что URL Twitch захардкожены в зависимостях.