feat: implement ui v1
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import { getJson, getText, postJson, postText } from "../../shared/api/client";
|
||||
import type {
|
||||
AuthProfile,
|
||||
DraftGenerationResult,
|
||||
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");
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
export type Protocol = "rest" | "graphql" | "grpc";
|
||||
export type OperationStatus = "draft" | "testing" | "published" | "archived";
|
||||
|
||||
export type OperationSummary = {
|
||||
id: string;
|
||||
name: string;
|
||||
display_name: string;
|
||||
protocol: Protocol;
|
||||
status: OperationStatus;
|
||||
current_draft_version: number;
|
||||
latest_published_version: number | null;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
published_at: string | null;
|
||||
};
|
||||
|
||||
export type OperationRecord = {
|
||||
operation_id: string;
|
||||
version: number;
|
||||
status: OperationStatus;
|
||||
change_note: string | null;
|
||||
created_at: string;
|
||||
created_by: string | null;
|
||||
snapshot: OperationSnapshot;
|
||||
};
|
||||
|
||||
export type OperationSnapshot = {
|
||||
id: string;
|
||||
name: string;
|
||||
display_name: string;
|
||||
protocol: Protocol;
|
||||
status: OperationStatus;
|
||||
version: number;
|
||||
target: {
|
||||
kind: "rest" | "graphql" | "grpc";
|
||||
base_url?: string;
|
||||
method?: string;
|
||||
path_template?: string;
|
||||
static_headers?: Record<string, string>;
|
||||
};
|
||||
input_schema: unknown;
|
||||
output_schema: unknown;
|
||||
input_mapping: unknown;
|
||||
output_mapping: unknown;
|
||||
execution_config: unknown;
|
||||
tool_description: {
|
||||
title: string;
|
||||
description: string;
|
||||
tags: string[];
|
||||
examples: Array<{ input: unknown }>;
|
||||
};
|
||||
};
|
||||
|
||||
export type DraftGenerationResult = {
|
||||
generated_draft: {
|
||||
status: string;
|
||||
source_types: string[];
|
||||
generated_at: string | null;
|
||||
input_schema_generated: boolean;
|
||||
output_schema_generated: boolean;
|
||||
input_mapping_generated: boolean;
|
||||
output_mapping_generated: boolean;
|
||||
warnings: string[];
|
||||
};
|
||||
input_schema: unknown;
|
||||
output_schema: unknown;
|
||||
input_mapping: unknown;
|
||||
output_mapping: unknown;
|
||||
};
|
||||
|
||||
export type TestRunResult = {
|
||||
ok: boolean;
|
||||
request_preview: unknown;
|
||||
response_preview: unknown;
|
||||
errors: Array<{ code: string; message: string }>;
|
||||
};
|
||||
|
||||
export type AuthProfile = {
|
||||
id: string;
|
||||
name: string;
|
||||
kind: string;
|
||||
config: unknown;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
};
|
||||
Reference in New Issue
Block a user