tools.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { apiClient, tenantParams } from "./client";
  2. import type { JSONObject, ToolBinding, ToolCredential, ToolDefinition, ToolVersion } from "@/types";
  3. export async function listTools() {
  4. const { data } = await apiClient.get<ToolDefinition[]>("/tools", { params: tenantParams() });
  5. return data;
  6. }
  7. export async function listToolVersions(toolId?: string) {
  8. const { data } = await apiClient.get<ToolVersion[]>("/tools/versions", { params: tenantParams({ tool_id: toolId }) });
  9. return data;
  10. }
  11. export async function createToolVersion(payload: {
  12. tenant_id: string;
  13. tool_id: string;
  14. timeout_ms?: number | null;
  15. input_schema_json?: JSONObject;
  16. output_schema_json?: JSONObject;
  17. invoke_config_json?: JSONObject;
  18. retry_policy_json?: JSONObject;
  19. }) {
  20. const { data } = await apiClient.post<ToolVersion>("/tools/versions", {
  21. input_schema_json: {},
  22. output_schema_json: {},
  23. invoke_config_json: {},
  24. retry_policy_json: {},
  25. ...payload,
  26. });
  27. return data;
  28. }
  29. export async function listToolBindings(appId?: string) {
  30. const { data } = await apiClient.get<ToolBinding[]>("/tools/bindings", { params: tenantParams({ app_id: appId }) });
  31. return data;
  32. }
  33. export async function createTool(payload: {
  34. tenant_id: string;
  35. plugin_id?: string | null;
  36. code?: string;
  37. name: string;
  38. tool_type: string;
  39. description?: string | null;
  40. }) {
  41. const { data } = await apiClient.post<ToolDefinition>("/tools", {
  42. ...payload,
  43. code: payload.code || slugifyName(payload.name, "tool"),
  44. });
  45. return data;
  46. }
  47. export async function listToolCredentials() {
  48. const { data } = await apiClient.get<ToolCredential[]>("/tools/credentials", { params: tenantParams() });
  49. return data;
  50. }
  51. export async function createToolCredential(payload: {
  52. tenant_id: string;
  53. name: string;
  54. credential_type: string;
  55. secret_json: JSONObject;
  56. metadata_json?: JSONObject;
  57. }) {
  58. const { data } = await apiClient.post<ToolCredential>("/tools/credentials", payload);
  59. return data;
  60. }
  61. function slugifyName(value: string, fallback: string) {
  62. const slug = value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
  63. return slug || `${fallback}_${Date.now().toString(36)}`;
  64. }