Sprint 0 / #19: OpenAPI 3.1 контракт API v1 + TS-клиент и контрактные тесты #57

Merged
embeddevio merged 16 commits from feat/19-openapi into main 2026-10-28 21:21:14 +03:00
Showing only changes of commit 8691a3dec1 - Show all commits
+311
View File
@@ -0,0 +1,311 @@
/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
export interface paths {
"/api/v1/health": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Liveness-проба */
get: operations["getHealth"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/ready": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Readiness-проба (готовность агента и зависимостей) */
get: operations["getReady"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/metrics": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Метрики в формате Prometheus text exposition */
get: operations["getPrometheusMetrics"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/status": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Сводный статус шлюза, туннеля и GeoIP */
get: operations["getStatus"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/config": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Текущая конфигурация (без секретов) */
get: operations["getConfig"];
/** Атомарное применение конфигурации (validate → staging → apply → rollback) */
put: operations["putConfig"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/config/validate": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Сухая валидация конфигурации без применения */
post: operations["validateConfig"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/routing/rules": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Список правил маршрутизации */
get: operations["listRoutingRules"];
put?: never;
/** Создать правило маршрутизации */
post: operations["createRoutingRule"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/routing/rules/{rule_id}": {
parameters: {
query?: never;
header?: never;
path: {
/** @description Идентификатор правила */
rule_id: components["parameters"]["RuleId"];
};
cookie?: never;
};
/** Правило по идентификатору */
get: operations["getRoutingRule"];
/** Изменить правило */
put: operations["updateRoutingRule"];
post?: never;
/** Удалить правило */
delete: operations["deleteRoutingRule"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/routing/mode": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
/** Переключить режим split-tunnel */
put: operations["putRoutingMode"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/routing/geoip/update": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Обновить снапшот GeoIP (RIPE Stat → локальный кэш) */
post: operations["updateGeoIp"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/routing/import": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Импорт .conf / JSON (пиры и правила) */
post: operations["importRoutingConfig"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/metrics/stream": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* WebSocket-поток метрик и статуса
* @description WebSocket-апгрейд на том же пути. Клиент передаёт токен либо заголовком
* `Authorization: Bearer *** либо query-параметром `token`.
* Сервер отправляет текстовые JSON-кадры схемы `WsFrame`; при `type=metrics`
* поле `data` соответствует `MetricsSample`, при `type=status` — `StatusResponse`,
* при `type=error` — `Error`.
*/
get: operations["streamMetrics"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/devices": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Устройства за шлюзом */
get: operations["listDevices"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/logs": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Журнал событий */
get: operations["listLogs"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/auth/login": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Аутентификация (сессия UI + токен API) */
post: operations["login"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/auth/logout": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Завершить сессию */
post: operations["logout"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/auth/session": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Текущая сессия и CSRF-токен */
get: operations["getAuthSession"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
// __CHUNK__