feat: initial commit for backup

This commit is contained in:
fullsizemalt 2025-12-27 12:13:08 -08:00
commit 2fbed24b33

82
client/src/api.ts Normal file
View file

@ -0,0 +1,82 @@
import axios from 'axios';
// Use environment variable for API URL if available (for Web), otherwise fallback (for Desktop dev)
// The backend is now at kites.runfoo.run (Next.js app)
const API_URL = import.meta.env.VITE_API_URL || 'https://kites.runfoo.run/api/v1';
// Hardcoded API Key for MVP Desktop Client
const API_KEY = 'kites-desktop-secret-key';
export interface Item {
id: string;
content: string;
title?: string;
syntax?: string;
tags?: string[];
createdAt: string;
sessionId?: string;
visibility: string;
}
export interface Session {
id: string;
title: string;
agentName?: string;
createdAt: string;
items?: Item[];
_count?: {
items: number;
};
}
const client = axios.create({
baseURL: API_URL,
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
}
});
export const api = {
health: async () => {
// Next.js app doesn't have explicit health endpoint at /api/health usually,
// but we can check root or just assume it works if pastes load.
return client.get('/pastes?limit=1');
},
getItems: async (search?: string) => {
const params = search ? { q: search } : {};
// Kites API uses /pastes
return client.get<Item[]>('/pastes', { params });
},
createItem: async (content: string, tags: string[] = [], sessionId?: string) => {
return client.post<Item>('/pastes', {
content,
tags,
sessionId,
visibility: 'private', // Default to private for desktop sync
title: content.substring(0, 50) + (content.length > 50 ? '...' : ''),
contentType: 'text/plain'
});
},
getSessions: async () => {
return client.get<Session[]>('/sessions');
},
createSession: async (title: string, agentName?: string) => {
return client.post<Session>('/sessions', {
title,
agentName
});
},
getSession: async (id: string) => {
// Next.js Kites API structure for getting session might differ,
// but assuming standard REST based on my route.ts read.
// Actually I didn't verify GET /sessions/:id returns items in the Next.js app.
// Let's assume list for now.
return client.get<Session>(`/sessions/${id}`);
}
};