import type { UseQueryOptions } from '@tanstack/react-query'; import type { DATA_TYPE, OPERATORS, ROLES } from './constants'; import type { TIME_UNIT } from './date'; export type ObjectValues = T[keyof T]; export type ReactQueryOptions = Omit, 'queryKey' | 'queryFn'>; export type TimeUnit = ObjectValues; export type Role = ObjectValues; export type DynamicDataType = ObjectValues; export type Operator = (typeof OPERATORS)[keyof typeof OPERATORS]; export interface Auth { user?: { id: string; username: string; role: string; isAdmin: boolean; }; shareToken?: { websiteId: string; }; } export interface Filter { name: string; operator: Operator; value: string; type?: string; column?: string; prefix?: string; } export interface DateRange { startDate: Date; endDate: Date; value?: string; unit?: TimeUnit; num?: number; offset?: number; } export interface DynamicData { [key: string]: number | string | number[] | string[]; } export interface QueryOptions { joinSession?: boolean; columns?: Record; limit?: number; prefix?: string; isCohort?: boolean; } export interface QueryFilters extends DateParams, FilterParams, SortParams, PageParams, SegmentParams { cohortFilters?: QueryFilters; } export interface DateParams { startDate?: Date; endDate?: Date; unit?: string; timezone?: string; compareDate?: Date; } export interface FilterParams { path?: string; referrer?: string; title?: string; query?: string; host?: string; os?: string; browser?: string; device?: string; country?: string; region?: string; city?: string; language?: string; event?: string; search?: string; tag?: string; eventType?: number; segment?: string; cohort?: string; compare?: string; } export interface SortParams { orderBy?: string; sortDescending?: boolean; } export interface PageParams { page?: number; pageSize?: number; } export interface SegmentParams { segment?: string; cohort?: string; } export interface PageResult { data: T; count: number; page: number; pageSize: number; orderBy?: string; sortDescending?: boolean; search?: string; } export interface RealtimeData { countries: Record; events: any[]; pageviews: any[]; referrers: Record; timestamp: number; series: { views: any[]; visitors: any[]; }; totals: { views: number; visitors: number; events: number; countries: number; }; urls: Record; visitors: any[]; } export interface ApiError extends Error { code?: string; message: string; } export interface WhiteLabel { name: string; url: string; image: string; }