import type { LinkGraphResult, LinkSuggestion, SemanticSuggestion, Cluster, DuplicatePair, WPPost, ConnectionSettings } from './types' function getHeaders(): Record { return { 'Content-Type': 'application/json', 'X-WP-Nonce': window.supacoContentBridge.nonce, } } function url(path: string): string { return window.supacoContentBridge.restUrl + path } async function request(path: string, options: RequestInit = {}): Promise { const res = await fetch(url(path), { headers: getHeaders(), ...options, }) if (!res.ok) { const err = await res.json().catch(() => ({})) throw new Error(err.error || err.message || `Request failed: ${res.status}`) } return res.json() } export const api = { getPosts: () => request('posts'), buildLinkGraph: () => request('graph', { method: 'POST' }), suggestLinks: (sourceSlug: string) => request<{ suggestions: LinkSuggestion[] }>('suggest', { method: 'POST', body: JSON.stringify({ source_slug: sourceSlug }), }), semanticSuggestLinks: (postId: number) => request<{ suggestions: SemanticSuggestion[] }>('semantic-suggest', { method: 'POST', body: JSON.stringify({ post_id: postId }), }), detectClusters: () => request<{ clusters: Cluster[] }>('clusters', { method: 'POST' }), findDuplicates: (threshold = 0.7) => request<{ duplicates: DuplicatePair[] }>('duplicates', { method: 'POST', body: JSON.stringify({ threshold }), }), getSettings: () => request('settings'), updateSettings: (settings: Partial) => request('settings', { method: 'PUT', body: JSON.stringify(settings), }), }