import { useQuery } from '@tanstack/vue-query'; import { apiClient } from '../lib/api/client'; export interface NotificationStatus { secretConfigured: boolean; secretHint: string | null; webhookSecret: string | null; packageWhitelist: string[]; ingestedCount: number; lastNotificationAt: string | null; ingestEndpoint: string; } // Derive a sensible default ingest endpoint from current API base URL const apiBaseUrl = (apiClient.defaults.baseURL as string | undefined) ?? 'http://localhost:4000/api'; const defaultIngestEndpoint = (apiBaseUrl.endsWith('/') ? apiBaseUrl.slice(0, -1) : apiBaseUrl) + '/transactions/notification'; const initialStatus: NotificationStatus = { secretConfigured: false, secretHint: null, webhookSecret: null, packageWhitelist: [], ingestedCount: 0, lastNotificationAt: null, ingestEndpoint: defaultIngestEndpoint }; export function useNotificationStatusQuery() { return useQuery({ queryKey: ['notification-status'], queryFn: async () => { try { const { data } = await apiClient.get('/notifications/status'); return data as NotificationStatus; } catch (error) { console.warn('[notifications] using fallback status', error); return initialStatus; } }, initialData: initialStatus, staleTime: 30_000 }); }