/** * REST helpers for the Agent Ready page. * Routes live under llm-analytics/v1/agent-audit/* (class-agent-audit.php). */ import type { AgentReadySettings, AuditResult, FixResponse } from './types'; interface WpApiSettings { root?: string; nonce?: string; } function apiBase(): { root: string; nonce: string } { const settings = (window as unknown as { wpApiSettings?: WpApiSettings }).wpApiSettings; return { root: (settings?.root ?? '/wp-json/').replace(/\/$/, '') + '/', nonce: settings?.nonce ?? '', }; } async function request(path: string, init?: RequestInit): Promise { const { root, nonce } = apiBase(); const response = await fetch(root + 'llm-analytics/v1' + path, { ...init, headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': nonce, ...(init?.headers ?? {}), }, }); const data = (await response.json().catch(() => null)) as | (T & { message?: string }) | null; if (!response.ok) { throw new Error(data?.message || `Request failed (HTTP ${response.status})`); } return data as T; } export function fetchResult(): Promise { return request('/agent-audit/result'); } export function runAudit(): Promise { return request('/agent-audit/run', { method: 'POST' }); } export function applyFix(checkId: string): Promise { return request('/agent-audit/fix', { method: 'POST', body: JSON.stringify({ check_id: checkId }), }); } export function fetchSettings(): Promise { return request('/agent-audit/settings'); } export function saveSettings(payload: { toggles?: Record; content_signal?: Partial; webmcp_add_to_cart?: boolean; /* Phase F sub-options (FA-2/5/6/7). */ markdown_conneg?: boolean; restore_feed_links?: boolean; canonical_fill?: boolean; meta_description_fill?: boolean; security_headers?: Partial; }): Promise { return request('/agent-audit/settings', { method: 'POST', body: JSON.stringify(payload), }); }