102 lines
4.4 KiB
Markdown
102 lines
4.4 KiB
Markdown
# 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`.
|
||
- То есть форма будет модульной, а не отдельное "окно под каждый протокол".
|
||
|