Software Architecture Description

Information item: Software Architecture Description. Content and viewpoints are informed by ISO/IEC/IEEE 42010 (architecture description) and ISO/IEC/IEEE 15289 (life-cycle information items). User/operator documentation is published separately with reference to ISO/IEC 26514. This wording does not claim certification or verified conformity. Print layout targets A4 for reproducible distribution.

на программное обеспечение
«CoronerChat»
Версия изделия: 2.7.10 (package.json / GitHub Latest)

Аннотация

К программе (изделию)

CoronerChat 2.7.10 — прикладное программное обеспечение для стримеров и модераторов: объединение чатов Twitch, VK Video Live, Kick, YouTube Live, Rutube, DonationAlerts и MemeAlerts в единую ленту с нормализацией формата сообщений, буфером и поиском; отображение во встроенном веб-интерфейсе и в режиме оверлея OBS; авторизация OAuth 2.0 (где применимо); каталоги эмодзи/бейджей (в т.ч. 7TV); OBS WebSocket; UX-пакет эфира (пресеты, алерты, goal/vote); локальная статистика сессий и достижения; локализация UI (ru/en/ro/de/fi); автообновление с GitHub Latest (dorimeryt-alt/CoronerChat); релей «now playing»; desktop Electron и опциональный zapret. Поставка: NSIS Setup / portable, каталог данных CoronerChat-data.

К настоящему документу

Настоящее техническое описание содержит сведения об архитектуре ПО «CoronerChat»: структурную модель в нотации IDEF0, контекстные и декомпозированные диаграммы потоков данных (DFD), описание взаимодействия с каждой внешней платформой и смежными HTTP-сервисами, перечень хранилищ данных, диаграммы процессов (BPMN) и последовательностей (UML), состав программных модулей, группы маршрутов HTTP и типы сообщений WebSocket, нефункциональные требования и словарь данных; в разделе 1 приведён перечень реализованных функций изделия (п. 1.5). Диаграммы, выполняемые средствами Mermaid в среде браузера, приведены для наглядности и сопровождения кода. Документ предназначен для разработчиков, системных аналитиков и лиц, ответственных за сопровождение комплекта программной документации. Эксплуатационная документация для оператора изложена в docs/coronerchat-operation-print.html и на сайте (docs/guide.html) в соответствии с ISO/IEC 26514.

Ключевые слова: Software Architecture Description; ISO/IEC/IEEE 42010; CoronerChat 2.7.10; IDEF0; DFD; BPMN; UML; WebSocket; OAuth 2.0; Twitch; VK; Kick; YouTube; Rutube; DonationAlerts; MemeAlerts; i18n; auto-update; Electron; Node.js.

Нормативные и справочные ссылки

Термины, определения и сокращения

Термин / сокращ.Определение
ПО, изделиеПрограммное обеспечение CoronerChat — сервер чата и UI (веб и Electron).
DFDData Flow Diagram — диаграмма потоков данных.
ICOMВ IDEF0: Input, Control, Output, Mechanism — входы, управление, выходы, механизмы.
OAuth 2.0Протокол делегирования доступа; используется для Twitch, VK, Kick, DonationAlerts, YouTube (Google).
WSWebSocket — двунаправленный канал между браузером и ChatAppServer по пути /ws.
A1–A6Декомпозиция контекстной функции A-0 по IDEF0 в настоящем документе.
HelixREST API Twitch.
EventSubПодсистема подписки на события Twitch (в т.ч. баллы канала, Hype Train).
DADonationAlerts.
MAMemeAlerts.

CoronerChat — Software Architecture Description (v2.7.10)

Открыть в браузере с сетью (Mermaid с CDN). Печать в PDF: Ctrl+P → «Сохранить как PDF». При обрезании диаграмм уменьшите масштаб страницы в предпросмотре.

Содержание

  1. Общие положения; перечень реализованных функций (п. 1.5)
  2. Структурная модель (IDEF0)
  3. Состав программных модулей и соответствие процессам
  4. Контекстная диаграмма потоков данных (DFD, уровень 0)
  5. Диаграмма декомпозиции первого уровня (DFD-1)
  6. Описание взаимодействия с внешними платформами (DFD-2 по каждой платформе)
  7. Хранилища данных
  8. Описание процессов (BPMN)
  9. Диаграммы последовательности взаимодействия
  10. Компоненты и развёртывание
  11. События WebSocket и группы HTTP API
  12. Нефункциональные требования
  13. Словарь данных
  14. Заключение

1. Общие положения

1.1. Назначение изделия

Единый клиент для приёма, нормализации, буферизации и отображения чата с нескольких платформ (Twitch, VK Video Live, Kick, YouTube Live, Rutube, DonationAlerts, MemeAlerts), а также: OAuth, прокси ассетов и каталогов эмодзи (7TV), OBS WebSocket, UX-пакет эфира, локальная статистика и достижения, локализация UI, автообновление с GitHub Latest, релей now playing, опционально zapret на desktop, оверлей и планшетный режим через общий HTTP+WS сервер.

1.2. Назначение документа

Формализация архитектуры для сопровождения, обучения и согласования изменений; договорённость о границах системы и внешних интерфейсах.

1.3. Область применения документа

Разработка, сопровождение и выпуск CoronerChat. Эксплуатация оператором — по docs/coronerchat-operation-print.html и docs/guide.html (ISO/IEC 26514).

1.4. Границы системы

В составе ПО: процесс Node.js (ChatAppServer), встроенный web-ui, провайдеры в src/providers/, при desktop — оболочка Electron.

Вне ПО: внешние платформы (Twitch, VK Video Live, Kick, DonationAlerts, MemeAlerts, YouTube, Rutube, 7TV/CDN), OBS Studio, GitHub Releases (канал обновлений), ОС, браузер пользователя при внешней авторизации, сеть и политики DPI (zapret).

1.5. Перечень реализованных функций изделия

Ниже приведена характеристика реализованного функционала текущей версии CoronerChat: перечень не претендует на исчерпание всех пунктов UI, а фиксирует основные возможности, подтверждаемые кодом сервера и встроенного клиента.

1.5.1. Режимы поставки и запуска

1.5.2. Приём и объединение чатов нескольких платформ

1.5.3. Нормализация, буфер и доставка в интерфейс

1.5.4. OAuth 2.0 и локальное хранение учётных данных

1.5.5. Действия в экосистеме Twitch (при наличии прав доступа токена)

1.5.6. Прокси HTTP, каталоги эмодзи и бейджей

1.5.7. Интеграции в desktop-сборке

1.5.8. Диагностика, журналирование и устойчивость

1.5.9. Эфир, статистика, локализация и обновления (2.7.x)

2. Структурная модель (IDEF0)

Модель приведена в нотации IDEF0 (ICOM). Диаграммы выполнены в виде векторной графики SVG.

2.1. Контекст деятельности A-0

A-0. Агрегировать и показать мультиплатформенный чат и состояние стрима

2.2. Декомпозиция процессов A1–A6

A1. Приём событий от внешних чатов
A2. Нормализация, дедупликация, буфер, модерация
A3. HTTP: UI, REST, статика, прокси ассетов
A4. WebSocket: снимок, поток сообщений, отладка
A5. OBS, now playing, zapret (desktop)
A6. Управление OAuth и сохранение сессий

3. Состав программных модулей и соответствие процессам кодовой базе

ПроцессГлавные артефактыНазначение кратко
A1twitch-irc-source.js, twitch-eventsub-channel-points.js, vk-video-live-source.js, kick-chat-source.js, …Подключение к внешним транспортам, реконнект, парсинг в события
A2chat-app-server.js (bufferAndBroadcastMessage, handleChannelPointsRedemption, handleHypeTrainEvent)Единая точка входа сообщений в UI-поток
A3chat-app-server.js handleHttpREST и отдача встроенного web-ui
A4chat-app-server.js wss.on("connection")Подписка клиентов, snapshot
A5ObsWebSocketTelemetryClient, NowPlayingRelay, ZapretManagerВнешние интеграции desktop
A6*-auth.js, сохранение в каталог данныхИдентичность пользователя на платформах
UIweb-ui.js (встраивается сервером)Рендер чата, настройки, overlay, WebSocket-клиент на /ws

4. Контекстная диаграмма потоков данных (DFD, уровень 0)

Рисунок 4 — Контекстная DFD: изделие «CoronerChat» и внешние сущности

flowchart TB subgraph EXT["Внешние сущности"] U[Пользователь] TW[Twitch] VK[VK Video Live] KI[Kick] DA[DonationAlerts] MA[MemeAlerts] YT[YouTube Live] S7[7TV и CDN эмодзи] OB[OBS Studio] end P(("P0 Ядро CoronerChat")) DS[(D Хранилище файлов)] U <-->|HTTP REST WebSocket| P P <-->|IRC EventSub Helix| TW P <-->|WS API| VK P <-->|WS OAuth| KI P <-->|HTTP| DA P <-->|WS token| MA P <-->|чат| YT P <-->|HTTP каталоги| S7 P <-->|WS телеметрия| OB P <-->|read write| DS

5. Диаграмма декомпозиции первого уровня (DFD-1)

Рисунок 5 — DFD первого уровня: источники, ядро, HTTP, WebSocket, хранилища

flowchart LR subgraph Stores["Хранилища"] D1[(app-state и persisted)] D2[(OAuth токены json)] D3[(буфер и история в RAM)] end P1[1 Источники] P2[2 Ядро буфера] P3[3 HTTP] P4[4 WebSocket] EXT[Twitch VK Kick DA MA YT] UI[Браузер UI] P1 -->|события| P2 P2 --> D3 P2 --> P4 P3 --> D1 P3 --> D2 P3 <-->|запросы| UI P4 -->|push| UI EXT <--> P1

6. Описание взаимодействия с внешними платформами (DFD, уровень 2)

Все перечисленные ниже интеграции сходятся в единый процесс A2 — класс ChatAppServer (src/server/chat-app-server.js): нормализация сообщений, дедупликация, messageBuffer, рассылка клиентам по WebSocket. Отличия заключаются во внешнем транспорте, правилах аутентификации и составе типов событий.

6.1. Twitch

Назначение. Приём чата по IRC; дополнительно — события баллов канала и Hype Train через EventSub WebSocket и при необходимости нормализация наград через Helix REST (poller); доступ к API Twitch по OAuth.

Компоненты ПО.

КомпонентФайл (каталог src/providers/twitch/)Роль
TwitchIrcSourcetwitch-irc-source.jsПодключение к IRC, PRIVMSG, теги, реконнект.
TwitchChannelPointsEventSub, TwitchHypeTrainEventSub, TwitchChannelPointsPollertwitch-eventsub-channel-points.jsEventSub уведомления; поллер Helix при отсутствии EventSub для баллов.
TwitchAuth (Helix)twitch-auth.jsOAuth, хранение токена, вызовы Helix.

Внешние интерфейсы. IRC (Twitch); HTTPS EventSub; HTTPS Helix (api.twitch.tv).

HTTP API изделия (фрагмент). /api/auth/twitch/*; /api/twitch/badges, /api/twitch/emotes, /api/twitch/asset, /api/twitch/chatters, /api/twitch/clip (см. реализацию handleHttp).

Состояние в state. twitchTransport (IRC, channelPoints, hypeTrain, сетевые подсказки).

Рисунок 6.1 — DFD-2: Twitch, несколько параллельных входов в слияние A2

flowchart TB TWIRC[Twitch IRC] SUBCP[EventSub баллы] SUBHY[Hype Train EventSub] POLL[Helix poller стример] AUTH[TwitchAuth Helix] MERGE[ChatAppServer merge dedup] TWIRC -->|PRIVMSG tags| MERGE SUBCP -->|redemption JSON| MERGE SUBHY -->|hype event| MERGE POLL -->|redemption нормализ| MERGE AUTH -->|токен| SUBCP AUTH -->|токен| SUBHY AUTH -->|токен| POLL MERGE -->|chat.message| OUT[WebSocket клиенты]

6.2. VK Video Live

Назначение. Приём сообщений и служебных событий трансляции VK Video Live по WebSocket API.

КомпонентФайлРоль
Источник VKsrc/providers/vk/vk-video-live-source.jsWS-клиент, парсинг событий в унифицированные сообщения.
VkAuthsrc/providers/vk/vk-auth.jsOAuth / implicit, запись vk-auth.json.
Вспомогательные HTTPS-вызовыsrc/providers/vk/vk-https-utils.jsОбщие утилиты запросов к API VK.

Внешние интерфейсы. WebSocket и HTTPS API VK Video Live (см. актуальную документацию VK).

HTTP API изделия. /api/auth/vk/* (в т.ч. start, poll, logout, callback, implicit-token); GET /api/vk/catalog, GET /api/vk/asset (каталог и прокси бинарных ресурсов).

Состояние. vkTransport (реконнект, время последнего подключения, ошибки сети).

Рисунок 6.2 — DFD-2: VK Video Live → ядро

flowchart LR VK[VK Video Live WS] SRC[vk-video-live-source] A2[ChatAppServer A2] WS[WebSocket клиенты] VK -->|события чата| SRC -->|нормализованное сообщение| A2 -->|chat.message| WS

6.3. Kick

Назначение. Приём сообщений чата Kick по WebSocket; отправка сообщений при наличии прав — через REST API Kick.

КомпонентФайлРоль
KickChatSourcesrc/providers/kick/kick-chat-source.jsWS чата, интеграция с ядром.
KickAuthControllersrc/providers/kick/kick-auth.jsOAuth Kick, kick-auth.json.
Kick HTTPkick-http-public.js, kick-api.jsПубличные данные канала, постинг сообщений.

Внешние интерфейсы. WebSocket чата Kick; HTTPS OAuth и API Kick.

HTTP API изделия. /api/auth/kick/*; POST /api/settings/kick (сохранение канала и перезапуск транспорта при необходимости).

Состояние. state.kick, state.kickAuth (снимок авторизации в ответах API).

Рисунок 6.3 — DFD-2: Kick → ядро

flowchart LR KWS[Kick chat WS] KSRC[kick-chat-source] A2[ChatAppServer A2] UI[WebSocket клиенты] KWS -->|messages| KSRC -->|events| A2 -->|chat.message| UI

6.4. DonationAlerts

Назначение. Получение оповещений о донатах и связанных событиях через HTTP long-polling.

КомпонентФайлРоль
DonationAlertsSourcesrc/providers/donation-alerts/donation-alerts-source.jsLong-poll цикл, преобразование в сообщения чата/алертов.
DonationAlertsAuthsrc/providers/donation-alerts/donation-alerts-auth.jsOAuth, donation-alerts-auth.json.

Внешние интерфейсы. HTTPS API DonationAlerts (документация сервиса).

HTTP API изделия. /api/auth/donation-alerts/* (config, start, poll, logout, callback).

Рисунок 6.4 — DFD-2: DonationAlerts → ядро

flowchart LR DA[DonationAlerts HTTPS] SRC[donation-alerts-source] A2[ChatAppServer A2] UI[WebSocket клиенты] DA -->|long poll| SRC -->|events| A2 -->|chat.message| UI

6.5. MemeAlerts

Назначение. Приём алертов MemeAlerts в реальном времени по Socket.IO с использованием JWT (obsToken) из «Ссылки для OBS».

КомпонентФайлРоль
MemeAlertsSourcesrc/providers/meme-alerts/meme-alerts-source.jsПодключение к шлюзу MA, события в ядро.
Утилиты токенаsrc/providers/meme-alerts/meme-alerts-token.jsРазбор URL OBS / JWT obsToken, нормализация сохранённой строки.

Внешние интерфейсы. WebSocket MemeAlerts; пользователь вводит URL или JWT в настройках (персистится в app-state).

HTTP API изделия. POST /api/meme-alerts/connect, POST /api/meme-alerts/disconnect — управление сессией из UI.

Рисунок 6.5 — DFD-2: MemeAlerts → ядро

flowchart LR MA[MemeAlerts WS] SRC[meme-alerts-source] A2[ChatAppServer A2] UI[WebSocket клиенты] MA -->|alerts| SRC -->|events| A2 -->|chat.message| UI

6.6. YouTube Live

Назначение. Получение сообщений живого чата трансляции YouTube через YouTube Data API v3 с авторизацией по API key или по OAuth 2.0 (Google).

КомпонентФайлРоль
YouTubeLiveSourcesrc/providers/youtube/youtube-live-source.jsОпрос liveChatMessages, реконнект, дедуп по id.
YouTube OAuthsrc/providers/youtube/youtube-oauth.jsХранение youtube-oauth.json, обмен кодов.

Внешние интерфейсы. HTTPS www.googleapis.com (YouTube Data API).

HTTP API изделия. /api/auth/youtube/google, /api/auth/youtube/logout; настройки канала и ключа — через общие маршруты настроек и state.youtube.

Состояние. state.youtube (канал, ключ API, признаки OAuth).

Рисунок 6.6 — DFD-2: YouTube Live → ядро

flowchart LR YT[YouTube Data API] SRC[youtube-live-source] A2[ChatAppServer A2] UI[WebSocket клиенты] YT -->|liveChat poll| SRC -->|messages| A2 -->|chat.message| UI

6.6a. Rutube

Назначение. Чтение чата эфира Rutube через публичный poll API; отправка сообщений — через cookie-сессию (встроенное окно входа desktop).

КомпонентФайлРоль
RutubeChatSourcesrc/providers/rutube/rutube-chat-source.jsPoll чата эфира, нормализация в единый формат.
Rutube HTTPsrc/providers/rutube/rutube-http.jsHTTP-запросы к публичным API Rutube.
Rutube browser sessionsrc/providers/rutube/rutube-chat-browser-source.jsCookie-сессия для отправки (desktop).

Внешние интерфейсы. HTTPS публичный API Rutube (poll); cookie-сессия страницы эфира для send.

HTTP API изделия. POST /api/settings/rutube; POST /api/auth/rutube/browser, POST /api/auth/rutube/refresh.

Состояние. state.rutube (URL эфира, статус подключения, признак cookie-сессии).

Рисунок 6.6a — DFD-2: Rutube → ядро

flowchart LR RT[Rutube Live API] SRC[rutube-chat-source] A2[ChatAppServer A2] UI[WebSocket клиенты] RT -->|HTTP poll| SRC -->|messages| A2 -->|chat.message| UI

6.7. Смежные сервисы отображения (7TV, каталоги Twitch/VK, прокси)

Назначение. Не являются источниками текста чата, но обеспечивают каталоги эмодзи/бейджей и доставку бинарных ресурсов без CORS в браузере.

НаправлениеПримеры маршрутов изделияПримечание
7TV/api/7tv/catalog, /api/7tv/health, /api/7tv/asset, prefetchКэш на диске, см. 7tv-cache.
Twitch/api/twitch/badges, /api/twitch/emotes, /api/twitch/assetСовместно с чатом Twitch.
VK/api/vk/catalog, /api/vk/assetСовместно с VK Video Live.

Рисунок 6.7 — Вспомогательные HTTP-потоки к CDN/каталогам (логическая связь с A3)

flowchart TB UI[Браузер web-ui] A3[handleHttp A3] CDN[7TV Twitch VK CDN] UI -->|GET каталог asset| A3 -->|proxy cache| CDN

6.8. Сводная схема источников сообщений

На рисунке 6.8 показаны все основные источники, формирующие единый поток chat.message после обработки в A2 (детализация ветвления Twitch — на рисунке 6.1).

Рисунок 6.8 — Сводная DFD-2: платформы чата → ChatAppServer → клиенты

flowchart TB TW[Twitch агрегат см. п. 6.1] VSRC[vk-video-live-source] KSRC[kick-chat-source] DASRC[donation-alerts-source] MASRC[meme-alerts-source] YTSRC[youtube-live-source] RTSRC[rutube-source] MERGE2[ChatAppServer A2 dedup buffer] TW -->|messages events| MERGE2 VSRC -->|WS| MERGE2 KSRC -->|WS| MERGE2 DASRC -->|HTTP poll| MERGE2 MASRC -->|WS| MERGE2 YTSRC -->|API poll| MERGE2 RTSRC -->|HTTP poll| MERGE2 MERGE2 -->|chat.message| OUT2[WebSocket клиенты]

7. Хранилища данных

Таблица 7 — Персистентные и оперативные хранилища

Узел DFDТипичный путьСодержимое
D app-stateCoronerChat-data/app-state.json (рядом с exe или из getCoronerChatDataDirectory)Каналы, настройки UI, флаги платформ, ревизии
D twitch-authtwitch-auth.json и др. в том же каталогеOAuth Twitch, scopes, user id
D vk-authvk-auth.jsonТокены VK Video Live, сессия OAuth/implicit
D kick-authkick-auth.jsonOAuth Kick, refresh
D donation-alerts-authdonation-alerts-auth.jsonТокен DonationAlerts для long-poll
D youtube-oauthyoutube-oauth.jsonOAuth Google для чата YouTube, если используется
D кэши7tv-cache, twitch-badges-cache, …Каталоги эмодзи/бейджей, манифесты
D логиruntime.logДиагностика сервера
D RAMmessageBuffer, messageHistory в процессеОкно последних сообщений для snapshot и поиска

8. Описание процессов (BPMN)

8.1. Сводная таблица потоков OAuth и настройки доступа по платформам

Таблица 8.1 — Соответствие платформ маршрутам handleHttp (фрагмент)

ПлатформаХвост пути после /api/auth/Файл контроллераПерсистенция токена
Twitchtwitch/client-id, start, poll, logouttwitch-auth.jstwitch-auth.json
VK Video Livevk/config, start, poll, logout, browser, callback, implicit-token, start-implicitvk-auth.jsvk-auth.json
Kickkick/config, start, poll, logout, callbackkick-auth.jskick-auth.json
DonationAlertsdonation-alerts/config, start, poll, logout, callbackdonation-alerts-auth.jsdonation-alerts-auth.json
YouTube (Google)youtube/google, youtube/logoutyoutube-oauth.jsyoutube-oauth.json
MemeAlertsOAuth внешнего сервиса не используетсяJWT в настройках приложения (app-state)

8.2. OAuth Twitch — полная цепочка (пример)

Наиболее разветвлённый сценарий UI↔сервер; для остальных платформ сохраняется логика «start → внешний браузер или окно → poll → запись json → broadcast state».

Рисунок 8.2 — BPMN: авторизация Twitch

flowchart TB subgraph U["Дорожка пользователь"] S([Нужен вход Twitch]) O1[Открыть вкладку авторизации UI] O2[POST twitch start] O3[Браузер OAuth окно или redirect] O4[POST twitch poll по таймеру] E([Токен в приложении]) S --> O1 --> O2 --> O3 --> O4 --> E end subgraph SYS["Дорожка система"] H1[handleHttp старт URL] H2[TwitchAuth обмен] H3[Запись файла токена] H4[broadcast state] O2 -.-> H1 H1 --> H2 O4 -.-> H2 H2 --> H3 H3 --> H4 end

8.3. Первое подключение WebSocket клиента

Рисунок 8.3 — BPMN (UML sequence): подключение к /ws

sequenceDiagram participant C as Клиент UI participant W as WS сервер participant S as ChatAppServer C->>W: connect /ws W->>S: connection handler S-->>C: snapshot буфер и состояние loop Живое S-->>C: chat.message state … end

8.4. Установка NSIS (ветвления сценария)

Рисунок 8.4 — BPMN: установщик Windows

flowchart TB A([Старт Setup]) B{Обновление поверх?} C[Uninstall старой с KEEP_APP_DATA] D[Копирование файлов] E{Есть legacy AppData?} F[needs-migration.json подсказка] G[Страница заметок 2.25] H{Запустить?} Z([Конец]) A --> B B -->|да| C --> D B -->|нет| D D --> E E -->|да| F E -->|нет| G F --> G G --> H H -->|да| Z H -->|нет| Z

9. Диаграммы последовательности взаимодействия (UML)

9.1. Twitch — награда баллов канала (EventSub)

Рисунок 9.1 — UML sequence: EventSub redemption → UI

sequenceDiagram participant TW as Twitch EventSub participant CP as TwitchChannelPointsEventSub participant S as ChatAppServer participant W as WS клиенты TW->>CP: notification redemption CP->>S: onRedemption ev S->>S: dedup id handleChannelPointsRedemption S->>W: chat.message channelPointsRedemption

9.2. VK Video Live — сообщение чата

Рисунок 9.2 — UML sequence: упрощённый поток

sequenceDiagram participant VK as VK WS participant SRC as vk-video-live-source participant S as ChatAppServer participant W as WS клиенты VK->>SRC: chat service event SRC->>S: emit normalized message S->>W: chat.message

9.3. Kick — сообщение чата

Рисунок 9.3 — UML sequence: упрощённый поток

sequenceDiagram participant K as Kick WS participant SRC as kick-chat-source participant S as ChatAppServer participant W as WS клиенты K->>SRC: chat payload SRC->>S: emit message S->>W: chat.message

9.4. DonationAlerts — событие long-poll

Рисунок 9.4 — UML sequence: упрощённый поток

sequenceDiagram participant DA as DonationAlerts HTTPS participant SRC as donation-alerts-source participant S as ChatAppServer participant W as WS клиенты DA-->>SRC: poll response SRC->>S: enqueue alert as message S->>W: chat.message

9.5. MemeAlerts — событие WebSocket

Рисунок 9.5 — UML sequence: упрощённый поток

sequenceDiagram participant MA as MemeAlerts WS participant SRC as meme-alerts-source participant S as ChatAppServer participant W as WS клиенты MA->>SRC: alert frame SRC->>S: emit message S->>W: chat.message

9.6. YouTube Live — сообщение чата (опрос API)

Рисунок 9.6 — UML sequence: упрощённый поток

sequenceDiagram participant YT as YouTube Data API participant SRC as youtube-live-source participant S as ChatAppServer participant W as WS клиенты YT-->>SRC: liveChatMessages list SRC->>S: emit new items S->>W: chat.message

10. Компоненты и развёртывание

flowchart TB subgraph Desk["Desktop"] E[Electron main] R[Renderer Chromium] E -->|127.0.0.1| N R -->|HTTP WS| N end subgraph Web["Сервер только web"] I[index.js] I --> N end N[ChatAppServer Node] subgraph Prov["Провайдеры"] T[Twitch] V[VK] K[Kick] D[Donations MemeAlerts] end N --> Prov

На desktop при занятом порту Electron может подключиться к уже запущенному экземпляру сервера (startOrReuseDesktopServer) — два окна, один процесс Node с бэкендом.

11. События по WebSocket (типы type)

Таблица 11 — Перечень типов сообщений WebSocket

typeНазначение
snapshotПервичная выдача при подключении: буфер сообщений и актуальное состояние
stateПолный или частичный снимок state: каналы, транспорты twitch/vk, OAuth, revision UI
chat.messageОдно сообщение чата или системное оформленное событие
chat.moderationУдаление, скрытие, таймаут и др. модерация
chat.annotationДоп. метки к сообщению
chat.clear-localСброс локального отображения
eventBus.appendЦентр событий: заголовок и деталь
obs.telemetryСнимок с OBS WebSocket
now-playingТрек now playing relay
debugОтладочное состояние при включённой диагностике

12. Группы HTTP API (фрагмент, актуально для 2.7.10)

Таблица 12 — Группы маршрутов handleHttp / handleApiRequest

ГруппаПримеры путейРоль
СостояниеGET /api/state, GET /api/qrСнимок для UI, QR
OAuth / сессии/api/auth/twitch/*, vk/*, kick/*, donation-alerts/*, youtube/*, rutube/*Старт, poll, logout, callback, browser login
Донаты MAPOST /api/meme-alerts/connect|disconnectJWT/OBS-ссылка MemeAlerts
Каталоги/api/7tv/*, /api/twitch/badges|emotes|asset, /api/vk/catalog|assetКэш и прокси
НастройкиPOST /api/settings/ui|locale|obs|youtube|kick|rutube|donation-filters|update|…Персистенция, в т.ч. uiLocale
ОбновленияPOST /api/update/check|install|dismiss; GET/POST /api/settings/updateGitHub Latest, Setup, skip-версия
OBS / deck/api/obs/*, /api/deck/*WebSocket OBS; LAN gated токеном
Модерация и шоу/api/moderation/*, poll/prediction/raid/clip/streamHelix и локальные действия

13. Нефункциональные требования

14. Словарь данных (потоки и поля)

14a. Обновления изделия и локализация UI (сводка)

Канал обновлений (2.7.5). Репозиторий GitHub dorimeryt-alt/CoronerChat зашит в приложение. Проверка при запуске: GET /repos/…/releases/latest (релиз Latest), с отсевом legacy-тегов линии 2.25–2.35. API: POST /api/update/check, /api/update/install (скачивание Setup + NSIS), /api/update/dismiss (skip-версия в dismissedUpdateVersions); «напомнить позже» — только на сессию. Каталог CoronerChat-data при обновлении сохраняется.

Локализация (2.7.5). Языки ru, en, ro, de, fi — словари src/server/i18n/locales, персист uiLocale, POST /api/settings/locale. Клиентский applyI18nDom не затирает узлы с вложенными контролами (фикс смены языка в 2.7.5). См. docs/updates-and-releases.md, docs/i18n.md, docs/security.html.

15. Заключение

Документ описывает архитектуру CoronerChat 2.7.10 (IDEF0, DFD, BPMN, UML); п. 1.5 фиксирует реализованный функционал, включая Rutube, UX-пакет, статистику/достижения, i18n и автообновление. Information item: Software Architecture Description (ISO/IEC/IEEE 42010, 15289). Эксплуатация — docs/coronerchat-operation-print.html, docs/guide.html (ISO/IEC 26514). При изменении кода синхронно обновляйте маршруты, имена модулей и диаграммы.

Версия изделия: 2.7.10 (package.json). Печать: A4. Публикация: GitHub Pages docs/.