feat: Add presence heartbeat for Matrix online status

- matrix-gateway: POST /internal/matrix/presence/online endpoint
- usePresenceHeartbeat hook with activity tracking
- Auto away after 5 min inactivity
- Offline on page close/visibility change
- Integrated in MatrixChatRoom component
This commit is contained in:
Apple
2025-11-27 00:19:40 -08:00
parent 5bed515852
commit 3de3c8cb36
6371 changed files with 1317450 additions and 932 deletions

View File

@@ -0,0 +1,299 @@
# TASK_PHASE_MATRIX_PREPARE.md
DAARION — PHASE 4: MATRIX PREPARE (Без деплою)
Цей таск **підготовчий**:
ми створюємо **повну структуру й конфіги для Matrix + Element Web + TURN**,
але **нічого не деплоїмо і не запускаємо**.
---
## 0. Жорсткі обмеження (дуже важливо)
Cursor **НЕ МАЄ ПРАВА** в цій фазі:
- запускати Synapse, Element, TURN
- змінювати існуючі docker-compose файли
- додавати Matrix у прод-інфру
- змінювати gateway, порти, SSL
Це **тільки підготовка файлів** для майбутньої **PHASE MATRIX FULL**.
---
## 1. Структура каталогів
Створити:
```text
infra/
matrix/
synapse/
homeserver.yaml
workers.yaml
log.config
postgres/
init.sql
turn/
turnserver.conf
element-web/
config.json
gateway/
matrix.conf
schemas/
events/
matrix_event.schema.json
README_MATRIX.md
```
---
## 2. Synapse — шаблони конфігів
### 2.1 `synapse/homeserver.yaml`
Шаблон (без реальних ключів і паролів):
* `server_name: "matrix.daarion.space"` (placeholder)
* `public_baseurl: "https://matrix.daarion.space/"` (placeholder)
* `database:` → Postgres (без реальних паролів)
* `listeners:`:
* порт 8008 (http)
* `registration:`:
* `enable_registration: false`
* `registration_shared_secret: "<TO_BE_FILLED>"` (placeholder comment)
* `media_store_path: "/data/media"` (placeholder)
* `federation_domain_whitelist` (коментар, не обов'язково)
* `modules:`:
* залишити секцію порожньою або з коментарями для майбутніх MSC
* `log_config: /config/log.config`
**Важливо:** у файлі мають бути **коментарі**, що це шаблон і реальні значення будуть заповнені в PHASE MATRIX FULL.
### 2.2 `synapse/workers.yaml`
Шаблон worker-конфіга:
```yaml
worker_app: generic_worker
worker_name: worker1
worker_listeners:
- type: http
port: 9101
resources:
- names: [client, federation]
compress: false
worker_daemonize: false
worker_log_config: /config/log.config
worker_replication_host: synapse
worker_replication_port: 9093
worker_replication_http_port: 9093
```
* коментарі, як це буде використовуватись у майбутньому.
### 2.3 `synapse/log.config`
Мінімальний logging конфіг (YAML), з рівнем `INFO` та коментарями.
---
## 3. Postgres schema init
`postgres/init.sql` — SQL-шаблон:
* створити БД `synapse`
* створити роль `synapse` з паролем `'CHANGE_ME'` (коментар, що змінити)
* дати права на БД
```sql
create database synapse;
create user synapse with encrypted password 'CHANGE_ME';
grant all privileges on database synapse to synapse;
```
Коментар: у PHASE MATRIX FULL буде або використовуватись офіційний мигратор Synapse, або helm/compose, а це — лише стартова заготівка.
---
## 4. TURN/STUN конфіг
`turn/turnserver.conf` — шаблон для coturn:
* `listening-port=3478`
* `fingerprint`
* `lt-cred-mech`
* `realm=daarion.space`
* `user=matrix:CHANGE_ME`
* `total-quota=100`
* `bps-capacity=0`
З великими коментарями:
* про використання real secrets
* про те, що TLS/DTLS налаштовуватиметься в PHASE MATRIX FULL
---
## 5. Element Web конфіг
`element-web/config.json` — базовий шаблон:
```json
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://matrix.daarion.space",
"server_name": "daarion.space"
}
},
"brand": "DAARION Matrix",
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"bug_report_endpoint_url": null,
"features": {},
"show_labs_settings": true,
"defaultCountryCode": "UA",
"disable_custom_urls": true,
"disable_3pid_login": true
}
```
З коментарями (у README):
* як і де це буде використовуватись
* що сторінка `/element/` буде віддавати цей SPA
---
## 6. Gateway конфіг (Nginx) — шаблон
`gateway/matrix.conf`:
```nginx
# Шаблон. Не підключати до прод nginx поки що.
server {
listen 80;
server_name matrix.daarion.space;
location /_matrix/ {
proxy_pass http://matrix-homeserver:8008;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /element/ {
root /var/www/element;
try_files $uri /index.html;
}
}
```
Коментар великими літерами:
**"ЦЕ ШАБЛОН. НЕ АКТИВУВАТИ, ПОКИ НЕ БУДЕ PHASE MATRIX FULL."**
---
## 7. Schemas — майбутній Bridge
`schemas/events/matrix_event.schema.json`:
JSON Schema для подій, які:
* Matrix → DAARION (через майбутній bridge)
* DAARION → Matrix
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Matrix Event (Bridge)",
"type": "object",
"properties": {
"event_id": { "type": "string" },
"room_id": { "type": "string" },
"sender": { "type": "string" },
"type": { "type": "string" },
"origin_server_ts": { "type": "integer" },
"content": { "type": "object" }
},
"required": ["event_id", "room_id", "sender", "type", "content"]
}
```
---
## 8. README_MATRIX.md
Документ повинен описати:
### 8.1. Ролі
* Synapse — Matrix homeserver
* Element Web — клієнт
* TURN — медіа (voice/video, на майбутнє)
* Gateway — HTTP reverse proxy
* Bridge (майбутній) — DAARION City / Agents ↔ Matrix
### 8.2. Фази
Описати **5 фаз**:
1. **Phase 4 — Prepare (цей таск)**
* файли, структури, без деплою.
2. **Phase 5 — Base Synapse Deploy**
* розгортання Synapse + Postgres + TLS.
3. **Phase 6 — Element Web + Gateway**
* деплой статичного SPA, `/element/` route, `/_matrix/`.
4. **Phase 7 — Federation + Multi-node**
* кілька нод DAARION Matrix, federation keys, SRV-записи.
5. **Phase 8 — DAARION Bridge**
* агентний міст: public rooms ↔ Matrix rooms, presence, events.
### 8.3. Безпека
* зберігання ключів
* обмеження доступу
* E2EE keys (відповідальність клієнта)
* логування та privacy
---
## 9. Acceptance Criteria
1. Директорія `infra/matrix/` існує з усіма піддиректоріями й файлами.
2. Усі конфіги (`homeserver.yaml`, `workers.yaml`, `log.config`, `config.json`, `turnserver.conf`, `matrix.conf`) — є, містять валідний YAML/JSON/NGINX-синтаксис.
3. `postgres/init.sql` — є, описує базову схему БД (без реальних паролів).
4. `schemas/events/matrix_event.schema.json` — валідний JSON Schema.
5. `README_MATRIX.md` — повністю описує архітектуру, фази, безпеку та майбутні кроки.
6. **ЖОДНОГО** нового сервісу не додано в docker-compose.
7. **ЖОДЕН** Matrix-сервіс не запускається в цій фазі.
---
## 10. Команда для Cursor
**"Підготувати структуру та конфіги для Matrix згідно TASK_PHASE_MATRIX_PREPARE.md.
НЕ змінювати існуючі docker-compose, НЕ запускати Synapse/Element/Turn,
тільки створити файли та README."**