chore(ui): скрипт генерации TS-клиента из OpenAPI (Refs #19)
- ui/scripts/generate-api.sh: openapi-typescript@7 над docs/openapi.yaml. - ui/src/api/generated/README.md: правила перегенерации и семантика writeOnly-секретов.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# ui/src/api/generated — сгенерированный API-клиент
|
||||
|
||||
**Файлы в этой папке не редактируются руками.**
|
||||
|
||||
| Файл | Источник |
|
||||
|---|---|
|
||||
| `schema.d.ts` | `docs/openapi.yaml` (контракт API v1, issue #19) через `openapi-typescript@7` |
|
||||
|
||||
## Перегенерация
|
||||
|
||||
```bash
|
||||
bash ui/scripts/generate-api.sh
|
||||
```
|
||||
|
||||
Требуется Node.js >= 20. CI-джоба `ts-client-is-current` повторяет генерацию и падает,
|
||||
если закоммиченный файл расходится со спецификацией.
|
||||
|
||||
## Секреты
|
||||
|
||||
Поля `private_key` (TunnelConfig), `preshared_key` (PeerConfig) и `password`
|
||||
(AuthLoginRequest) помечены в контракте `writeOnly`:
|
||||
|
||||
* их **можно** передавать в запросах (`PUT /api/v1/config`, `POST /api/v1/auth/login`);
|
||||
* их **нельзя** ожидать в ответах — сервер обязан их вырезать (см. контрактный тест
|
||||
`backend/tests/test_contract_responses.py::test_responses_contain_no_secret_material`).
|
||||
|
||||
Поэтому UI читает секреты только из полей ввода и никогда не рендерит их из ответов API.
|
||||
Reference in New Issue
Block a user