Files
crank/apps/ui/src/entities/operation/api.ts
T
2026-03-25 21:52:53 +03:00

129 lines
3.3 KiB
TypeScript

import {
getJson,
getText,
postBytes,
postJson,
postText,
} from "../../shared/api/client";
import type {
AuthProfile,
DraftGenerationResult,
GrpcServiceSummary,
OperationRecord,
OperationSummary,
TestRunResult,
} from "./types";
export function listOperations() {
return getJson<{ items: OperationSummary[] }>("/api/admin/operations");
}
export function getOperation(operationId: string) {
return getJson<OperationSummary>(`/api/admin/operations/${operationId}`);
}
export function getOperationVersion(operationId: string, version: number) {
return getJson<OperationRecord>(
`/api/admin/operations/${operationId}/versions/${version}`,
);
}
export function createOperation(payload: unknown) {
return postJson<{
operation_id: string;
version: number;
status: string;
}>("/api/admin/operations", payload);
}
export function publishOperation(operationId: string, version: number) {
return postJson<{ published_version: number; published_at: string }>(
`/api/admin/operations/${operationId}/publish`,
{ version },
);
}
export function runOperationTest(
operationId: string,
version: number,
input: unknown,
) {
return postJson<TestRunResult>(`/api/admin/operations/${operationId}/test-runs`, {
version,
input,
});
}
export function uploadInputJsonSample(operationId: string, payload: unknown) {
return postJson(`/api/admin/operations/${operationId}/samples/input-json`, payload);
}
export function uploadOutputJsonSample(operationId: string, payload: unknown) {
return postJson(
`/api/admin/operations/${operationId}/samples/output-json`,
payload,
);
}
export function generateDraft(operationId: string) {
return postJson<DraftGenerationResult>(
`/api/admin/operations/${operationId}/drafts/generate`,
{
sources: ["input_json_sample", "output_json_sample"],
},
);
}
export function exportOperationYaml(operationId: string, version?: number) {
const query = version === undefined ? "" : `?version=${version}`;
return getText(`/api/admin/operations/${operationId}/export${query}`);
}
export function importOperationYaml(yamlText: string, mode: "create" | "upsert") {
return postText<{ operation_id: string; version: number; import_mode: string }>(
`/api/admin/operations/import?mode=${mode}`,
yamlText,
);
}
export function listAuthProfiles() {
return getJson<{ items: AuthProfile[] }>("/api/admin/auth-profiles");
}
export function uploadProtoDescriptor(
operationId: string,
fileName: string,
bytes: ArrayBuffer,
) {
return postBytes<{ descriptor_id: string; version: number }>(
`/api/admin/operations/${operationId}/descriptors/proto`,
bytes,
{
"Content-Type": "application/octet-stream",
"x-file-name": fileName,
},
);
}
export function uploadDescriptorSet(
operationId: string,
fileName: string,
bytes: ArrayBuffer,
) {
return postBytes<{ descriptor_id: string; version: number }>(
`/api/admin/operations/${operationId}/descriptors/descriptor-set`,
bytes,
{
"Content-Type": "application/octet-stream",
"x-file-name": fileName,
},
);
}
export function listGrpcServices(operationId: string, version?: number) {
const query = version === undefined ? "" : `?version=${version}`;
return getJson<{ services: GrpcServiceSummary[] }>(
`/api/admin/operations/${operationId}/grpc/services${query}`,
);
}