@idealic/poker-engine
Version:
Professional poker game engine and hand evaluator with built-in iterator utilities
223 lines • 8.82 kB
TypeScript
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