Files
idea.llm.gitea.repo.docker.…/app/renderer/src/hooks/use-coolify.js
Clint Masden 93d40455d9 Add Coolify REST API server with Scalar docs and UI integration
Express API server on :3100 exposing all Coolify operations:
- CRUD for apps, env vars, servers
- Full upsert pipeline (create/update + env + route + deploy)
- Drift detection, Traefik route management via SSH
- Scalar API docs at /reference, OpenAPI 3.1 spec

UI: New Coolify page with app cards, deploy/delete actions,
env var expansion. Sidebar nav + React Query hooks + fetch client.

Both UI and LLM/CLI use the same HTTP endpoints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 11:02:17 -06:00

55 lines
1.5 KiB
JavaScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { coolifyApi } from '@/lib/api';
import { queryKeys } from '@/lib/query-keys';
export function useCoolifyApps() {
return useQuery({
queryKey: queryKeys.coolify.apps,
queryFn: () => coolifyApi.listApps(),
staleTime: 30_000,
});
}
export function useCoolifyServers() {
return useQuery({
queryKey: queryKeys.coolify.servers,
queryFn: () => coolifyApi.listServers(),
staleTime: 60_000,
});
}
export function useCoolifyNextPort() {
return useQuery({
queryKey: queryKeys.coolify.nextPort,
queryFn: () => coolifyApi.getNextPort(),
staleTime: 30_000,
});
}
export function useCoolifyDeploy() {
const qc = useQueryClient();
return useMutation({
mutationFn: (uuid) => coolifyApi.deploy(uuid),
onSuccess: () => qc.invalidateQueries({ queryKey: queryKeys.coolify.apps }),
});
}
export function useCoolifyUpsert() {
const qc = useQueryClient();
return useMutation({
mutationFn: ({ projectPath, appName }) => coolifyApi.upsert(projectPath, appName),
onSuccess: () => {
qc.invalidateQueries({ queryKey: queryKeys.coolify.apps });
qc.invalidateQueries({ queryKey: queryKeys.coolify.nextPort });
},
});
}
export function useCoolifyDelete() {
const qc = useQueryClient();
return useMutation({
mutationFn: (uuid) => coolifyApi.deleteApp(uuid),
onSuccess: () => qc.invalidateQueries({ queryKey: queryKeys.coolify.apps }),
});
}