blackjack-mcp-server
Version:
Professional-grade Blackjack MCP server with multi-player support, advanced rule variations, and comprehensive game management
269 lines • 6.36 kB
TypeScript
/**
* Core TypeScript interfaces for the Blackjack MCP Server
* Comprehensive type system supporting advanced blackjack features
*/
export declare enum Suit {
HEARTS = "hearts",
DIAMONDS = "diamonds",
CLUBS = "clubs",
SPADES = "spades"
}
export declare enum Rank {
ACE = "A",
TWO = "2",
THREE = "3",
FOUR = "4",
FIVE = "5",
SIX = "6",
SEVEN = "7",
EIGHT = "8",
NINE = "9",
TEN = "10",
JACK = "J",
QUEEN = "Q",
KING = "K"
}
export interface Card {
suit: Suit;
rank: Rank;
id: string;
}
export declare enum GamePhase {
WAITING_FOR_PLAYERS = "waiting_for_players",
BETTING = "betting",
DEALING = "dealing",
PLAYER_TURN = "player_turn",
DEALER_TURN = "dealer_turn",
ROUND_END = "round_end",
GAME_OVER = "game_over"
}
export declare enum HandStatus {
ACTIVE = "active",
STAND = "stand",
BUST = "bust",
BLACKJACK = "blackjack",
SURRENDER = "surrender",
DOUBLE_DOWN = "double_down"
}
export declare enum HandResult {
WIN = "win",
LOSE = "lose",
PUSH = "push",
BLACKJACK = "blackjack",
SURRENDER = "surrender"
}
export interface Hand {
id: string;
cards: Card[];
bet: number;
status: HandStatus;
isDoubleDown: boolean;
isSplit: boolean;
parentHandId?: string;
value: number;
softValue: boolean;
result?: HandResult;
payout?: number;
}
export interface Player {
id: string;
name: string;
balance: number;
hands: Hand[];
isActive: boolean;
totalBet: number;
insurance?: number;
statistics: PlayerStatistics;
joinedAt: Date;
lastAction?: Date;
}
export interface PlayerStatistics {
gamesPlayed: number;
handsWon: number;
handsLost: number;
handsPush: number;
blackjacks: number;
busts: number;
totalWagered: number;
totalWon: number;
totalLost: number;
winRate: number;
averageBet: number;
biggestWin: number;
biggestLoss: number;
currentStreak: number;
longestWinStreak: number;
longestLoseStreak: number;
}
export interface DealerHand {
cards: Card[];
value: number;
softValue: boolean;
holeCard?: Card;
showHoleCard: boolean;
}
export interface GameRules {
decks: number;
minBet: number;
maxBet: number;
dealerHitsSoft17: boolean;
blackjackPayout: number;
maxPlayers: number;
allowSurrender: boolean;
allowDoubleAfterSplit: boolean;
allowResplitAces: boolean;
maxSplits: number;
insurancePayout: number;
doubleDownRules: 'any' | 'hard9-11' | 'hard10-11';
splitRules: 'any' | 'pairs-only';
penetration: number;
}
export interface GameState {
gameId: string;
phase: GamePhase;
players: Map<string, Player>;
dealerHand: DealerHand;
deck: Card[];
discardPile: Card[];
currentPlayerIndex: number;
currentHandIndex: number;
round: number;
rules: GameRules;
createdAt: Date;
lastActivity: Date;
minPlayersToStart: number;
maxInactiveTime: number;
}
export interface Transaction {
id: string;
playerId: string;
gameId: string;
type: TransactionType;
amount: number;
balanceBefore: number;
balanceAfter: number;
handId?: string;
description: string;
timestamp: Date;
metadata?: Record<string, any>;
}
export declare enum TransactionType {
BET = "bet",
WIN = "win",
LOSE = "lose",
PUSH = "push",
INSURANCE = "insurance",
DOUBLE_DOWN = "double_down",
SPLIT = "split",
SURRENDER = "surrender",
BLACKJACK = "blackjack",
REFUND = "refund"
}
export interface GameEvent {
id: string;
gameId: string;
playerId?: string;
type: GameEventType;
data: any;
timestamp: Date;
}
export declare enum GameEventType {
GAME_CREATED = "game_created",
PLAYER_JOINED = "player_joined",
PLAYER_LEFT = "player_left",
BETTING_STARTED = "betting_started",
BET_PLACED = "bet_placed",
CARDS_DEALT = "cards_dealt",
PLAYER_ACTION = "player_action",
HAND_COMPLETED = "hand_completed",
DEALER_REVEAL = "dealer_reveal",
ROUND_COMPLETED = "round_completed",
GAME_ENDED = "game_ended",
ERROR = "error"
}
export interface SavedGameState {
gameState: GameState;
transactions: Transaction[];
events: GameEvent[];
savedAt: Date;
version: string;
}
export interface ValidationError {
field: string;
message: string;
code: string;
}
export interface ActionResult<T = any> {
success: boolean;
data?: T;
error?: string;
errors?: ValidationError[];
warnings?: string[];
}
export interface PlayerAction {
playerId: string;
handId: string;
action: 'hit' | 'stand' | 'double' | 'split' | 'surrender' | 'insurance';
amount?: number;
timestamp: Date;
}
export interface GameSummary {
gameId: string;
phase: GamePhase;
playerCount: number;
round: number;
totalPot: number;
dealerUpCard?: Card;
activePlayer?: string;
lastActivity: Date;
}
export interface PlayerSummary {
id: string;
name: string;
balance: number;
totalBet: number;
handsCount: number;
isActive: boolean;
statistics: PlayerStatistics;
}
export interface ResourceData {
uri: string;
mimeType: string;
text?: string;
}
export interface ServerConfig {
port?: number;
host?: string;
logLevel?: 'debug' | 'info' | 'warn' | 'error';
persistence?: {
enabled: boolean;
path?: string;
};
security?: {
maxGamesPerUser?: number;
rateLimit?: number;
};
}
export interface BlackjackMCPTools {
'blackjack.create_game': any;
'blackjack.join_game': any;
'blackjack.leave_game': any;
'blackjack.start_game': any;
'blackjack.end_game': any;
'blackjack.place_bet': any;
'blackjack.hit': any;
'blackjack.stand': any;
'blackjack.double_down': any;
'blackjack.split': any;
'blackjack.surrender': any;
'blackjack.insurance': any;
'blackjack.deal_cards': any;
'blackjack.next_player': any;
'blackjack.dealer_play': any;
'blackjack.resolve_round': any;
'blackjack.save_game': any;
'blackjack.load_game': any;
'blackjack.get_statistics': any;
'blackjack.reset_deck': any;
}
//# sourceMappingURL=index.d.ts.map