export type GameState = { gameId: string, players: Player[], phase: Phase, status: Status, winner: WinnerRole, allowedActions: Action[], lastAction: null | Action, markedForKill: null | Player, killedBy: null | Player, savedPlayers: Player[], suspectVotes: Vote[], markedSuspect: null | Player, } export type Vote = { actor: Player, votesTo: Player } export type GameConfig = { gameId: string, maxPlayers: number, } export type Player = { id: string, name: string, role: Role, roleType: RoleType, isAlive: boolean, lastSavedAt: number, isActive: boolean, isAdmin: boolean } export enum Phase { NIGHT, ATTACK, DAY, TRIAL }; export enum Role { GODFATHER, AGENT, DOCTOR, DETECTIVE, CIVILIAN, SYSTEM } export enum RoleType { AGENTS, CIVILIANS } export enum Status { NOT_STARTED, STARTED, ENDED } export enum WinnerRole { AGENT, CIVILIAN } export enum Action { JOIN_GAME, LEAVE_GAME, START_GAME, BEGIN_NIGHT, CHOSEN_BY_GODFATHER, SAVE, INVESTIGATE, END_NIGHT, BEGIN_DAY, BEGIN_TALK_TIME, END_TALK_TIME, MARK_VOTE, BEGIN_PLEAD_TIME, END_PLEAD_TIME, MARK_JURY_VOTE, KILL_BY_TRIAL, END_DAY }