import { NextApiRequest } from 'next'; import { COLLECTION_TYPE, DATA_TYPE, EVENT_TYPE, KAFKA_TOPIC, REPORT_FILTER_TYPES, ROLES, TEAM_FILTER_TYPES, USER_FILTER_TYPES, WEBSITE_FILTER_TYPES, } from './constants'; type ObjectValues = T[keyof T]; export type CollectionType = ObjectValues; export type Role = ObjectValues; export type EventType = ObjectValues; export type DynamicDataType = ObjectValues; export type KafkaTopic = ObjectValues; export type ReportSearchFilterType = ObjectValues; export type UserSearchFilterType = ObjectValues; export type WebsiteSearchFilterType = ObjectValues; export type TeamSearchFilterType = ObjectValues; export interface WebsiteSearchFilter extends SearchFilter { userId?: string; teamId?: string; includeTeams?: boolean; } export interface UserSearchFilter extends SearchFilter { teamId?: string; } export interface TeamSearchFilter extends SearchFilter { userId?: string; } export interface ReportSearchFilter extends SearchFilter { userId?: string; websiteId?: string; } export interface SearchFilter { filter?: string; filterType?: T; pageSize?: number; page?: number; orderBy?: string; } export interface FilterResult { data: T; count: number; pageSize: number; page: number; orderBy?: string; } export interface DynamicData { [key: string]: number | string | DynamicData | number[] | string[] | DynamicData[]; } export interface Auth { user?: { id: string; username: string; role: string; isAdmin: boolean; }; shareToken?: { websiteId: string; }; } export interface NextApiRequestQueryBody extends NextApiRequest { auth?: Auth; query: TQuery & { [key: string]: string | string[] }; body: TBody; headers: any; } export interface NextApiRequestAuth extends NextApiRequest { auth?: Auth; headers: any; } export interface User { id: string; username: string; password?: string; role: string; createdAt?: Date; } export interface Website { id: string; userId: string; resetAt: Date; name: string; domain: string; shareId: string; createdAt: Date; } export interface Share { id: string; token: string; } export interface WebsiteActive { x: number; } export interface WebsiteMetric { x: string; y: number; } export interface WebsiteEventMetric { x: string; t: string; y: number; } export interface WebsiteEventDataStats { fieldName: string; dataType: number; total: number; } export interface WebsiteEventDataFields { fieldName: string; dataType: number; fieldValue?: string; total: number; } export interface WebsitePageviews { pageviews: { t: string; y: number; }; sessions: { t: string; y: number; }; } export interface WebsiteStats { pageviews: { value: number; change: number }; uniques: { value: number; change: number }; bounces: { value: number; change: number }; totalTime: { value: number; change: number }; } export interface RealtimeInit { websites: Website[]; token: string; data: RealtimeUpdate; } export interface RealtimeUpdate { pageviews: any[]; sessions: any[]; events: any[]; timestamp: number; } export interface DateRange { startDate: Date; endDate: Date; unit: string; value: string; } export interface QueryFilters { startDate?: Date; endDate?: Date; timezone?: string; unit?: string; eventType?: number; url?: string; referrer?: string; title?: string; query?: string; os?: string; browser?: string; device?: string; country?: string; region?: string; city?: string; language?: string; event?: string; } export interface QueryOptions { joinSession?: boolean; columns?: { [key: string]: string }; }