lobe-chat
1import { API_ENDPOINTS } from '@/services/_url';
2import { useUserStore } from '@/store/user';
3import { preferenceSelectors } from '@/store/user/selectors';
4import { TraceEventBasePayload, TraceEventPayloads } from '@/types/trace';
5
6class TraceService {
7private async request<T>(data: T) {
8try {
9return fetch(API_ENDPOINTS.trace, {
10body: JSON.stringify(data),
11headers: { 'Content-Type': 'application/json' },
12method: 'POST',
13});
14} catch (e) {
15console.error(e);
16}
17}
18
19async traceEvent(data: TraceEventPayloads & TraceEventBasePayload) {
20const enabled = preferenceSelectors.userAllowTrace(useUserStore.getState());
21
22if (!enabled) return;
23
24return this.request(data);
25}
26}
27
28export const traceService = new TraceService();
29