import { apiClient, tenantParams } from "./client"; import type { JSONObject, ToolBinding, ToolCredential, ToolDefinition, ToolVersion } from "@/types"; export async function listTools() { const { data } = await apiClient.get("/tools", { params: tenantParams() }); return data; } export async function listToolVersions(toolId?: string) { const { data } = await apiClient.get("/tools/versions", { params: tenantParams({ tool_id: toolId }) }); return data; } export async function createToolVersion(payload: { tenant_id: string; tool_id: string; timeout_ms?: number | null; input_schema_json?: JSONObject; output_schema_json?: JSONObject; invoke_config_json?: JSONObject; retry_policy_json?: JSONObject; }) { const { data } = await apiClient.post("/tools/versions", { input_schema_json: {}, output_schema_json: {}, invoke_config_json: {}, retry_policy_json: {}, ...payload, }); return data; } export async function listToolBindings(appId?: string) { const { data } = await apiClient.get("/tools/bindings", { params: tenantParams({ app_id: appId }) }); return data; } export async function createTool(payload: { tenant_id: string; plugin_id?: string | null; code?: string; name: string; tool_type: string; description?: string | null; }) { const { data } = await apiClient.post("/tools", { ...payload, code: payload.code || slugifyName(payload.name, "tool"), }); return data; } export async function listToolCredentials() { const { data } = await apiClient.get("/tools/credentials", { params: tenantParams() }); return data; } export async function createToolCredential(payload: { tenant_id: string; name: string; credential_type: string; secret_json: JSONObject; metadata_json?: JSONObject; }) { const { data } = await apiClient.post("/tools/credentials", payload); return data; } function slugifyName(value: string, fallback: string) { const slug = value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, ""); return slug || `${fallback}_${Date.now().toString(36)}`; }