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 d8fc5c7f7d - Show all commits
+308
View File
@@ -690,4 +690,312 @@ export interface components {
pathItems: never; pathItems: never;
} }
export type $defs = Record<string, never>; export type $defs = Record<string, never>;
export interface operations {
getHealth: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Процесс жив */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HealthResponse"];
};
};
500: components["responses"]["InternalError"];
};
};
getReady: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Состояние готовности (в том числе при ready=false) */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ReadyResponse"];
};
};
500: components["responses"]["InternalError"];
503: components["responses"]["AgentUnavailable"];
};
};
getPrometheusMetrics: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Текстовый экспорт метрик */
200: {
headers: {
[name: string]: unknown;
};
content: {
"text/plain": string;
};
};
};
};
getStatus: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Статус */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["StatusResponse"];
};
};
401: components["responses"]["Unauthorized"];
500: components["responses"]["InternalError"];
503: components["responses"]["AgentUnavailable"];
};
};
getConfig: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Конфигурация; секретные поля отсутствуют */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ConfigResponse"];
};
};
401: components["responses"]["Unauthorized"];
500: components["responses"]["InternalError"];
};
};
putConfig: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["ConfigUpdateRequest"];
};
};
responses: {
/** @description Конфигурация применена */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ConfigResponse"];
};
};
400: components["responses"]["BadRequest"];
401: components["responses"]["Unauthorized"];
409: components["responses"]["Conflict"];
422: components["responses"]["ValidationFailed"];
500: components["responses"]["InternalError"];
};
};
validateConfig: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["ConfigUpdateRequest"];
};
};
responses: {
/** @description Результат валидации (в том числе при valid=false) */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ValidateResponse"];
};
};
401: components["responses"]["Unauthorized"];
422: components["responses"]["ValidationFailed"];
500: components["responses"]["InternalError"];
};
};
listRoutingRules: {
parameters: {
query?: {
/** @description Фильтр по признаку включённости */
enabled?: boolean;
kind?: components["schemas"]["RuleKind"];
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Список правил */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["RoutingRuleList"];
};
};
401: components["responses"]["Unauthorized"];
500: components["responses"]["InternalError"];
};
};
createRoutingRule: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["RoutingRuleCreate"];
};
};
responses: {
/** @description Правило создано */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["RoutingRule"];
};
};
400: components["responses"]["BadRequest"];
401: components["responses"]["Unauthorized"];
409: components["responses"]["Conflict"];
422: components["responses"]["ValidationFailed"];
500: components["responses"]["InternalError"];
};
};
getRoutingRule: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Идентификатор правила */
rule_id: components["parameters"]["RuleId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Правило */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["RoutingRule"];
};
};
401: components["responses"]["Unauthorized"];
404: components["responses"]["NotFound"];
500: components["responses"]["InternalError"];
};
};
updateRoutingRule: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Идентификатор правила */
rule_id: components["parameters"]["RuleId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["RoutingRuleUpdate"];
};
};
responses: {
/** @description Обновлённое правило */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["RoutingRule"];
};
};
400: components["responses"]["BadRequest"];
401: components["responses"]["Unauthorized"];
404: components["responses"]["NotFound"];
422: components["responses"]["ValidationFailed"];
500: components["responses"]["InternalError"];
};
};
deleteRoutingRule: {
parameters: {
query?: never;
header?: never;
path: {
/** @description Идентификатор правила */
rule_id: components["parameters"]["RuleId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Правило удалено */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
401: components["responses"]["Unauthorized"];
404: components["responses"]["NotFound"];
500: components["responses"]["InternalError"];
};
};
putRoutingMode: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
// __CHUNK__ // __CHUNK__