UNPKG

@idealic/poker-engine

Version:

Professional poker game engine and hand evaluator with built-in iterator utilities

223 lines 8.82 kB
import { Street } from '../types'; /** * Each PlayerStreetStats record represents stats for a single street in a hand. * For example, one record might capture all actions on the preflop or on the flop. * These values are recorded per street and must be aggregated to get overall metrics. */ export interface PlayerStreetStats { /** Unique identifier for each game */ gameId: string; /** Unique identifier for each hand */ hand: number; /** Unique identifier for the table */ tableId: string; /** Identifier for the player */ playerId: string; /** Timestamp when player started on the street */ timestamp: number; /** Current street (e.g., 'preflop', 'flop', 'turn', 'river') */ street: Street; /** Total time spent by the player on decisions on the street*/ decisionDuration: number; /** Number of aggressions on this street */ aggressions: number; /** Count of calls or checks made on this street */ passivities: number; /** Decisions made on this street */ decisions: number; /** Count of bets made on this street */ bets: number; /** Count of raises made on this street */ raises: number; /** Count of calls made on this street */ calls: number; /** Count of checks made on this street */ checks: number; /** Player folded on this street */ folds: number; /** 1 if the player went all-in on this street, else 0 */ allIns: number; /** 1 if the player voluntarily put money in the pot (beyond forced bets), else 0 */ voluntaryPutMoneyInPotTimes: number; /** 1 if the player made the first aggression on this street, else 0 */ firstAggressions: number; /** 1 if the player made the last aggression on this street, else 0 */ lastAggressions: number; /** Number of times the player limped (called without raising) on this street */ limps: number; /** Number of opportunities for a limp */ limpOpportunities: number; /** Number of times the player made a 3-bet (re-raise) on this street */ threeBets: number; /** Number of opportunities for a 3-bet */ threeBetOpportunities: number; /** Number of times the player folded when facing a 3-bet */ threeBetFolds: number; /** Number of times the player faced a 3-bet */ threeBetChallenges: number; /** Number of times the player won after facing a 3-bet */ threeBetDefenses: number; /** Number of times the player made a 4-bet (re-re-raise) on this street */ fourBets: number; /** Number of opportunities for a 4-bet */ fourBetOpportunities: number; /** Number of times the player folded when facing a 4-bet */ fourBetFolds: number; /** Number of times the player faced a 4-bet */ fourBetChallenges: number; /** Number of times the player won after facing a 4-bet */ fourBetDefenses: number; /** Whether the player made a continuation bet */ cbet: number; /** Number of opportunities for a continuation bet */ cbetOpportunities: number; /** Number of times the player folded when facing a continuation bet */ cbetFolds: number; /** Number of times the player faced a continuation bet */ cbetChallenges: number; /** Number of times the player won after facing a continuation bet */ cbetDefenses: number; /** Count of steal attempts (raising from late position to win the blinds) */ steals: number; /** Number of opportunities to attempt a steal */ stealOpportunities: number; /** Number of times the player folded when facing a steal */ stealFolds: number; /** Number of times the player faced a steal */ stealChallenges: number; /** Number of times the player won after facing a steal */ stealDefenses: number; /** Count of donk bets made (betting out-of-position into the pre-flop aggressor) */ donkBets: number; /** Opportunities for donk bets */ donkBetOpportunities: number; /** Number of times the player folded when facing a donk bet */ donkBetFolds: number; /** Number of times the player faced a donk bet */ donkBetChallenges: number; /** Number of times the player won after facing a donk bet */ donkBetDefenses: number; /** Count of check raises executed */ checkRaises: number; /** Opportunities to perform a check raise */ checkRaiseOpportunities: number; /** Number of times the player folded when facing a check raise */ checkRaiseFolds: number; /** Number of times the player faced a check raise */ checkRaiseChallenges: number; /** Number of times the player won after facing a check raise */ checkRaiseDefenses: number; /** Number of times the player folded when facing a shove */ shoveFolds: number; /** Number of times the player faced a shove */ shoveChallenges: number; /** Number of times the player won after facing a shove */ shoveDefenses: number; /** Number of times the player made an open shove */ openShoves: number; /** Number of opportunities for an open shove */ openShoveOpportunities: number; /** Number of times the player folded when facing an open shove */ openShoveFolds: number; /** Number of times the player faced an open shove */ openShoveChallenges: number; /** Number of times the player won after facing an open shove */ openShoveDefenses: number; /** Whether the player won subsequently */ success: number; /** Whether the player went to showdown */ wentToShowdown: number; /** Whether the player won money at showdown (success) */ wonAtShowdown: number; /** Whether the player won money at showdown (success) */ wonWithoutShowdown: number; /** Chip stack at the start of the hand */ stackBefore: number; /** Chip stack at the end of the hand */ stackAfter: number; /** Big blind value used for normalizing profit (for bb100 calculations) */ bigBlind: number; /** Times the player won */ won: number; /** Times the player lost */ lost: number; /** Currency of the game */ currency: string; /** Rate of the currency at the time of the game */ currencyRate: number; /** Amount invested on this street */ investments: number; /** Amount of earned money with investment subtracted */ profits: number; /** Amount of earned money with investment subtracted */ balance: number; /** Amount won on this street (positive only) */ winnings: number; /** Amount lost on this street (positive only) */ losses: number; /** Amount taken by the house from the pot */ rake: number; } /** * The PokerMetrics interface defines aggregated metrics computed over multiple hands. * Each metric includes its calculation, an explanation of its usefulness (importance), * and notes on how certain the metric is (certainty), based on the data quality. */ export interface PokerMetrics extends PlayerStreetStats { gameIds: Set<string>; gameCount: number; limpFrequency: number; limpSuccesses: number; limpSuccessFrequency: number; aggressionFactor: number; aggressionFrequency: number; cbetFrequency: number; cbetFoldFrequency: number; cbetDefenseFrequency: number; cbetSuccesses: number; cbetSuccessFrequency: number; threeBetFrequency: number; threeBetFoldFrequency: number; threeBetDefenseFrequency: number; threeBetSuccesses: number; threeBetSuccessFrequency: number; fourBetFrequency: number; fourBetFoldFrequency: number; fourBetDefenseFrequency: number; fourBetSuccesses: number; fourBetSuccessFrequency: number; stealFrequency: number; stealFoldFrequency: number; stealDefenseFrequency: number; stealSuccesses: number; stealSuccessFrequency: number; donkBetFrequency: number; donkBetFoldFrequency: number; donkBetDefenseFrequency: number; donkBetSuccesses: number; donkBetSuccessFrequency: number; checkRaiseFrequency: number; checkRaiseFoldFrequency: number; checkRaiseDefenseFrequency: number; checkRaiseSuccesses: number; checkRaiseSuccessFrequency: number; openShoveFrequency: number; openShoveFoldFrequency: number; openShoveDefenseFrequency: number; openShoveSuccesses: number; openShoveSuccessFrequency: number; wentToShowdownFrequency: number; wonAtShowdownFrequency: number; wonWithoutShowdownFrequency: number; decisionDurationAverage: number; decisionDuration: number; winningsAverage: number; investmentsAverage: number; profitAverage: number; lossesAverage: number; bb100: number; profitFactor: number; returnOnInvestmentFactor: number; stackToPotFactor: number; } //# sourceMappingURL=types.d.ts.map