44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
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<NotificationStatus>({
|
|
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
|
|
});
|
|
}
|