985ca538e3
- Create types/ directory with canonical domain type definitions - session.ts, tool-instance.ts, tool-type.ts, git-repository.ts - config-folder.ts, tool-config.ts, project.ts, user.ts, api-response.ts - Move inline types from api modules to types/ with backward-compatible re-exports - Update all consumers (pages, components, state) to import from types/ - Extract seed_builtin_tool_types from main.py to seeds/builtin_tool_types.py - Ensure Session, ToolInstance, ToolType, GitRepository defined exactly once Quality gates: tsc (pass), eslint (pass), Python syntax (pass) Refs: repo-restructure Task 1.1
103 lines
2.7 KiB
TypeScript
103 lines
2.7 KiB
TypeScript
import { apiClient } from "./client";
|
|
import type { Session } from "../types/session";
|
|
import type { ToolInstance } from "../types/tool-instance";
|
|
|
|
export type { Session } from "../types/session";
|
|
export type { ToolInstance } from "../types/tool-instance";
|
|
|
|
export async function listInstances(
|
|
projectId: string,
|
|
repoId: string,
|
|
): Promise<ToolInstance[]> {
|
|
const response = await apiClient.get(
|
|
`/projects/${projectId}/repositories/${repoId}/instances`,
|
|
);
|
|
return response.data.instances;
|
|
}
|
|
|
|
export async function createInstance(
|
|
projectId: string,
|
|
repoId: string,
|
|
toolTypeId: string,
|
|
displayName?: string,
|
|
): Promise<ToolInstance> {
|
|
const response = await apiClient.post(
|
|
`/projects/${projectId}/repositories/${repoId}/instances`,
|
|
{
|
|
tool_type_id: toolTypeId,
|
|
display_name: displayName,
|
|
},
|
|
);
|
|
return response.data;
|
|
}
|
|
|
|
export async function startInstance(
|
|
projectId: string,
|
|
repoId: string,
|
|
instanceId: string,
|
|
): Promise<{ status: string; url?: string }> {
|
|
const response = await apiClient.post(
|
|
`/projects/${projectId}/repositories/${repoId}/instances/${instanceId}/start`,
|
|
);
|
|
return response.data;
|
|
}
|
|
|
|
export async function stopInstance(
|
|
projectId: string,
|
|
repoId: string,
|
|
instanceId: string,
|
|
): Promise<{ status: string }> {
|
|
const response = await apiClient.post(
|
|
`/projects/${projectId}/repositories/${repoId}/instances/${instanceId}/stop`,
|
|
);
|
|
return response.data;
|
|
}
|
|
|
|
export async function restartInstance(
|
|
projectId: string,
|
|
repoId: string,
|
|
instanceId: string,
|
|
): Promise<{ status: string; url?: string }> {
|
|
const response = await apiClient.post(
|
|
`/projects/${projectId}/repositories/${repoId}/instances/${instanceId}/restart`,
|
|
);
|
|
return response.data;
|
|
}
|
|
|
|
export async function deleteInstance(
|
|
projectId: string,
|
|
repoId: string,
|
|
instanceId: string,
|
|
): Promise<void> {
|
|
await apiClient.delete(
|
|
`/projects/${projectId}/repositories/${repoId}/instances/${instanceId}`,
|
|
);
|
|
}
|
|
|
|
export async function getUserSessions(): Promise<Session[]> {
|
|
const response = await apiClient.get("/users/me/sessions");
|
|
return response.data.sessions;
|
|
}
|
|
|
|
export async function checkInstanceHealth(
|
|
projectId: string,
|
|
repoId: string,
|
|
instanceId: string,
|
|
): Promise<{ healthy: boolean; status_code: number | null; error?: string }> {
|
|
const response = await apiClient.get(
|
|
`/projects/${projectId}/repositories/${repoId}/instances/${instanceId}/health`,
|
|
);
|
|
return response.data;
|
|
}
|
|
|
|
export async function recreateInstanceTunnel(
|
|
projectId: string,
|
|
repoId: string,
|
|
instanceId: string,
|
|
): Promise<{ status: string; url?: string }> {
|
|
const response = await apiClient.post(
|
|
`/projects/${projectId}/repositories/${repoId}/instances/${instanceId}/recreate-tunnel`,
|
|
);
|
|
return response.data;
|
|
}
|