import type { UseQueryOptions } from '@tanstack/react-query'; import type { Board as PrismaBoard } from '@/generated/prisma/client'; 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; websiteIds?: string[]; boardId?: string; pixelId?: string; pixelIds?: string[]; linkId?: string; linkIds?: string[]; }; } export interface PropertyFilter { propertyName: string; dataType: number; operator: Operator; value: string; } export type EventPropertyFilter = PropertyFilter; export interface Filter { name: string; operator: Operator; value: string | string[]; type?: string; column?: string; prefix?: string; paramName?: 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 EventDataSeriesPoint { x: string; t: string; y: number; } export interface EventDataDateSeriesPoint { t: string; y: number; } export interface EventDataNumericStats { total: number; average: number; median: number; max: number; min: number; } export interface SessionDataPivotRow { sessionId: string; distinctId: string; createdAt: string | Date; propertyKeys: string[]; propertyValues: string[]; } export interface PropertyCardinalityBucket { label: string; count: number; } export interface PropertyLeaderboardRow { label: string; activity: number; sessions: number; visits: number; views: number; events: number; totaltime: number; newSessions: number; returningSessions: number; } export interface QueryOptions { joinSession?: boolean; columns?: Record; limit?: number; prefix?: string; isCohort?: boolean; cohortMatch?: string; cohortActionName?: string; } 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; excludeBounce?: boolean; match?: 'all' | 'any'; } 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 BoardComponentConfig { type: string; entityType?: 'website' | 'pixel' | 'link'; entityId?: string; websiteId?: string; title?: string; description?: string; props?: Record; } export interface BoardColumn { id: string; component?: BoardComponentConfig; size?: number; } export interface BoardRow { id: string; columns: BoardColumn[]; size?: number; } export interface BoardParameters { websiteId?: string; pixelId?: string; linkId?: string; rows?: BoardRow[]; } export interface Board extends Omit { parameters: BoardParameters; } export interface WhiteLabel { displayName: string; domainName: string; logoUrl: string; }