import { apiClient } from './api/client'; import { logger } from '@/utils/logger'; export interface Webhook { id: string; url: string; events: string[]; status: 'active' | 'failed'; lastTriggered: string; secret?: string; created_at: string; } export const webhookService = { list: async (): Promise => { try { const response = await apiClient.get('/webhooks'); return (response.data || []).map(hook => ({ id: hook.id, url: hook.url, events: hook.events || [], status: hook.status || 'active', lastTriggered: hook.last_triggered || 'Never', created_at: hook.created_at, })); } catch (error: unknown) { const err = error as { response?: { status?: number }; code?: number }; const status = err?.response?.status ?? err?.code; const is5xx = typeof status === 'number' && status >= 500; if (!is5xx) { logger.error('[Webhooks] Failed to list webhooks', { error }); } // 5xx: no log (backend error, avoid console noise) return []; } }, create: async (url: string, events: string[] = ['*']): Promise => { const response = await apiClient.post('/webhooks', { url, events, }); return response.data; }, delete: async (id: string): Promise => { await apiClient.delete(`/webhooks/${id}`); }, regenerateKey: async (id: string): Promise<{ api_key: string }> => { const response = await apiClient.post<{ data: { api_key: string } }>(`/webhooks/${id}/regenerate-key`); // APIClient might already unwrap the first level of "data" // If response.data is { api_key }, we return it. return response.data as any; } };