import { GenericApiErrorResp } from "./genericApiTypes"; import { BanTemplatesDataType } from "./otherTypes"; //Already compliant with new db specs export type PlayerHistoryItem = { id: string; type: "ban" | "warn"; author: string; reason: string; ts: number; exp?: number; revokedBy?: string; revokedAt?: number; } export type PlayerModalPlayerData = { //common displayName: string; pureName: string; isRegistered: boolean; isConnected: boolean; ids: string[]; //can be empty hwids: string[]; //can be empty license: string | null; actionHistory: PlayerHistoryItem[]; //can be empty //only if server player netid?: number; sessionTime?: number; //calcular baseado no tsConnected //only if registered tsJoined?: number; tsWhitelisted?: number; playTime?: number; notesLog?: string; notes?: string; oldIds?: string[]; //will also include the current ones oldHwids?: string[]; //will also include the current ones tsLastConnection?: number; //only show if offline } export type PlayerModalSuccess = { serverTime: number; //required to calculate if bans have expired on frontend banTemplates: BanTemplatesDataType[]; //TODO: move this to websocket push player: PlayerModalPlayerData; } export type PlayerModalResp = PlayerModalSuccess | GenericApiErrorResp; /** * Used in the players page */ export type PlayersStatsResp = { total: number; playedLast24h: number; joinedLast24h: number; joinedLast7d: number; } | GenericApiErrorResp; export type PlayersTableSearchType = { value: string; type: string; } export type PlayersTableFiltersType = string[]; export type PlayersTableSortingType = { key: 'playTime' | 'tsJoined' | 'tsLastConnection'; desc: boolean; }; export type PlayersTableReqType = { search: PlayersTableSearchType; filters: PlayersTableFiltersType; sorting: PlayersTableSortingType; //NOTE: the query needs to be offset.param inclusive, but ignore offset.license // therefore, optimistically always limit to x + 1 offset?: { param: number; license: string; } }; export type PlayersTablePlayerType = { license: string; displayName: string; playTime: number; tsJoined: number; tsLastConnection: number; notes?: string; isAdmin: boolean; isOnline: boolean; isWhitelisted: boolean; // isBanned: boolean; // warnCount: number; // banCount: number; } export type PlayersTableSearchResp = { players: PlayersTablePlayerType[]; hasReachedEnd: boolean; } | GenericApiErrorResp;