# Chat JavaScript modules Серверные Django-шаблоны чатов используют одно пользовательское WebSocket- соединение. Его создаёт `userWebSocket.js`; остальные модули только подписываются на события или вызывают его публичные методы. ## Realtime lifecycle - endpoint: `/ws/`; - инициализация: `templates/base.html`; - chat wiring: `templates/includes/chat_scripts.html`; - list wiring: `templates/includes/chat_list_scripts.html`; - connection owner: `userWebSocket.js`; - список чатов: `chatListRealtime.js`, собственного socket не создаёт. После готовности соединения публикуется browser event `user:ws-ready`. Chat wiring сохраняет API в `window.chatWebSocketApi` для legacy-модулей и публикует `chat:system-ready`. Для входа в чат используется команда `open_chat`; серверные обновления приходят как `new_message`, `list_update`, `message_edited`, `message_deleted`, reaction, typing и poll events. Не возвращайте старые endpoint-ы `/ws/chat/{id}/` и `/ws/chats/` и не создавайте socket внутри отдельных компонентов. Текущий protocol, authentication и полный список событий описаны в [`docs/guides/WEBSOCKET.md`](../../../../docs/guides/WEBSOCKET.md). ## Группы компонентов - `chatComposer.js`, `chatFormManager.js`, `chatFileUpload.js` — ввод и отправка; - `chatMessageTemplates.js`, `messageEditing.js`, `messageReactions.js`, `messageSelection.js` — отображение и действия над сообщениями; - `chatBadgeManager.js`, `chatBadgeHandler.js`, `chatMarkRead.js` — unread state; - `chatListFilter.js`, `chatListRealtime.js`, `chatMenuActions.js` — список чатов; - `chatPoll.js` — опросы; - `chatAvatarMap.js` — данные аватаров. Новые компоненты должны принимать зависимости через options, безопасно завершать работу при отсутствии целевой разметки и не дублировать REST/WebSocket transport.