export interface TabEventPayload { source: string; target?: string; action: string; payload?: Record; } export interface ApiResult { ok: boolean; data?: T; error?: string; } const jsonHeaders = { 'Content-Type': 'application/json' }; export async function publishTabEvent(event: TabEventPayload): Promise { try { const response = await fetch('/api/tabs/events', { method: 'POST', headers: jsonHeaders, body: JSON.stringify(event), }); const data = await response.json(); return response.ok ? { ok: true, data } : { ok: false, error: data?.error || response.statusText }; } catch (error) { return { ok: false, error: error instanceof Error ? error.message : 'Unknown tab bus error' }; } } export async function getApiSpec(): Promise { try { const response = await fetch('/api/openapi.json'); const data = await response.json(); return response.ok ? { ok: true, data } : { ok: false, error: data?.error || response.statusText }; } catch (error) { return { ok: false, error: error instanceof Error ? error.message : 'Unable to load API spec' }; } }