import type { ICard, IEffect, IGame, ILobby, IPlayer, ITeam, ITurn, IUser, ServerMessage } from "../generic/index.js" import { WebSocket } from "ws" export interface ISClientProvider { socket: WebSocket send: (message: ServerMessage) => void } export interface ISQuery { provider: ISClientProvider accept: (message: ServerMessage) => void cancel: (message: ServerMessage) => void error: (message: string) => void } export interface ISEffect extends IEffect { use: () => void } export interface ISCard extends ICard { } export interface ISTurn extends ITurn { lockCard: (card: ICard) => void } export interface ISPlayer extends IPlayer { setReady: (ready: boolean) => void } export interface ISTeam extends ITeam { damage: (amount: number) => void addPlayer: (player: IPlayer) => void removePlayer: (player: IPlayer) => void startTurn: () => void endTurn: () => void die: () => void } export interface ISGame extends IGame { addTeam: (team: ISTeam) => void removeTeam: (team: ISTeam) => void start: () => void request_join: (query: ISQuery) => void request_kick: (query: ISQuery) => void request_leave: (query: ISQuery) => void request_start: (query: ISQuery) => void request_changeRules: (query: ISQuery) => void request_gameEnd: (query: ISQuery) => void } export interface ISUser extends IUser { } export interface ISLobby extends ILobby { createGame: () => string removeGame: (game: ISGame) => void request_createGame: (query: ISQuery) => void request_login: (query: ISQuery) => void }