Files
elmprodvpn/docs/phase-e/E5_SINGBOX_CLIENT_FORM_MATRIX.md

102 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# E5 SingBox Client Form Matrix (UI-first, VLESS baseline)
Дата: 2026-03-09
Статус: active
Владелец: Engineering
## 1) Что берём из твоего примера
- Берём структуру "блоками", как на скрине:
- базовый блок,
- transport,
- security,
- sniffing,
- advanced toggles.
- Не копируем серверные поля биллинга/лимитов/истечения, потому что это не клиентский outbound.
## 2) Что исключаем (server-only)
- `Email`, `Subscription`, `Total used`, `Traffic reset`, `Expire date`, `Fallbacks` (как серверный inbound list), и прочие учёт/статистика-поля.
## 3) Клиентская форма (VLESS + Reality) — целевая MVP
### 3.1 Block A: Profile
| UI field | JSON path | Required | Notes |
|---|---|---|---|
| Profile name | `profile.name` | yes | имя карточки |
| Enabled | `profile.enabled` | yes | локальный toggle |
| Protocol | `outbound.type` | yes | для этого шаблона фикс `vless` |
### 3.2 Block B: Server/Auth
| UI field | JSON path | Required | Notes |
|---|---|---|---|
| Address | `outbound.server` | yes | домен/IP |
| Port | `outbound.server_port` | yes | `1..65535` |
| UUID | `outbound.uuid` | yes | vless user id |
| Flow | `outbound.flow` | no | напр. `xtls-rprx-vision` |
| Packet encoding | `outbound.packet_encoding` | no | default `none` |
### 3.3 Block C: Transport
| UI field | JSON path | Required | Notes |
|---|---|---|---|
| Transport type | `outbound.transport.type` | no | `tcp|ws|grpc|http|httpupgrade|quic` |
| Path | `outbound.transport.path` | depends | для `ws/http/httpupgrade` |
| Host/Headers | `outbound.transport.headers` | no | advanced |
| Service name | `outbound.transport.service_name` | depends | для `grpc` |
### 3.4 Block D: Security
| UI field | JSON path | Required | Notes |
|---|---|---|---|
| Security mode | `outbound.tls.enabled` + `outbound.tls.reality.enabled` | yes | `none|tls|reality` (segmented control) |
| SNI | `outbound.tls.server_name` | depends | для `tls/reality` |
| uTLS fingerprint | `outbound.tls.utls.fingerprint` | no | `chrome|firefox|safari|...` |
| Reality public key | `outbound.tls.reality.public_key` | depends | must для reality |
| Reality short id | `outbound.tls.reality.short_id` | no | обычно короткий hex |
| Insecure | `outbound.tls.insecure` | no | advanced toggle |
### 3.5 Block E: Sniffing/Local inbound (опционально)
| UI field | JSON path | Required | Notes |
|---|---|---|---|
| Sniffing enabled | `inbounds[*].sniff` | no | если используем локальный socks inbound в generated config |
| Sniff override destination | `inbounds[*].sniff_override_destination` | no | advanced |
### 3.6 Block F: Advanced Dial
| UI field | JSON path | Required | Notes |
|---|---|---|---|
| Network | `outbound.network` | no | `tcp|udp` |
| Connect timeout | `outbound.connect_timeout` | no | duration |
| Bind interface | `outbound.bind_interface` | no | advanced |
| Routing mark | `outbound.routing_mark` | no | advanced |
| Multiplex | `outbound.multiplex` | no | advanced group |
| UDP over TCP | `outbound.udp_over_tcp` | no | advanced group |
## 4) Guardrails (обязательные)
- `CV-001`: при `security=reality` автоматически `tls.enabled=true`, `tls.reality.enabled=true`.
- `CV-002`: при `security=reality` поле `reality.public_key` обязательно.
- `CV-003`: при `transport=grpc` поле `service_name` обязательно.
- `CV-004`: при `transport=ws|http|httpupgrade` поле `path` обязательно.
- `CV-005`: `address/port/uuid` обязательны всегда.
## 5) UI-компоновка (desktop)
- Compact panel:
- `Profile`,
- `Server/Auth`,
- `Transport`,
- `Security`,
- collapsed `Advanced`.
- Actions:
- `Preview render`,
- `Validate profile`,
- `Apply profile`,
- `History`,
- `Rollback profile`.
## 6) Расширение на другие протоколы
- Сохраняем те же блоки UI, меняются только поля блока `Server/Auth` + часть `Security/Transport`.
- То есть форма будет модульной, а не отдельное "окно под каждый протокол".