// @flow export type ApiError = { message: string; details: ApiErrorDetail[]; } export type ApiErrorDetail = { message: string; } export type ApiGameState = "LOBBY" | "PLAYING"; export type ApiLobby = { id: number; name: string; owner: ApiPlayer; players: ApiPlayer[]; settings: ApiSettings; state: ApiGameState; } export type ApiWonderSidePickMethod = "EACH_RANDOM" | "ALL_A" | "ALL_B" | "SAME_RANDOM_FOR_ALL"; export type ApiSettings = { randomSeedForTests: number; timeLimitInSeconds: number; wonderSidePickMethod: ApiWonderSidePickMethod; initialGold: number; discardedCardGold: number; defaultTradingCost: number; pointsPer3Gold: number; lostPointsPerDefeat: number; wonPointsPerVictoryPerAge: Map; } export type ApiPlayer = { username: string; displayName: string; index: number; ready: boolean; } export type ApiTable = {} export type ApiAction = {} export type ApiHandCard = {} export type ApiCard = {} export type ApiPreparedCard = {} export type ApiPlayerTurnInfo = { playerIndex: number; table: ApiTable; currentAge: number; action: ApiAction; hand: ApiHandCard[]; neighbourGuildCards: ApiCard[]; message: string; } export type ApiMoveType = "PLAY" | "PLAY_FREE" | "UPGRADE_WONDER" | "DISCARD" | "COPY_GUILD"; export type ApiProvider = "LEFT_NEIGHBOUR" | "RIGHT_NEIGHBOUR"; export type ApiResourceType = "WOOD" | "STONE" | "ORE" | "CLAY" | "GLASS" | "PAPYRUS" | "LOOM"; export type ApiResources = { quantities: Map; } export type ApiBoughtResources = { provider: ApiProvider; resources: ApiResources; } export type ApiPlayerMove = { type: ApiMoveType; cardName: string; boughtResources: ApiBoughtResources[]; }